我正在努力弄清楚Android AudioTrack到底是如何工作的。对我来说,一个困惑之处是写作模式。
write()方法的文档指示您可以传递写入模式封堵。
根据这些描述,WRITE_BLOCKING是否会在所有数据被播放之前一直阻塞?例如,如果我有一个大小为2048的44100的单音频缓冲区,用WRITE_BLOCKING调用have将阻塞2048 * (1000.0 / 44100)毫秒?这不意味着,一旦写入完成,您就立即处于缓冲区运行不足的场景中吗?
发布于 2019-02-22 20:19:46
正如@Michael提到的那样,它会阻塞数据,直到数据被排队。这与WRITE_BLOCKING描述中的含义相同;它会阻塞数据,直到数据被写入内部缓冲区(在构造过程中,您指定了缓冲区的大小)。
如果缓冲区已经满(数据尚未播放),write( ..., 2048, WRITE_BLOCKING )将阻塞大约2048 * (1000.0 / 44100)秒。如果write()确实阻塞了任意一段时间,那么一旦它返回,您就可以合理地确保最大限度地填充内部缓冲区。如果没有任何进一步的write()s,AudioTrack将继续向混频器提供音频输出,直到内部缓冲区耗尽为止。
此设计(内部缓冲区)旨在帮助您避免缓冲区不足。缓冲区越大,没有write()的时间就越长。
https://stackoverflow.com/questions/54830378
复制相似问题