2010-09-15 209 views
1

這是這個問題的延續here在錄製的聲音中識別音符 - 第2部分 - Python

這是我爲了用於獲取樣品的代碼:

spf = wave.open(speech,'r') 
sound_info = spf.readframes(-1) 
sound_info = fromstring(sound_info, 'Int16') 

長度sound_info的是194560,這是4.4倍的44100採樣率。聲音文件的長度爲2.2秒,那麼sound_info的長度應該是它的兩倍嗎?

另外,我只能在上找到足夠的信息,爲什麼使用FFT來生成頻譜

我想分割一個聲音並分析一秒鐘的多個分數的頻譜,而不是整個聲音文件。


幫助將非常感激。 :)


這是基本的sound_info圖表

plot(sound_info) 

這是FFT圖表

freq = [abs(x.real) for x in fft(sound_info)] 
plot(freq) 

+1

'是不是sound_info應該是它的長度的兩倍?':stereo? – bobince 2010-09-15 10:54:38

+0

感謝那個bobince,但那我該如何解讀sound_info?因爲數據是順序的 – RadiantHex 2010-09-15 11:14:34

回答

1

如果你的wav文件有兩個通道,那麼sound_info的長度應該是2 *採樣率*持續時間(秒)。頻道數據交替出現,因此如果您將所有值篡改爲一維數組data,則與一個頻道關聯的值將爲data[::2],另一個爲data[1::2]


粗略地講,光滑函數可以被表示爲正弦和餘弦波的總和(與各種振幅和頻率)。

FFT(快速傅里葉變換)將函數與那些正弦和餘弦波的係數(振幅)相關聯。也就是說,函數與係數序列之間存在一對一的映射關係。

如果一個聲音樣本主要由一個音符組成,那麼它的FFT將會有一個非常大(絕對值)的係數,其他的將會非常小。該係數對應於特定的正弦波,具有特定的頻率。這是音符的頻率。

+0

@unutbu感謝您的真棒回覆! :)你知道爲什麼sound_info是序列化嗎? – RadiantHex 2010-09-15 11:26:30

+1

+1:音樂聲音具有泛音。其中很多:它們是基本頻率的整數倍。此外,真實的儀器包括大量的噪聲以及時移信號(即多普勒頻移),這使得識別基本挑戰。 – 2010-09-15 12:36:17

+0

@ S.Lott謝謝你。是否沒有辦法爲每個樣本獲取頻率列表?或者每個樣本僅限於一個頻率值? :| – RadiantHex 2010-09-15 12:42:44

0

不要重新發明輪子:)

退房http://librosa.github.io,尤其是對短時傅立葉變換(STFT),或在你的情況,而像一個恆定的Q變換(CQT)的一部分。

但首先要做的事情是: 假設我們從音頻文件中獲得了立體聲信號(2聲道)。現在,我們通過創建平均通道(將兩個通道相加併除以2)來丟棄在音頻文件的兩個通道中編碼的空間信息。我們現在有一個單聲道(1聲道)的信號。由於我們有數字信號,每個時間點都稱爲樣本。

現在開始有趣的部分,我們通過連續採樣(512或2的倍數是標準值)將信號切割成小塊(稱爲幀)。 通過對每個這些幀進行離散傅里葉變換(DFT),我們得到一個稱爲頻譜圖的時頻表示。 任何進一步的概念(重疊等)可在每一個DSP書或在類似這樣的實驗室課程資源被讀取: https://www.audiolabs-erlangen.de/content/05-fau/professor/00-mueller/02-teaching/2016s_apl/LabCourse_STFT.pdf

注意,DFT的頻率軸上線性地間隔開。在西方音樂系統中,一個八度音分爲12個半音,其中心頻率以對數方式間隔。查看上面有關分段策略的​​腳本,瞭解如何從線性STFT接收對數間隔的頻率軸。 但是,這種方法是非常基本的,還有很多其他方法,或許更好的方法。

現在回到您的筆記識別問題。 第一:這是一個非常艱難的。 :) 如上所述,樂器演奏的真實聲音包含泛音。 另外,如果你有興趣的轉錄通過完整的樂隊演奏的音符,您可以通過其他音樂家等

談起方法得到的干擾,你可以嘗試一下:人 地塊的現今使用非負矩陣fatorization(NMF或類似的LDPCA)或神經網絡來完成這項任務。例如,NMF包含在scikit-learn中。 要開始,我會推薦NMF。只能使用單音色音色,即一次演奏單個樂器。用簡單衰減的泛音結構初始化模板,看看會發生什麼。

+0

下面是來自librosa的一些示例: http://nbviewer.jupyter.org/github/librosa/librosa/blob/master/examples/LibROSA%20demo.ipynb – 2016-05-28 17:13:58