AudioTrack WRITE_BLOCKING vs WRITE_NON_BLOCKING

问题描述 投票:0回答:1

我想弄清楚Android AudioTrack的确切工作原理。对我来说有一点困惑是写模式。

documentation for the write() method表示您可以通过写入模式WRITE_BLOCKING or WRITE_NON_BLOCKING

根据描述,WRITE_BLOCKING会阻止所有数据播放吗?因此,例如,如果我有44100个大小为2048个样本的单声道音频缓冲区,则使用WRITE_BLOCKING调用写入将阻塞2048 *(1000.0 / 44100)毫秒?这是否意味着只要写入完成,您就会立即处于缓冲区欠载情况中?

java android audio signal-processing audiotrack
1个回答
1
投票

正如@Michael所提到的,它会阻塞,直到数据排队。这与WRITE_BLOCKING的描述中的含义相同;它会阻塞,直到数据写入内部缓冲区(在构造期间指定大小的内部缓冲区)。

如果缓冲区已满(数据尚未播放),write( ..., 2048, WRITE_BLOCKING )将阻止大约2048 *(1000.0 / 44100)秒。如果write()确实阻塞了任何时间长度,一旦它返回,你可以合理地确定内部缓冲区被最大限度地填充。在没有任何进一步的write()s的情况下,AudioTrack将继续为混音器提供音频输出,直到内部缓冲器耗尽。

这种设计(内部缓冲区)可以帮助您避免缓冲区欠载。缓冲区越大,没有write()就能越长。

© www.soinside.com 2019 - 2024. All rights reserved.