我有一个音频合成应用程序,它使用缓冲区大小和一个查找栏值来改变节奏。缓冲区越小,速度就越快。从缓冲区大小中减去查找条值;查找条移动得越远,速度就越快。
缓冲区大小使用以下方法计算:
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。
我在考虑使用基于屏幕大小的硬编码缓冲区大小,但这只是创可贴。
为什么相同的计算会跨两个设备返回两个不同的缓冲区大小?如何计算缓冲区大小?
发布于 2016-02-16 03:43:24
众所周知,设备之间的缓冲区大小是不同的。它是针对底层硬件进行优化的,这些硬件将有所不同。这就是为什么有一个计算这个值的方法,而不是关于如何自己计算它的一些指导。
AudioTrack缓冲区大小与速度无关。为了有效地操作,AudioTrack必须分配的字节数是最小的。发送给AudioTrack的字节可以包含任何您想要播放的内容,只要它符合用于创建AudioTrack的规范。
发布于 2019-03-05 10:18:24
此外,附加的注意事项,它甚至可以(很少)在同一设备上发生变化。我在Nexus5X上见过一次,因为我不知道原因是什么,这一次,最小缓冲区大小是方法通常返回的两倍。
https://stackoverflow.com/questions/35422709
复制相似问题