2013-11-03 57 views
0

我正在研究將音符與數字音頻進行比較的應用程序。我的第一個想法是用一些和絃音高算法分析wav文件(或實時聲音),並從該文件中獲取音符和和絃,並隨後與數據集中的音符進行比較。我經歷了很多頁面,這似乎是一項艱鉅的工作,因爲現有的實現和算法主要是/僅關注單聲道聲音。Comapring with digital audio

現在,我的想法是以相反的方式做到這一點。在數據集中,我有例如註釋:A4或更好的示例和絃:A4 B4 H4。我的想法是從這個音符或和絃中發出一些聲音(或者我不知道是什麼),然後與一段數字音頻進行比較。

這是個好主意嗎?這是更好/更難的解決方案嗎? 如果是,你可以推薦我怎麼做?

+0

「H4」是什麼音符?你在什麼規模工作?我去'CDEFGABC' ...所以'H'不會發生? – Floris

+1

「與數字音頻相比」是什麼意思?在我看來,找到筆記的方法是獲得傅立葉變換並挑選出峯值。當然,你必須認識(並且基本上忽略)諧波和「擊敗」頻率,並且這可能需要一些「藝術」。 –

+0

對不起H是我的錯誤,只是和絃(多音),,,與數字音頻相比「,我不會從音樂中檢索信息,但只能共同映射。 – rbrisuda

回答

1

最簡單的解決方案是對波形進行FFT(快速傅立葉變換):所有音符(及其諧波)將出現在信號中。然後,您可以查找與筆記相對應的頻率,並有您的解決方案。

注 - 爲了獲得體面的頻率分辨率,您需要足夠長的採樣和足夠高的採樣率。但嘗試一下,你會看到。

下面是我坐在鋼琴前面的一個名爲SpectraWave的應用程序的屏幕截圖。首先是中間的(F = 440赫茲如你所知):

enter image description here

,第二個是一個A小調和絃的(你可以看到,我的中指更強一點,在C顯示爲音量最大的音符)。諧波會很快使它很難看到的不僅僅是幾個音符更多...

enter image description here

+0

所以,如果我知道什麼音符是和絃及其頻率,例如(Cm:C,E♭,G),並且我發現這些頻率在我預期播放歌曲的信號中,我有解決方案嗎? – rbrisuda

+1

你有「解決方案的開始」。正確地做到這一點確實非常困難 - 人們在這個問題上花了很多年的時間。使用上述方法可以獲得多大的效果 - 樣本長度和採樣率非常重要,「子倉估算」(實際頻率最有可能在分箱之間,因此您必須插入)也非常重要。玩的開心! – Floris

+0

我覺得這個過程如何緩解。假設我們知道音符的頻率和音符的持續時間。我們將只使用一架樂器鋼琴。這個限制可以緩解嗎? – rbrisuda

0

你的「解決方案」很可能使得匹配更加困難,因爲你不知道做什麼波形,每注。大多數樂器和聲音不僅產生與單個正弦波或任何其他熟悉波形顯着不同的波形,而且這些波形隨着時間推移而演變。因此,猜測正確的 波形用於每個音符的比賽是非常不可能的。

+0

和一種儀器如何鋼琴? – rbrisuda