2

我正在使用AudioTrack在 Android 上播放 PCM WAV 声音文件(另请参见此处)。流模式,工作线程。我想知道如何检测声音的结束,以便我可以释放和释放AudioTrack. 该write()调用似乎是阻塞的——但它会阻塞直到所提供数据的播放完成吗?不太确定。

是我,还是这门课上的文档严重不足?如果你碰巧有一个不错的非官方指南的链接AudioTrack,我愿意看一个。

4

1 回答 1

11

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

因此,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

于 2012-09-11T07:14:24.900 回答