播放时的Android AudioTrack延迟

时间:2016-10-29 16:34:46

标签: android audio audiotrack

我正在尝试使用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秒后,我真的需要以最小延迟播放音频,所以有人会解释什么正在进行,是否有任何可用的解决方案或我应该接受这个,因为这是一个硬件问题?

1 个答案:

答案 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