題:
有什麼方法可以以數學/算法方式找到歌曲的音調嗎?
Sergey Kravchenko
2018-01-02 01:33:24 UTC
view on stackexchange narkive permalink

對於相同的音符,有很多音階具有不同的音調。

例如,對於音符CDEFGABC,我們可以有:C大調,C愛奧尼亞語,自然小調,D Dorian,E Phrygian, F Lydian,G Mixolydian,A Aeolian和B Locrian。

我了解到,這些音階的音樂具有不同的音調中心和聲音。我可以通過耳朵或在DAW中查看歌曲音符時檢測到琴鍵。

但是我想按音階和琴鍵對MIDI文件進行分類。因此,我需要找到一種方法來做到這一點,而無需聽音樂或查看筆記/床單。

也許存在某些方法?例如,最常用音符的統計信息,或者以哪個小節開始的音符,最常見的和弦基數等?

有些樂曲是多調的(或至少是雙音調的),這使有史以來最大的扳手來確定樂曲(甚至是樂句)是哪個鍵-音樂同時同時在兩個或多個鍵中。我們是否具有足以檢測多態性的方法?
真的值得付出努力嗎?在調製,模態與音調方法之間,和弦分散在不同的音軌上……您可能會得到非常差的效果。您需要處理多少個文件?它們是來自知名口譯員或個人檔案的歌曲嗎?
我從自由資源中刮取了超過50000個Midi文件,這些文件將用於機器學習,但是我不打算使用NN檢測密鑰,而是使用一些硬編碼算法檢測密鑰並將其作為參數之一傳遞給NN
可能相關的[有關堆棧溢出的答案](https://stackoverflow.com/questions/3141927/algorithms-for-determining-the-key-of-an-audio-sample)。
有算法可以做到這一點!許多DJ軟件可以自動檢測歌曲的哪個音調。但是,該軟件並不完美,有時會誤認歌曲的音調。 (儘管在舞蹈中使用的音樂很少能使這些算法失效,但是在實踐中,這並不是一個嚴重的問題。)不幸的是,我不確定這些算法如何工作,我只是知道它們的存在。
如果您希望鍵是NN的輸入,那麼您希望得到的輸出是什麼?只是出於興趣而問。
六 答案:
topo Reinstate Monica
2018-01-02 02:36:35 UTC
view on stackexchange narkive permalink

如果您不使用符號作為參考,就不可能100%肯定地確定歌曲的“音調”是什麼-有時不同的人會聽到同一首歌的音調不同。但是,如果您有MIDI文件,那麼您將擁有與某人聽一首歌曲相同的大多數信息-即您擁有所有音符-因此,是的,您可以很好地找到琴鍵。

基本上,您所需要做的就是弄清楚如何確定每個部分的密鑰,然後將其轉換為算法。 如何通過耳朵找到歌曲的鍵?提到一些相關信息,您可能會在此站點和網絡上找到其他有用的技術來通過耳朵找到歌曲的鍵。

與Dom提到的Krumhansl-Schmuckler算法一樣,如果您是編碼人員(我看到您有堆棧溢出帳戶),那麼假設使用機器學習,這可能是一個很大的問題您具有合適的MIDI文件訓練集,並且已正確識別鍵已經。您可能想提取歌曲中的數據-例如,您可以進行分析以得出

  • 該八度音符在樂曲中出現多少次
  • >
  • 每個音符在強節奏下演奏多少次
  • 每個音符的平均中音速度

...然後將其作為輸入合適的神經網絡和訓練算法。您還可以考慮在確定如何分割數據時Dom提到的算法。不過,您可能只會得到訓練有素的NN,但它會生成與Krumhansl-Schmuckler算法相似的答案!

您可能還想考慮如何處理可識別的密鑰變化。他們的發展歷程。

還有一件事-MIDI確實具有 Key Signature元消息的概念。這可能不經常出現或不可靠,但可能是另一個數據點。

還有許多其他可能相關的數據點需要收集。對於每個音符,其前面是哪一個,兩個或三個音符或間隔?例如,如果一個文件的同一個音符有多個降序五分之一,我們可以得出結論,那裡有一個節奏,而降序五分之一的第二個音符可能是關鍵音符。這可能對調製有幫助,特別是如果您向其他類似間隔添加接近度時。因此,如果樂曲的一半有幾個G-C間隔,而另一半則有D-G間隔和D大和弦,則可以推斷出C和G大調之間的調製。
@ToddWilcox絕對正確。使用某些機器學習模型,最好將更多數據輸入到輸入中,並讓訓練過程找出有用的數據。使用某些類型的模型,您甚至可以將所有音符數據拍入-我可以看到該方法與使用卷積神經網絡(用於識別圖像數據中的模式)之間存在一些相似之處。
@topomorto是的,我會向它扔一個RNN,(相對地)將原始MIDI作為輸入,將一個鍵的概率向量作為輸出,然後將其餘部分弄清楚。特徵工程是如此近十年:)實際上,如果可以找到合適的數據集,我*嘗試*嘗試一下。
Dom
2018-01-02 02:06:05 UTC
view on stackexchange narkive permalink

