我正在使用AudioTrack
在Android上播放PCM WAV声音文件(另请参阅here)。流模式,工作线程。我想知道如何检测声音的结束,以便释放并释放AudioTrack
。看起来write()
调用是阻塞的 - 但它会阻塞,直到提供的数据回放完成为止?不太确定。
是我,还是这个班级的文件严重不足?如果您碰巧有一个指向AudioTrack
的非正式指南的链接,我愿意看一个。
答案 0 :(得分:11)
根据我的经验,AudioTrack.write()
调用会阻塞,直到数据写入HW的音频缓冲区。
所以在write()
完成后,保证播放音频。基本上它运作良好。
要更精确地检测音频结束,请使用AudioTrack.setNotificationMarkerPosition()
和AudioTrack.setPlaybackPositionUpdateListener()
。注意setNotificationMarkerPosition()
计算音频样本(不是字节),因此如果您的音频是16位样本,则位置将为dataSize / 2.