AudioHardwareALSA :: getInputBufferSize(...)中的缓冲区计算

时间:2011-03-17 14:42:46

标签: android audio alsa

我正在看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毫秒?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我相信Google实施了NB-AMR编码。后来他们增加了对AAC的支持。在NB-AMR的情况下,帧大小是320字节。 您可能知道NB-AMR:     采样率= 8000个样本/秒     帧持续时间= 20ms     样本大小= 2个字节     渠道=单声道 所以,每个帧都包含     8000个样本/秒* 0.02秒* 2个字节/样本/通道* 1个通道= 320个字节

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