我正在看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毫秒?
感谢任何帮助。
答案 0 :(得分:1)
我相信Google实施了NB-AMR编码。后来他们增加了对AAC的支持。在NB-AMR的情况下,帧大小是320字节。 您可能知道NB-AMR: 采样率= 8000个样本/秒 帧持续时间= 20ms 样本大小= 2个字节 渠道=单声道 所以,每个帧都包含 8000个样本/秒* 0.02秒* 2个字节/样本/通道* 1个通道= 320个字节
对于AAC,这些参数不同,因此帧大小