2011-12-05 67 views
3

我想分析一個電影文件,將其分解爲相機鏡頭,然後嘗試確定哪些鏡頭比其他鏡頭更重要。我在拍攝的重要性中考慮的一個因素是在該部分電影中音量有多大。爲此,我正在分析相應的聲音文件。我無法確定一個鏡頭「響亮」的聲音,因爲我不認爲我完全理解WAV文件中的數據代表什麼。在WAV文件中分析聲音

我使用類似於this post中描述的方法將文件讀入音頻緩衝區。

已經將相應的視頻文件分割成鏡頭,我現在試圖找出哪些鏡頭比WAV文件中的其他鏡頭更響亮。我想通過這樣的文件中提取每個樣品要做到這一點:

double amplitude = (double)((audioData[i] & 0xff) | (audioData[i + 1] << 8)); 

一些我已閱讀其他職位似乎表明我需要應用快速傅立葉變換這個音頻數據以獲得幅度,這讓我想知道我提取的值實際上代表了什麼。我做的是對的嗎?我的聲音文件格式是採樣率爲22,050 Hz的16位單聲道PCM。當我試圖分析文件的體積時,是否應該用這個22,050值做些什麼? Other posts建議使用均方根來評估響度。這是必需的,還是隻是一個更準確的方法呢?

我越看越這個,我就越困惑。如果有人能夠澄清我的錯誤和誤解,我將不勝感激!

回答

3

FFT與無關,與頻率有關。要了解平均場景有多大聲,只需對採樣值進行平均。根據您是否將語言中的數據作爲有符號值或無符號值,您可能必須首先應用絕對函數,以便負的幅度不會抵消正數的數值,但這非常重要。如果你沒有得到你期望的結果,那麼結果必須與你提取第20行中各個值的方式有關。

也就是說,有一些改進可能會影響你的任務,也可能不會影響你的任務。感知的響度,振幅和聲功率實際上是以非線性方式相關的,但只要你只是粗略地估計音頻信號中「正在發生」的程度,我懷疑這與你有關。當然,人類會聽到不同的頻率更好或更糟 - 例如,蝙蝠會發出超聲尖叫,這對我們來說絕對是震耳欲聾的,但幸運的是,我們根本聽不到他們的聲音。但是,我懷疑這與你的任務有關,因爲例如頻率高於22kHz(或者是44kHz?不確定哪個)實際上不能用簡單的WAV格式表示。

+0

好的,太好了。我只是擔心我沒有正確提取振幅。但這聽起來像我。出於好奇,如果我確實關心幅度和聲功率之間的非線性關係,那麼我應用FFT會怎樣? – Steph

+0

以該格式表示的振幅峯值處的扁線值聽起來就像是一個平線值0.完全無聲。平均值不是要走的路。要麼使用RMS(我的首選),要麼計算一個dB級別,以獲得更準確的「音量」值。 –

+0

@AndrewThompson - 好的,所以我開始相信RMS是個好主意。如果我還想考慮耳朵響應頻率和幅度的方式(即,如果我想使用FFT)的非線性,那麼我如何結合RMS來做到這一點?或者我必須這樣做而不是R​​MS? – Steph

3

我不知道你想要的準確程度,但簡單的RMS(也許簡單的信號過濾)是所有許多類似的應用程序所需要的。

RMS將比峯值振幅好得多。使用峯值幅度就像基於最亮像素確定圖像的亮度,而不是平均值。

如果你想過濾信號或權衡它的感知響度,那麼你會需要採樣率。

除非您想進行復雜的頻率分析,否則不應要求FFT。人耳對不同幅度的頻率響應不同 - 耳朵不會對不同頻率和幅度的聲音進行線性響應。在這種情況下,您可以使用FFT對另一個精度域進行頻率分析。

+1

我明白了。感謝您的非常明確的迴應! – Steph