2010-12-02 35 views
28

我正在開發依賴於音樂和絃檢測的軟件。我知道基音檢測的一些算法,基於倒譜分析或自相關的技術,但他們主要關注單音素材識別。但是我需要與一些和絃識別一起工作,也就是說,同時進行多個音調,比如和絃;有沒有人知道有關這方面的一些好的研究或解決方案?和絃檢測算法?

我目前正在開發一些基於FFT的算法,但如果有人對我可以使用的一些算法或技術有一個想法,這將是很大的幫助。

+7

這聽起來確實很難。在挑選出基本原理之後,我不確定您將如何區分其他音符與諧波。也許在一些簡單的情況下,你可以去看看哪些是次要的或者主要的三分之一(或者七分之一等等),但是考慮到和絃反演以及所有這些,你甚至不能保證最低頻率是根源。和絃的第五個與三次諧波有關,等等......也許在找到*不是簡單諧波的基本音符和其他音符後,可以通過某種模式匹配來識別常用和絃。 – xscott 2010-12-02 17:04:43

+0

此處已實施: https://github.com/adamstark/Chord-Detector-and-Chromagram – relascope 2018-03-09 23:12:30

回答

11

這是一個相當好的開源項目: https://patterns.enm.bris.ac.uk/hpa-software-package

它檢測基於一個chromagram和絃 - 一個很好的解決方案,整個頻譜的窗口分解到音級(尺寸:12)的陣列與浮動值。然後,和絃可以通過隱馬爾可夫模型來檢測。

..應該爲您提供您需要的一切。 :)

12

Capo的作者,Mac的轉錄程序,有一個非常深入的博客。入口"A Note on Auto Tabbing"有一些很好的起跳點:

我開始研究在2009年中期自動轉錄的方法不同,因爲我很好奇多遠沿着這條技術是,如果它可以被集成到一個未來Capo版本。

這些自動轉錄算法中的每一個從音頻數據的某種中間表示開始,然後將其轉換爲符號形式(即音符起始點和持續時間)。這是我遇到了一些計算昂貴的頻譜表示(連續小波變換(CWT),常量Q變換(CQT)等)。我實現了所有這些頻譜變換,以便我也可以實現所提出的算法我正在閱讀的文件。這會讓我想到他們是否會在實踐中工作。

卡波有一些impressive technology。突出的特點是其主視圖不像大多數其他音頻程序那樣是頻譜圖。它像鋼琴捲筒一樣呈現音頻,可以用肉眼看到音符。

http://supermegaultragroovy.com/products/Capo/img/screen1_sm-nq8.png

(注:硬記棒由用戶繪製的模糊點下方是卡波顯示什麼。)

4

這是一個非常困難的模式匹配問題,可能是適合的AI技術,如訓練神經網絡或遺傳算法。

基本上,在每個時間點,你猜猜正在播放的音符的數量,音符,演奏音符的樂器,音符的大小和音符的持續時間。然後,你總結所有這些樂器在這個音量下演奏時所產生的所有諧波和泛音的大小(攻擊,衰減等)。從你信號的頻譜中減去所有諧波的總和,然後最小化所有可能性的差異。模式識別砰砰聲/吱吱聲/採摘瞬態噪聲/等。在筆記的開始處也可能是重要的。然後做一些決策分析,以確保你的選擇是有意義的(例如,單簧管不會突然變成小號演奏另一個音符,並在80mS後再回來),以最小化錯誤概率。

如果您可以限制您的選擇(例如,只有2個長笛只播放四分音符等),尤其是對於泛音能量非常有限的樂器,這會使問題變得更容易。

+0

非常感謝。這是一個很好的答案,真的讓我思考。它展示了一些我還沒有想過的事情。 – Nemeth 2010-12-02 20:25:18

5

見我回答這個問題: How can I do real-time pitch detection in .Net?

這個IEEE論文的引用,主要是你在找什麼:http://ieeexplore.ieee.org/Xplore/login.jsp?reload=true&url=/iel5/89/18967/00876309.pdf?arnumber=876309

諧波扔你。另外,即使基本不存在,人類也可以在聲音中找到基本原理!想想閱讀,但通過覆蓋一半的信件。大腦填補了空白。

混音中的其他聲音以及之前的聲音對於我們如何感知音符非常重要。

+0

是的,你是對的,很多關於心理聲學問題的麻煩......謝謝你的論文! – Nemeth 2010-12-02 20:27:05

7

在和絃檢測和密鑰檢測之間存在顯着的重疊,因此您可能會發現我的一些previous answer有用,因爲它有一些指向論文和論文的鏈接。獲得一個好的復調識別器是非常困難的。

我個人對此的觀點是應用複音識別來提取音符,然後嘗試從音符中檢測和絃是錯誤的方法。原因是這是一個模棱兩可的問題。如果您有兩個複雜的音調,音高相差八度,那麼就無法檢測是否有一個或兩個音符彈奏(除非您有額外的上下文,例如瞭解諧波曲線)。 C5的每個諧波也是C4(以及C3,C2等)的諧波。因此,如果您在複音識別器中嘗試一個主要的和絃,那麼您很可能會得到與您的和絃和諧相關的整個音符序列,但不一定是您演奏的音符。如果您使用基於自相關的音高檢測方法,那麼您會非常清楚地看到這種效果。相反,我認爲最好是查找某些和絃形狀(主要,次要,第七等)形成的圖案。

+0

嘗試識別和絃在某些方面可能比嘗試識別音高的一般問題更容易,因爲至少對於三和絃和七和絃而言,各種音符所在的八度音階無關緊要。也沒有減小,如果有一個音調看起來比另一個音調強烈得多,那麼音調很可能是根音(而「三次諧波」的很大一部分是第五音調)。如果沒有三次諧波較強的音高,和絃的五分之一可能是根音下五分之一或四分之一。 – supercat 2012-11-25 17:57:18

+0

我同意,只要您只是想檢測和絃的一般特徵(例如'Cm7')而不是檢測確切的反轉,就可以更容易地檢測和絃。所有的最簡單的和絃(C + C)是最難檢測的之一。 – 2012-11-26 17:01:37

2

這個職位是有點老了,但我想我會在下面的文件添加到討論:

Klapuri,安斯; 使用聽覺模型對複音音樂和語音信號進行多音分析; IEEE關於音頻,語音和語言處理的交易,卷。 16,NO。2,2008年255

本文作用有點像multipitch分析的文獻綜述和FEBRUARY討論了基於聽覺模型的方法:

enter image description here

(該圖像是從紙我不我不知道是否必須獲得批准。)