2011-03-17 72 views
1

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

我已经做了一些预测,但仍然有一些问题。


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

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

对于AAC,这些参数是不同的,因此框架尺寸

+0

您好, 感谢您的回答。这对于帧大小是有意义的,但是函数应该给出缓冲区大小。在alsa-project站点中,缓冲区大小必须大于(至少2x)周期大小。这就是为什么我想知道为什么不返回2 x帧大小。也许这个函数应该有一些说明它返回帧大小为i.s.o的缓冲区。不管怎样,谢谢你花时间回答我的问题。 – Ermir 2011-09-21 12:50:24