我正在开发一个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)时,声音质量更差。 我想知道我的代码中有任何参数配置错误 任何帮助,建议表示赞赏 提前谢谢。
答案 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 )。