我正在使用AudioTrack
在 Android 上播放 PCM WAV 声音文件(另请参见此处)。流模式,工作线程。我想知道如何检测声音的结束,以便我可以释放和释放AudioTrack
. 该write()
调用似乎是阻塞的——但它会阻塞直到所提供数据的播放完成吗?不太确定。
是我,还是这门课上的文档严重不足?如果你碰巧有一个不错的非官方指南的链接AudioTrack
,我愿意看一个。
我正在使用AudioTrack
在 Android 上播放 PCM WAV 声音文件(另请参见此处)。流模式,工作线程。我想知道如何检测声音的结束,以便我可以释放和释放AudioTrack
. 该write()
调用似乎是阻塞的——但它会阻塞直到所提供数据的播放完成吗?不太确定。
是我,还是这门课上的文档严重不足?如果你碰巧有一个不错的非官方指南的链接AudioTrack
,我愿意看一个。
根据我的经验,AudioTrack.write()
调用确实会阻塞,直到数据写入硬件的音频缓冲区。
因此,write()
完成后,保证播放音频。基本上它运作良好。
要更准确地检测音频的结尾,请使用AudioTrack.setNotificationMarkerPosition()
和AudioTrack.setPlaybackPositionUpdateListener()
。注意setNotificationMarkerPosition()
计算音频样本(不是字节),因此如果您的音频是 16 位样本,则位置将为 dataSize/2。