1

我正在查看 AudioHardwareALSA.cpp 中的 getInputBufferSize(...) 函数,它返回硬编码的值 320。我的问题是:这个值是如何计算的?

我已经做了一些 pre-cals,但仍然有一些问题。


sample_rate = 8000
format = S16_LE = 2 bytes/sample
period_time = 10000 us (guessing)
buffer_size = 2 * period_size
period_size = period_time * bytes/sec
buffer_size = 2 * (0.01 * sample_rate * 2) = 320 bytes.

我在代码中找不到 period_time,所以一个问题是:它是在哪里定义的还是只是一个粗略的计算?

我也在尝试添加更多的采样率,即 16000 和 32000(以后可能会更多)。如何计算正确的最小缓冲区大小?所有采样率的延迟是否总是 10 毫秒?

任何帮助表示赞赏。

4

1 回答 1

1

我相信谷歌从一开始就实施了 NB-AMR 编码。后来他们增加了对 AAC 的支持。在 NB-AMR 的情况下,帧大小为 320 字节。您可能知道对于 NB-AMR:采样率 = 8000 个样本/秒帧持续时间 = 20ms 样本大小 = 2 字节通道 = 单声道因此,每帧包含 8000 个样本/秒 * 0.02 秒 * 2 字节/样本/通道 * 1通道 = 320 字节

对于 AAC,这些参数不同,因此帧大小

于 2011-09-19T14:41:34.473 回答