Edit online

播放音频文件时先播放一段 0 数据

../../images/zero-data.png

如上图所示,在播放音频时,会先播放一段 0 数据。这个问题是由 Thread 的 audio 框架导致的。在读取音频文件时,如果读取的音频数据长度小于音频框架中内存池一个 block 的大小,则在将音频数据写入内存池后,并不会立即将该 block 加入到数据队列,而是会等到一个 block 写满才加入数据队列。尽管未加入数据队列,但 audio 框架也会立即开始传输。此时数据队列中没有任何数据,会先填充一个 len 长度的 0 数据,所以播放会有 0 数据出现。

若不想播放起始时的 0 数据,则需要在应用层增大读取音频文件的 buffer 长度,与内存池的 block 大小相同即可,这样在第一次写内存池时,就可以将 block 加入到数据队列。如下图

../../images/no-zero-data.png