簡體   English   中英

獲取聲音文件中給定時間的振幅?

[英]Get the amplitude at a given time within a sound file?

我正在做一個項目,我需要知道計算機上麥克風傳來的聲音振幅。

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

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

查看Snack Sound Toolkit示例,似乎有一個dbPowerSpectrum函數。

從參考:

dBPowerSpectrum()

計算聲音的對數FFT功率譜(以start選項中指定的樣本數),並返回dB值列表。 有關其他選項的說明,請參見本節。 可以選擇使用end選項指定終點。 在這種情況下,結果是指定范圍內連續FFT的平均值。 它們的默認間隔是從fftlength中獲取的,但是可以使用skip選項更改該間隔,該選項可告訴您每步移動FFT窗口多少個點。 選項:

編輯:我假設當您說振幅時,您是指聲音對人的感覺有多“響亮”,而不是時域電壓(由於正弦波的積分將為0,因此在整個長度上可能為0)例如:10 * sin(t)大於5 * sin(t),但它們的平均值隨時間變化為0(無論如何,您都不希望向揚聲器發送非AC電壓)。

要獲得聲音的聲音,您需要確定每個頻率分量的幅度。 這是通過傅立葉變換(FFT)來完成的,它可以將聲音分解為頻率成分。 dbPowerSpectrum函數似乎為您提供了每個頻率的幅度列表(如果這與功率譜的確切定義不同,請原諒)。 要獲得總音量,您可以將整個列表加起來(這將很接近,因為人耳本身具有頻率響應,所以它可能與感知的響度有所不同)。

我完全不同意CookieOfFortune的這個“答案”。

當然,這個問題的措辭很差……但是這個答案使事情變得比必要的復雜得多。 我假設“振幅”是指感知到的響度。 從技術上講,(PCM)音頻流中的每個樣本都代表給定時間片段的信號幅度。 要獲得響度表示,請嘗試簡單的RMS計算:

RMS

| K <

我不確定這是否會有所幫助,但是Skimpygimpy提供了將WAVE文件解析為python序列並返回的工具,您可以使用它直接檢查波形樣本並做自己喜歡的事情。 您將必須閱讀一些資料,這些子組件沒有記錄在案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM