我有一個相當有趣的問題需要解決。比較簡單的聲音 - 什麼是最接近的頻率
我想要拍一個非常簡單的聲音(鋼琴上演奏的一個音符)並嘗試處理它,以便我可以打印出最有可能播放的音符。
從一些谷歌搜索和搜索我遇到了快速傅里葉變換,但我不完全知道我將如何使用它來分析數據從一個WAV文件。
我的另一個想法是,每次播放時音符應該差不多一樣。如果情況是這樣的話,兩個wav文件變成字節數組的百分比匹配是否有用?
想法和想法將不勝感激。
我有一個相當有趣的問題需要解決。比較簡單的聲音 - 什麼是最接近的頻率
我想要拍一個非常簡單的聲音(鋼琴上演奏的一個音符)並嘗試處理它,以便我可以打印出最有可能播放的音符。
從一些谷歌搜索和搜索我遇到了快速傅里葉變換,但我不完全知道我將如何使用它來分析數據從一個WAV文件。
我的另一個想法是,每次播放時音符應該差不多一樣。如果情況是這樣的話,兩個wav文件變成字節數組的百分比匹配是否有用?
想法和想法將不勝感激。
與比較兩個WAV相比,FFT是一個更好的選擇。 FFT將產生一個頻譜,並且由於鋼琴產生相對純淨的音色,因此當您繪製它時,您會觀察到非常不同的尖峯。每個尖峯的位置表示波形的組成頻率之一,最大尖峯代表音符。
您應該分析正在播放的音符的頻率。我有點生疏,但我認爲FFT應該這樣做,因爲它會將波形分解爲頻譜。
您不希望將wav文件與已存儲的wav文件進行比較,因爲週期振幅等可能不同。 「百分比匹配」會產生錯誤的結果。
一旦掌握了波形的頻率,就可以設計出正在播放的音符。
我會開始閱讀數字信號處理(DSP)和頻譜分析。聽起來就像你試圖找到鋼琴音符的基本頻率。
要使用WAV或其他文件格式進行任何有意義的工作,您需要提取和解釋音頻樣本。如果不想手動這樣做,我建議您查看大量現有的DSP庫。我不確定什麼好的C#庫存在。
快速傅里葉變換(FFT)將基本上將您的功率在時域轉換到頻域,從本質上爲您的音頻添加一個z軸。
是的,這樣你就可以確定兩個聲音中的每一個的基本頻率。由於鋼琴,麥克風等的缺陷,這兩個頻率可能略有不同,因此您無法直接比較它們。相反,建立所有可能的鋼琴鍵的音高([這裏是如何])(http://en.wikipedia.org/wiki/Equal_temperament#Twelve-tone_equal_temperament))並將你的兩個頻率調整到最近的鋼琴鍵頻率。如果他們對齊到相同的頻率,則彈奏相同的鋼琴鍵。 – 2011-03-04 12:36:23
要構建可能的鋼琴音高,您需要知道鋼琴是如何調音的 - 您需要知道它的參考音高。這是在上面的鏈接解釋。在實踐中,你的應用程序不會知道這個,所以你應該假設它是440Hz。 – 2011-03-04 12:37:30
啊,謝謝。請讓我看看我現在是否理解正確:我可以將我的信號轉換到頻域(我已使用accord.net完成了這項工作)。在frequecy域中,我可以繪製Y軸上的功率圖和X軸上的頻率圖。最大的峯值是音符的頻率。所以我可以從軸讀取音符的頻率,並檢查它最接近的鋼琴音符。 – Nyx 2011-03-06 08:24:08