2009-04-12 66 views
2

我正在研究一個項目,我需要知道從計算機上的麥克風進入的聲音的幅度。獲取聲音文件中給定時間的幅度?

我目前正在使用Python與Snack Sound Toolkit,我可以錄製從麥克風進來的音頻,但我需要知道音頻有多大。我可以將記錄保存到一個文件中,並使用另一個工具包從音頻文件中讀取給定時間點的振幅,或者嘗試在音頻進入時獲取振幅(這可能更容易出錯)。

是否有任何庫或示例代碼可以幫助我解決這個問題?我一直在尋找,到目前爲止,Snack Sound Toolkit似乎是我最大的希望,但似乎沒有辦法直接獲得振幅。

回答

3

看一下Snack Sound Toolkit的例子,似乎有一個dbPowerSpectrum函數。

從參考:

dBPowerSpectrum()

計算的聲音(在開始選項給定的樣品數)的對數FFT功率譜,並返回分貝值的列表。有關其餘選項的說明,請參閱部分項目。可選地,可以使用結束選項給出終點。在這種情況下,結果是指定範圍內的連續FFT的平均值。它們的默認間隔取自fftlength,但可以使用跳過選項來更改,該選項可指示每步移動FFT窗口的點數。選項:

編輯:我假設當你說幅度,你的意思是多麼「響亮」的聲音出現在人類,而不是時域電壓(這可能是整個長度爲0,因爲積分例如:10 * sin(t)大於5 * sin(t),但它們的平均值隨時間變化爲0.(您不想將非交流電壓發送給揚聲器無論如何))。

要得到多大的聲音,您需要確定每個頻率分量的幅度。這是通過傅立葉變換(FFT)完成的,該變換將聲音分解爲頻率分量。 dbPowerSpectrum函數似乎給出了每個頻率的幅度列表(請原諒,如果這與功率譜的確切定義不同)。要獲得總音量,您可以對整個列表進行求和(這將會接近,因爲人耳本身具有頻率響應,因此它可能會與放大的響度不同)。

1

我完全不同意CookieOfFortune的這個「答案」。

被授予,這個問題很糟糕......但這個答案使事情變得比必要的複雜得多。我假設「振幅」意味着感覺響度。因爲技術上(PCM)音頻流中的每個採樣代表給定時間片上信號的幅度。獲得響度表示嘗試一個簡單的有效值計算:

RMS

| K <

+0

該庫沒有提供RMS功能。我相信所有頻率上的功率譜的積分應該與數學上的RMS成比例(如果不是直接等效的話)。 (功率譜以W/hz爲單位,RMS以W爲單位。在所有hz上積分,並且剩下W)。 – CookieOfFortune 2009-04-28 20:41:45

0

我不知道這是否會幫助,但 skimpygimpy 提供了用於解析WAVE文件到蟒蛇 序列並返回 - 您可以使用此 直接檢查波形樣本,並按照您的喜好執行 。你將不得不閱讀一些資料, 這些子組件沒有記錄。

相關問題