解决方案 »

  1.   

    用AudioTrack播放试试,在Android高级编程里讲的例子是用audioTrack播放的
      

  2.   

    谢谢,我用audiotrack调用出来了。但是播放出来的是杂音。难道是我的录音方法写的有问题嘛?
      

  3.   

    使用AudioTrack时,设置的属性需要和录制文件时设置的属性相同。
    还有,录制时的recBufSize(你贴的代码里的变量)
    是由AudioRecord生成的吧(参考书代码)        int frequency=11025;
            int channelConfig=AudioFormat.CHANNEL_CONFIGURATION_MONO;//貌似被弃用,值是2
            int audioFormat=AudioFormat.ENCODING_PCM_16BIT;
            //三个参数为:frequency频率、channelConfig音频编码、audioFormat声道编码
            int bufferSize=AudioRecord.getMinBufferSize(frequency, channelConfig, audioFormat);
      

  4.   

    使用AudioTrack时,设置的属性需要和录制文件时设置的属性相同。
    还有,录制时的recBufSize(你贴的代码里的变量)
    是由AudioRecord生成的吧(参考书代码)        int frequency=11025;
            int channelConfig=AudioFormat.CHANNEL_CONFIGURATION_MONO;//貌似被弃用,值是2
            int audioFormat=AudioFormat.ENCODING_PCM_16BIT;
            //三个参数为:frequency频率、channelConfig音频编码、audioFormat声道编码
            int bufferSize=AudioRecord.getMinBufferSize(frequency, channelConfig, audioFormat);
    是的。我定义的recBufSize是这样的:private int recBufSize = AudioRecord.getMinBufferSize(fre,channelConfiguration,audioEncoding);public void Play() throws Exception
    {
    boolean isPlaying = true;
    //String dir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/xz.pcm";
    int mAudioMinBufSize = AudioTrack.getMinBufferSize(8000,AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT);
    int bufferSize = AudioTrack.getMinBufferSize(fre, channelConfiguration, audioEncoding);
    short[] buffer = new short[bufferSize];
    try
    {
    File dir = new File (Environment.getExternalStorageDirectory().getAbsolutePath()+"/xz.pcm");
    InputStream is = new FileInputStream(dir);
    DataInputStream dis = new DataInputStream(new BufferedInputStream(is));
    AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC,fre,channelConfiguration,audioEncoding,mAudioMinBufSize,AudioTrack.MODE_STREAM);

    track.setStereoVolume(1.0f, 1.0f);
    track.play();
    while(isPlaying && dis.available()>0)
    {
    int i = 0;
    while(dis.available()>0 && i<buffer.length)
    {
    buffer[i] = dis.readShort();
    i++;
    }
    //播放声音关键
    track.write(buffer, 0, buffer.length);
    }
    track.stop();
    track.release();
    dis.close();
    }
    catch(Exception e)
    {
    e.printStackTrace();

    }

    }这是我的播放代码,请看看有什么问题吗?
      

  5.   

    试下这个例子~
    http://download.csdn.net/detail/inquisitive_plus/8402049