我有一个音频合成应用程序,它使用buffersize和一个搜索栏值来改变速度。缓冲区大小越小,速度越快。从缓冲区大小中减去搜索条值;移动搜索栏越远,速度越快。
Buffersize使用以下公式计算:
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。
我在考虑使用基于屏幕大小的硬编码缓冲区大小,但这只是创可贴工作。
为什么相同的计算在两个设备上返回两个不同的缓冲区大小?如何计算缓冲区大小?
答案 0 :(得分:0)
已知缓冲区大小在设备之间是不同的。它针对不同的底层硬件进行了优化。这就是为什么有一种方法可以计算这个值,而不是自己如何计算它的一些指令。
AudioTrack缓冲区大小与速度无关。它只是AudioTrack必须分配的最小字节数才能有效运行。您发送到AudioTrack的字节可以包含您想要播放的内容,只要它符合您用于创建AudioTrack的规范。
答案 1 :(得分:0)
另外,请注意,它甚至可以(很少)在同一设备上有所不同。我在Nexus 5X上看到过一次,我不知道是什么原因,仅一次,最小缓冲区大小是方法通常返回的两倍。