我正在尝试使用 AudioTrack
播放原始声音数据Android 中的类,我使用 write
方法,但我注意到在 write 方法返回和播放实际声音之间存在延迟,为简单起见,让我们使用 AudioRecord
类为以下psedu代码:
//init AudioTrack
//init AudioRecord
while(true){
byte [] buffer = new byte[1000];
int read = audioRecord(buffer,0,1000);
audioTrack.write(buffer,0,read);
}
我希望得到
read / sample rate
的延迟。秒,但实际声音是在大约 0.5 秒之后播放的,我真的需要以最小的延迟播放音频,所以有没有人解释正在发生的事情,是否有任何可用的解决方案,或者我应该接受这个作为这是硬件问题吗?
最佳答案
我假设您的目标是提出一些交互式音频解决方案(即播放声音以响应某些用户操作),因为在这种情况下,低延迟确实很重要。
在 Android 上,要实现最低延迟,您需要使用 Open SL ES API,该 API 可通过 NDK 用于 native (C++) 代码。唯一可以实现低延迟的 Java 端机制是 SoundPool类,但它对您可以播放的声音类型有限制。
如需更多信息,请参阅 the page on high-performance audio ,并查看这个 SO 答案:Low-latency audio playback on Android
关于Android AudioTrack 播放延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40321253/