AudioTrack:如何检测声音结束?

时间:2011-10-04 02:26:45

标签: android audio audiotrack

我正在使用AudioTrack在Android上播放PCM WAV声音文件(另请参阅here)。流模式,工作线程。我想知道如何检测声音的结束,以便释放并释放AudioTrack。看起来write()调用是阻塞的 - 但它会阻塞,直到提供的数据回放完成为止?不太确定。

是我,还是这个班级的文件严重不足?如果您碰巧有一个指向AudioTrack的非正式指南的链接,我愿意看一个。

1 个答案:

答案 0 :(得分:11)

根据我的经验,AudioTrack.write()调用会阻塞,直到数据写入HW的音频缓冲区。

所以在write()完成后,保证播放音频。基本上它运作良好。

要更精确地检测音频结束,请使用AudioTrack.setNotificationMarkerPosition()AudioTrack.setPlaybackPositionUpdateListener()。注意setNotificationMarkerPosition()计算音频样本(不是字节),因此如果您的音频是16位样本,则位置将为dataSize / 2.

我的项目中有一个例子: https://github.com/mine260309/android-sexypsf-player/blob/psf2/src/com/mine/psf/sexypsf/MineSexyPsfPlayer.java