我有一个音频合成应用程序,它使用缓冲区大小和搜索栏值来改变速度。缓冲区大小越小,节奏越快。从缓冲区大小中减去搜索栏值;寻道杆移动得越远,节奏越快。
缓冲区大小使用以下公式计算:
int buffersize = AudioTrack.getMinBufferSize(sr, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT);
在三星 Galaxy S6 手机上,返回的缓冲区大小为 10584。滑块值的底部和顶部分别给出 60 bpm 和 192 bpm。
但是,在 7 英寸 LG G Pad 7.0 上,返回的缓冲区大小仅为 3528。因此,起始速度约为180-200 bpm,而不是所需的60 bpm。
我正在考虑使用基于屏幕大小的硬编码缓冲区大小,但这只是创可贴工作。
为什么相同的计算在两个设备上返回两个不同的缓冲区大小?缓冲区大小是如何计算的?
已知设备之间的缓冲区大小不同。它针对会有所不同的底层硬件进行了优化。 这就是为什么有一种方法可以计算这个值,而不是一些关于如何自己计算它的说明。
音轨缓冲区大小与速度无关。 这只是 AudioTrack 为了有效运行而必须分配的最小字节数。您发送到 AudioTrack 的字节可以包含您想要播放的任何内容,只要它符合您用于创建 AudioTrack 的规范即可。
另外,另外,请注意,它甚至(很少(在同一设备上有所不同。我有一次在 Nexus 5X 上看到,我不知道是什么原因,只是这一次,最小缓冲区大小是该方法通常返回的两倍。