在Android中使用Jspeex解码音频会产生不连贯/剪裁的声音

时间:2014-04-09 09:02:11

标签: android audio live-streaming speex jspeex

我正在开发一个Android应用程序,它播放现场speex音频流。所以我使用了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)时,声音质量更差。 我想知道我的代码中有任何参数配置错误 任何帮助,建议表示赞赏 提前谢谢。

1 个答案:

答案 0 :(得分:1)

应针对特定设备以优化方式设置采样率和缓冲区大小。例如,您可以使用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 )。