我正在查看 AudioHardwareALSA.cpp 中的 getInputBufferSize(...) 函数,它返回硬编码值 320。我的问题是:这个值是如何计算的?
我已经做了一些预考,但仍有一些问题。
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 毫秒?
感谢任何帮助。
最佳答案
我相信谷歌首先实现了 NB-AMR 编码。后来他们增加了对 AAC 的支持。在 NB-AMR 的情况下,帧大小为 320 字节。 您可能知道,对于 NB-AMR: 采样率 = 8000 个样本/秒 帧持续时间 = 20ms 样本大小 = 2 字节 channel =单声道 所以,每一帧包含 8000 个样本/秒 * 0.02 秒 * 2 字节/样本/ channel * 1 channel = 320 字节
对于 AAC,这些参数不同,因此帧大小也不同
关于android - AudioHardwareALSA::getInputBufferSize(...) 中的缓冲区计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5340611/