2011-03-17 74 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