我正在尝试使用Android中的AudioTrack
类播放原始声音数据,我正在使用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秒后,我真的需要以最小延迟播放音频,所以有人会解释什么正在进行,是否有任何可用的解决方案或我应该接受这个,因为这是一个硬件问题?
答案 0 :(得分:2)
我假设您的目标是提出一些交互式音频解决方案(即,响应某些用户操作播放声音的地方),因为在这种情况下,低延迟确实很重要。
在Android上,要实现最低延迟,您需要使用Open SL ES API,该API可通过NDK用于本机(C ++)代码。可以实现低延迟的唯一Java端机制是SoundPool类,但它在您可以播放的声音方面存在局限性。
有关详细信息,请参阅the page on high-performance audio,并查看此SO答案:Low-latency audio playback on Android