【问题标题】:Android audiotrack getMinBufferSize() returning different values on different devicesAndroid 音轨 getMinBufferSize() 在不同设备上返回不同的值
【发布时间】:2016-05-27 03:37:04
【问题描述】:

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

缓冲区大小的计算方法是:

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。

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

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

【问题讨论】:

标签: android audio audiotrack sound-synthesis


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多