使用OpenSL的所有android设备的8KHz采样率语音通信

使用OpenSL的所有android设备的8KHz采样率语音通信,android,audio,android-ndk,opensl,Android,Audio,Android Ndk,Opensl,我需要创建一个VOIP应用程序,我正在使用OpenSL ES。我需要捕获和播放所有android设备的8KHz采样率的pcm音频数据。但是,当我以8KHz的采样率采集音频并同时播放(语音通信)时,它会产生噪音,并且对于某些设备(如三星Galaxy S3、S4等),音频会失真。我知道,每个设备都有一个特定的首选采样率,我想知道是否有任何解决方法或任何方法可以在不失真的情况下仅使用8KHz采样率 我尝试增加缓冲区大小和其他许多事情,但没有找到一个最佳的通用解决方案。我需要为我的编码器和解码器在8KH

我需要创建一个VOIP应用程序,我正在使用OpenSL ES。我需要捕获和播放所有android设备的8KHz采样率的pcm音频数据。但是,当我以8KHz的采样率采集音频并同时播放(语音通信)时,它会产生噪音,并且对于某些设备(如三星Galaxy S3、S4等),音频会失真。我知道,每个设备都有一个特定的首选采样率,我想知道是否有任何解决方法或任何方法可以在不失真的情况下仅使用8KHz采样率

我尝试增加缓冲区大小和其他许多事情,但没有找到一个最佳的通用解决方案。我需要为我的编码器和解码器在8KHz的音频数据采样。我的第二个想法是在将音频数据传递到编码器或解码器之前对其进行重新采样,但这不是我正在寻找的解决方案

我发现CSipSimple使用OpenSL,我也浏览了他们的一些代码。但是,我却找不到解决办法,可能是我不知道该把注意力集中在哪里。
我被困在这里了

以下是我解决问题的方法:

我正在使用OpenSL ES为Android开发音频流,教程对我帮助很大。我按照这里的指示做了,让它工作了。然后我发现使用这种方法的音频流对某些设备(主要是三星设备)效果不太好。我尝试了很多方法,比如增加缓冲区大小、禁用环境混响等。我发现这个答案对于提高流媒体性能非常有用

最后,我发现音频被扭曲了,因为我必须使用锁来同步缓冲开关。建议使用无锁结构以获得更好的音频性能。然后我使用了Victor Lazzarini的另一种方法,即无锁音频IO。的这篇文章极大地帮助实现了无锁结构以及更好的音频性能