前言
這篇文章不是講樂理知識的,那是音樂製作人,編曲人員所需要鑽研的學問,不過你要有興趣也可以看看專業的樂理知識。
這裡僅僅是說在音樂訊號分析的專案中,我們需要知道的一些引數的意義。
在諸多訊號處理,或影像處理演算法的部落格中,我沒有找到有人能把一個演算法說清楚的,比如給出一堆複雜公式,但沒有說明引數代表的意義,這一點是非常浪費閱讀者的時間的。或者說公式裡的引數字母表示經常更換,在不同的場景中,更換很多種字母,以及公式的變形。這是對學習者非常不利的。包括程式語言實現一些演算法的部落格,比如寫一個演算法的 python 實現,程式碼寫了一堆但最後波形展示的時候,連一句
plt.show()
都沒寫上去,導致追問的新手要花大量的時間繼續尋找答案,有基礎的人當然能看出來程式碼沒寫全。不過現在的很多演算法都有庫,但是有些庫經常更新,導致很多文件中提到的一些函式已經失效,這時候如果你知道基本原理,就可以從底層實現,自己定義一些 function 來解決問題,如果你沒有這個自我從底層實現演算法的能力,那估計你要在茫茫的網路深海中撈針試圖找到答案了。不過遺憾的是,好像市面上沒有一些從 0 實現的演算法文件說明,每個人都在呼叫。感性的說個數字,我覺得應該有 95% 以上的博主寫演算法文章都說不清楚情況,導致我們一切問題都會在 stackoverflow 上尋找一些零碎的答案。
寫演算法就要說清楚公式的引數,否則只是浪費大家時間,寫得清楚公式引數的意義才配稱得上是演算法工程師。
音樂形式簡述
根據音樂資料的不同形式,可以將音樂的表示分為以下三類:
- 聲音檔案型別
聲音通過錄音裝置取樣後的一種檔案型別,以二進位制取樣資料的形式直接記錄了那些真實的音樂或者語音音訊檔案,是世界上目前應用最普遍的音訊表示形式。這種聲音檔案型別的儲存方式有很多中,常用的有壓縮格式和非壓縮格式兩種。壓縮格式包括mp3
、rm
等,而非壓縮的格式包含了pcm
、wav
等。但這種檔案型別的缺點是需要比較大的儲存空間。 - 符號檔案型別
MIDI(Musical Instrument Digital Interface)檔案格式型別是最常見的結構化符號的音樂表示,記錄了豐富的音樂資訊:音樂演奏的方式、音符以及音調等語義資訊。MIDI 檔案實際是一種能夠描述音樂樂譜的音樂節奏指令序列。此外還有 GUIDO(一位音樂理論家的名字)、SMDL(Standard Music Description Language)、NIFF(Notation Interchange File Format)等型別。 - 模組檔案型別
實際包含了 MIDI 和數字音訊兩種檔案型別的特性。它除包含有樂器演奏指令和聲音的數字取樣訊號外,對音訊硬體的依賴性並不大。根據編碼方式的不同,模組檔案的格式有MOD
、XM
、MTM
、KAR
、IT
。
音級輪廓特徵提取
根據音樂作品內容的差異性,可以通過不同層次對音樂進行研究。一般來講,音樂可分為 Low-Level、Mid-Level、High-Level 三個層次。根據音樂理論以及音樂的表現形式,這三個層次的音樂特徵可以分別描述為基本特徵、部分特徵和整體特徵。
音樂的基本特徵通常包括音高、音色、音強等,它們代表了音訊訊號的一些固有特徵。按照相關的音樂理論將一種或者幾種基本特徵詳解後就組成了部分特徵,包括節奏、音程、和絃等。同基本特徵相比,部分特徵具有一定的語義特性,是統計模型和機器學習中常用的方法。
音樂的和絃特徵是音樂訊號處理中廣泛使用的一種訊號特徵,並且和絃識別在計算機自動伴奏,歌曲翻唱識別以及音訊匹配等領域具有重要作用。特徵提取和和絃識別分類是音樂和絃自動識別研究中兩個最重要的截斷。和絃識別系統可以看另一篇文章基於 SVM 和增強型 PCP 特徵的和絃識別瞭解。
節拍跟蹤
音樂的節奏作為音樂的靈魂,在表達音樂美中始終保持著重要的地位。沒有節奏就失去了表達音樂思維的能力。
“拍”是節奏的一個方面,同時也是計量音樂演奏快慢的一種度量單位。
一般用節奏來表示音樂每分鐘的拍數,單位為 BPM,表示每分鐘的節拍個數。節奏較快的音樂,節拍值大;節拍較慢的音樂,節拍值小。一般情況下,音樂的速度集中在每分鐘 20 到 300 節拍數之間。用某一個節拍出現的時間點來表示節拍點位置。將相鄰兩個節拍點之間的間隔稱為節拍間隔。它們時間的關係表示式:
\displaystyle B_v=\frac{60}{B_r}\\{}\\ B_v=節拍值\\{}\\ B_r=節拍間隔
節拍跟蹤用於獲取音樂訊號中的節拍資訊,確定每個節拍在訊號中的大致時間位置。它是自動伴奏及轉錄、計算機輔助音訊編輯以及音樂相似性等應用的基礎,同步節拍特徵也是歸一化不同音樂版本之間速率變化的一種很好的途徑。
此外,由樂理知識可知,音樂中和絃的改變往往發生在節拍處,因此進行和絃識別時先對相應的音訊進行節拍的跟蹤檢測,之後再進行音訊分割,優點就是可以有效避免將同一個和絃分割在不同的音訊段或者是同一音訊段中包含有多個和絃的情況。在音樂訊號處理中增加節拍跟蹤的方法可以很好的提高和絃的識別率。
比如動態節拍跟蹤演算法,包括起始點能量包絡、自相關最佳速率估計和節拍檢測三部分組成。
音樂訊號預處理:主要是對訊號進行去燥。將完成預處理的音樂全部轉化成 mp3
格式,取樣率為 11025Hz
,單聲道標準音樂檔案。
將音訊訊號進行 FFT,通過一個權重矩陣將傅立葉頻譜程式設計 40 維 Mel 頻譜。計算每一維頻譜沿時間軸的一階拆分(只有起始點資訊),然後將整個頻譜內的值相加,濾除直流後得到起始能量包絡。
對整個訊號的能量進行起始自相關運算,然後加高斯窗,在其對數域上取單一主峰值,將自相關中最大的滯後值作為最佳的速率估計。
最後將起始能量包落和全域性速率輸入節拍檢測模組,通過同臺規劃演算法獲取節拍的時間位置資訊,完成節拍跟蹤。
PCP 特徵介紹
人類聽覺系統對聲音的感知過程類似於頻域中對訊號頻譜的分析過程。對於音訊檔案資訊而言,標準的模式識別方法通常依賴於廣泛的特徵。一般這些特徵都描述了聲音的音色或者文字結構的一些特性,或者都是一些語音識別應用中對人類聽覺系統光譜特徵相應建模的音訊特徵。當處理音樂訊號時,可以使用表示音樂訊號的一些特徵描述,其中最顯著的一個特徵就是音樂在旋律和諧波方面八度的等效一致性。
Shepard 提出了使用二維空間來表示音高的感知結構,他認為使用二維的螺旋形來表示人類對音高的聽覺系統感知比使用一維的線來表示要準確,並由此提出用音高(Pitch)和音級(Chroma)兩項來分別代表垂直和弧度維:
在這樣的表示中,隨著音符音高的增加,比如說從 C1 到 C2,它的位置沿著螺旋線向上移動,在重新到達原始音高階 C 之前,它繞所有的音高階(音級依次為 C -> C# -> D,, -> G#)完成一次旋轉。音高描述了音樂的聲調隨頻率的增加而增加,而音級則表示在某個倍頻程裡的迴圈。因此相差整數倍頻的音屬於同一個音級。根據 Shepard 的結果,訊號的感知音高能夠轉換成音級(chroma)值和音調,表示為:
p=2^{h+c}
這樣的分解是位移的,它滿足c\in [0,1],\ h\in Z。c的線性變化,通過將間隔 0 到 1 分成 12 等份,可以獲得等音階的 12 個音級。Shepard 的表示形式表明兩個音高之間的距離依賴於 c 和 h,而不僅僅跟 p 有關。在音高(Tone height)方向上表示了音所在的倍音程;在水平方向,如圖所示的逆時針運動方向表明了音屬的音級。途中一共包含了 A –> G# 12 個音級。
音級特徵 PCP 通過結合音樂理論並且重建頻譜使其成為了音級譜。同時 PCP 特徵的一種重要特徵就是可以進行能量壓縮,將眾多泛音以多對一的方式對映到少數的音級上。例如,考慮一個具有 20 個元素的和聲序列被對映成了 10 個不同的音級值,並且 20 個元素中的 13 元素 僅僅對映為四個不同的音級值,並將該音級分佈作為了和聲的一系列的和絃模版。因此我們能夠很容易地想到使用這個特性來代替音訊訊號,從而取識別一個特定訊號的音級值。
在一些情形中,MFCC 特徵是音級特徵的一種補充,最初 MFCC 應用在音訊訊號處理中,後來應用到了不同的音樂分析任務重,其中就包括有音樂型別分類和樂器識別等,一般認為低頻處的 MFCC 係數跟音色相關,當忽略這種資訊是,我們在一定程度上可以獲取相對固定的音色,這樣就會增加對不同樂器種類相同音級特徵的魯棒性。對此可以引進來對訊號音高係數 PFCC(Pitch Frequency Cepstral Coefficients)的處理。
本作品採用《CC 協議》,轉載必須註明作者和本文連結