僅憑頻譜分析和音符頻率通常不足以找出關鍵所在。有時候,您可以 使用它來製作更簡單的歌曲,但是任何類型的藍調或色度都會完全與之相提並論。所使用的音階也不會告訴您太多有關琴鍵的信息,尤其是在談論模式時。之所以這樣說,是因為鍵的想法具有音調中心和典型的和聲,但和聲可能是不穩定的(借用,皮卡第(Picardy)三分之類的),並且沿途可能會到達其他音調中心(次要主導音,調製,

要注意的另一件事是 midi數據不利於音樂理論。在這種情況下,由於您無法分辨出諧音等效項之間的區別,因此您將丟失對確定鍵有用的重要信息。 Musicxml文件在保留有用的音樂理論數據方面要好得多。

我知道的一種算法是由 music21實現的 Krumhansl-Schmuckler密鑰確定算法。 。 Krumhansl-Schmuckler密鑰確定算法基於貝葉斯定理,該定理是統計確定的,儘管並不總是準確的,但非常接近。

Stephen Hazel
2018-01-02 04:00:28 UTC
view on stackexchange narkive permalink

超過95%的midi文件將是主要和次要規模。找到最常用的7個音符,尋找平坦的3號。

不是很完美。但是,足夠好。

對了音樂家,難道大多數的旋律/歌曲都只在鍵音上完成/解決嗎?那可能是該問題的80%解決方案。
是的,大多數情況下,一塊補品會結束。但是我認為OP需要一種萬無一失的方法。也許可以對該信息加權算法。
另外,請記住,琴鍵在演奏過程中可能會發生變化。稱為“調製”。讓計算機分析音樂通常是沒有用的。自己分析音樂。您不必關心那裡的每個midi文件。只是您要打擾的人。這是我更喜歡流行音樂的原因之一。每個人都喜歡。不太複雜。聽起來不錯。
ttw
2018-01-02 06:17:45 UTC
view on stackexchange narkive permalink

密鑰識別問題不一定得到很好的定義。對於“鍵”很重要(否則OP不相關)的音樂,最終鍵的節奏通常決定了鍵。最後的和弦是以前的和弦進行的目標(除非樂曲只是搖擺不定。)皮卡第第三彈增加了一些混亂(或可能表示組織更加有情調。)

另一個問題是關於什麼的問題一首歌組成。給定一個簡單的韻律和合唱,韻律和合唱的音調不同。歌曲結構的另一種類型是“ rondo”類型(如進行曲和波爾卡舞曲)。 “啤酒桶波爾克”以C(I)開頭,三人組以F(IV)結尾。因此,“鍵”一詞確實應適用於作品的各個部分(對此,“部分”的定義就此成立。)

Emmanuel Amiot
2018-01-02 03:50:54 UTC
view on stackexchange narkive permalink

Krumhansl算法基於感知測試,並且特別適合於全音調環境(如果您願意,可以使用愛奧尼亞模式)。實際上,您有兩個問題。第一個是確定音高等級集,第二個是確定(通常是七個)哪種模式是最佳候選者。對於第一個問題,您可以使用離散集的離散傅立葉變換來使用一些最近的東西,易於提取從中間文件中查看相關傅立葉係數(3d和5th)在復平面中的方向。我不知道是否值得購買我的書通過傅立葉空間(Fourier Space) i>進行音樂創作,但該主題肯定在Chap中解決。 6 :)模式的分析比較棘手(不是第一個問題很容易...),我將嘗試對所使用的和弦(特別是三合音)進行一些統計。如果說使用的音符是CDEFGAB,但最常見的和弦是DFA和ACE,我懷疑是Dorian。但是如上所述,通常會有一些歧義,這對音樂的魅力意義不容小。

您為什麼要從midi文件中合成音樂,然後對它進行傅立葉分析?這就像先做某事,然後立即將其撤消。 MIDI文件已具有音高。
John Heinnickel
2018-01-04 04:17:45 UTC
view on stackexchange narkive permalink

從最嚴格的意義上講,這可能不是一個答案,但是我想我可以為您指出一個軟件資源的方向,該軟件資源是作為任務陳述是對該學科的學術研究的組織來回答此類問題的工具。

查看位於英國倫敦的瑪麗皇后學院數字音樂學院發行的“ Sonic Visualizer”和“ Aubio”音樂註釋器軟件包。

這是一本鏈接到其軟件下載頁面

Sonic Visualizer旨在實現插件的可擴展性。擴展接口之一VAMP通常用於在Python中實現插件。瑪麗皇后有一套精選的VAMP插件,它們作為捆綁包維護。該軟件包中有一個名為“ 按鍵檢測”的插件,您可能需要嘗試一下。

對於這個功能是否合適我不能說太多。不幸的是,您的需求-當我看到您的問題時,我已經聽說過該軟件很多次了,但是對於將其用於此任務,我並沒有太多的經驗。

最後一次我將它用於節奏檢測和歌曲結構分段插件。它在這些任務上做得很不錯,雖然不是全自動的,但是有了足夠的領先優勢,就可以在比純手工啟動更短的時間內實現我的目標。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...