我正在开发一个可播放实时speex音频流的android应用。所以我用了jspeex library
音频流是11khz,16位。
在android方面,我做了如下操作:

SpeexDecoder decoder = new SpeexDecoder();
decoder.init(1, 11025,1, true);
decoder.processData(subdata, 0, subdata.length);
byte[] decoded_data =  new byte[decoder.getProcessedDataByteSize()];
int result= decoder.getProcessedData(decoded_data, 0);

当Audiotrack播放此解码数据时,音频的某些部分将被剪切。
同样,当解码器设置为nb-mode(第一个参数设置为0)时,声音质量也会变差。
我想知道我的代码中是否存在任何参数配置错误。
任何帮助,建议表示赞赏。
提前致谢。

最佳答案

应针对特定设备以最佳方式设置采样率和缓冲区大小。例如,您可以使用AudioRecord.getMinBufferSize()获得缓冲区的最佳大小:

   int sampleRate = 11025; //try also different standard sampleRate
   int bufferSize = AudioRecord.getMinBufferSize(sampleRate,
                        AudioFormat.CHANNEL_CONFIGURATION_MONO,
                        AudioFormat.ENCODING_PCM_16BIT);

如果Audiotrack的缓冲区太小或太大,则会遇到音频故障。我建议您看看here并使用这些值(sampleRate和bufferSize)。

10-06 13:02