1

我有一个音频合成应用程序,它使用缓冲区大小和搜索栏值来改变速度。缓冲区大小越小,速度越快。从缓冲区大小中减去搜索栏值;搜索栏移动得越远,速度越快。

缓冲区大小使用以下公式计算:

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。

我正在考虑使用基于屏幕大小的硬编码缓冲区大小,但这只是创可贴的工作。

为什么相同的计算会在两个设备上返回两个不同的缓冲区大小?缓冲区大小是如何计算的?

4

2 回答 2

1

已知缓冲区大小在设备之间是不同的。它针对会有所不同的底层硬件进行了优化。这就是为什么有一种方法来计算这个值,而不是一些关于如何自己计算它的说明。

AudioTrack 缓冲区大小与速度无关。这只是 AudioTrack 为了有效运行而必须分配的最小字节数。您发送到 AudioTrack 的字节可以包含您想要播放的任何内容,只要它符合您用于创建 AudioTrack 的规范即可。

于 2016-02-16T03:43:24.960 回答
0

另外,请注意,它甚至可以(很少)在同一设备上有所不同。我在 Nexus 5X 上看到过一次,因为我不知道是什么原因,就这一次,最小缓冲区大小是该方法通常返回的两倍。

于 2019-03-05T10:18:24.500 回答