Android AudioTrack 播放延迟
Android AudioTrack latency with playback
我正在尝试在 Android 中使用 AudioTrack
class 播放原始声音数据,我正在使用 write
方法,但我注意到存在延迟在写入方法 returns 和播放实际声音之间,为了简单起见,我们使用 AudioRecord
class 作为以下伪代码:
//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,它可通过 NDK 用于本机 (C++) 代码。唯一可以实现低延迟的 Java 侧机制是 SoundPool class,但它对您可以播放的声音类型有限制。
有关详细信息,请参阅 the page on high-performance audio, and also check out this SO answer: Low-latency audio playback on Android
我正在尝试在 Android 中使用 AudioTrack
class 播放原始声音数据,我正在使用 write
方法,但我注意到存在延迟在写入方法 returns 和播放实际声音之间,为了简单起见,我们使用 AudioRecord
class 作为以下伪代码:
//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,它可通过 NDK 用于本机 (C++) 代码。唯一可以实现低延迟的 Java 侧机制是 SoundPool class,但它对您可以播放的声音类型有限制。
有关详细信息,请参阅 the page on high-performance audio, and also check out this SO answer: Low-latency audio playback on Android