作者:意姝
稽核:泰一
什麼是音樂?
《禮記》裡說,“凡音者,生人心者也,情動于中,形于聲,聲成文,謂之音”,音是表情達意的一種方式。從樂理上講,通常音樂是由節奏、旋律、和聲這三要素構成的,十二平均律這些律式和數學緊密相關。是以我們可以說,音樂是一個感性與理性交融的産物。而今天要介紹的音樂資訊檢索(Music Information Retrieval,MIR),便是從音樂裡提取 “資訊” ,用算法将音樂中理性的一面挖掘出來。
哪些是音樂的資訊?
1. 節奏
首先我們來聽一首抖音神曲:《鳌拜鳌拜鳌拜拜》
https://y.qq.com/n/yqq/song/000ZCScz4g4BuM.html歌曲中讓你忍不住跟着一起搖頭抖腿的強烈的鼓點,就是節奏點,這是對節奏一種感性的認知。
嚴格來說,節奏是被組織起來的音的長短關系,它像是音樂的骨架,把音樂支撐了起來。譬如下圖樂譜上的 “4/4” 是拍号,代表着這首曲子的音長的組織形式為:以四分音符為一拍,每小節 4 拍。每小節的第一拍往往為強拍(downbeat),這裡的 “down” 和指揮的手勢一緻。
其它常見的拍号還有:2/4,3/4 等,這些都是單拍子(simple meter),也就是每拍自然二等分的節拍。除此之外還有複拍子(compound meter),指的是每拍自然三等分的節拍,如 6/8,複二拍子,讀作 “一二三,二二三,一二三,二二三” 。

爵士樂、靈魂樂的魅力很多都在于對節奏的運用,遺憾的是,相當一部分華語流行歌曲都是 4/4 拍子的,導緻聽感上有很多雷同之處。
2. 音高
音樂是一種聲音,是以也是由物體震動産生的,音的高低是由振動頻率決定的。樂器發出的聲音或人聲,一般都不會隻包含一個頻率,而是可以分解成若幹個不同頻率的音的疊加。
這些頻率都是某一頻率的倍數,這一頻率就稱作基頻,也就決定了這個音的音高。下圖為一段男聲朗讀的音頻的語譜圖,最下面藍色框出來的部分就是目前時刻的基頻。通常人聲的音高在 100Hz~200Hz 左右。
對于流行歌曲而言,音高常常指的是它的主旋律,也就是人聲唱的部分。
3. 和弦
現代音樂概念裡面,由多個不同的音高同時發聲就叫和聲,三個或三個音以上的和聲就叫做和弦。當這些音同時彈奏時,叫做柱式和弦,而當它們先後奏出時,便叫做分解和弦。
不過,并不是随便按下幾個音,都可以帶來悅耳的聽感。由十二平均律可知,一個八度平均分成十二等份,每份稱為半音,每個半音的頻率為前一個半音的 2 的 12 次方根。常見的有三(個音的)和弦,七(度音的)和弦,基本的三和弦的組成如下圖所示。
“螞蟻呀嘿” 刷屏的背後:算法工程師帶你理性解構神曲什麼是音樂?哪些是音樂的資訊?如何提取這些資訊關于我們 4. 段落
像文章一樣,音樂也可以劃分為一個個段落,讓情感的表達有了起承轉合。段落的組織形式多種多樣,常見的有如下幾種:
- AAA一段旋律的重複,簡潔明了,常見于宗教音樂。
- ABAB兩段旋律交叉重複。
鋼鐵俠出場音樂
- AABA在重複的旋律中添加一段不太一樣的,避免乏味感,如這首聖誕歌曲。
- 古典音樂
一些古典音樂有自己的内容組織形式,如奏鳴曲式(sonata form),它的結構由呈示部、展開部、再現部三大段依序組成。
- 流行音樂
大家比較熟悉的結構是 “前奏、(主歌 - 副歌)*n、尾奏” ,當然流行音樂的創作比較自由,有時創作者會在兩段副歌之間添加橋段來避免單調,或在主歌與副歌之間添加過渡段,使得情緒過渡更為自然。
如何提取這些資訊
傳統的方法是 “提特征 + 分類器” ,這些特征包括時域和頻域的。
音頻信号常常用二維的特征來表征:一維頻率、一維時間。這樣我們可以用對待圖像的方式,将音頻特征輸入到分類器中。不過音頻特征和圖像也有所差別,圖像具有局部相關性,即相鄰的像素點特征比較接近,而頻譜的相關性,展現在各個泛音之間,局部的相似性比較弱。
舉個栗子,我們用周傑倫《簡單愛》的前 10s 的和弦(C,G,Am,F)渲染出一段音頻,下圖所示的 4 個頻譜類的特征,從左上到右下分别為:短時傅立葉變換、Mel-Spectrogram、Constant-Q Transform、Chromagram,前三個都可以了解為通過濾波器組把原始的音頻信号做拆分。
在提取特征的過程中,一些抽象的、隐藏在音樂信号中的語義便浮出水面。在 Chromagram 中,縱軸是 Pitch Class(音高集合,e.g. “音高集合 C” 包含了 C1,C2,C3....)。從圖中可以看出,0s~3s 最亮的三個音分别是 C、E、G,可以推測出這是一個 C 和弦,合适的特征讓 “和弦檢測” 這個分類任務的難度有所降低。
随着深度學習在各個領域的蓬勃發展,深度網絡也逐漸成為 “分類器” 的首選,不過也要 “因地制宜” ,像節奏這種對音樂上下文有所依賴的音樂 “資訊”,RNN 類的網絡往往效果更佳。
我們現在能做到哪些
因為我們的應用場景同時包含了實時與離線,是以下列算法很多都有實時的版本,可用在實時音視訊通信等場景。
1. 節奏檢測
如上文所述,節奏點就是歌曲拍子所在的位置。前陣子比較火的 “螞蟻呀嘿”,照片中頭動起來的樣子非常魔性,這些動作就是按照歌曲的節奏點來設計的。下面我們把利用算法檢測出來的節拍,用類似于節拍器的聲音呈現出來,學過樂器的同學應該對這 “嗒嗒嗒” 的聲音有印象。通過節奏檢測的算法自動識别出其他歌曲的節奏點,我們也可以制作自己的 “螞蟻呀嘿” 模闆。
上文還提到了 “強拍” ,可以用來區分小節。我們的方法除了檢測出 beat,還能區分出 downbeat,下面的視訊展示出了 “螞蟻呀嘿” 裡的 downbeat:
有同學可能會好奇,你們的算法檢測出 beat、downbeat 有什麼用啊,不就是一些時間點嘛?
其實可以衍生出很多音樂的玩法,譬如說前幾年很火的音樂遊戲,節奏大師,一個跟着旋律、節奏來瘋狂輸出的遊戲。
我們在公開資料集(GTZAN)和由 100 首流行歌曲構成的内部資料集上,評測了我們的方法,結果如下表所示。我們的方法在兩個資料集上均有 0.8 以上的 F 值,具有一定的魯棒性。
2. 實時音高檢測
我們的方法可以做到輸入一幀音頻,然後輸出目前幀的音高,以赫茲為機關。
上面這句話看上去似乎有些幹癟,那這些數字有哪些作用呢?
舉個栗子,很多 K 歌軟體裡都有下圖中紅框中的内容,它們是歌曲的音高線。衡量歌唱得準不準,主要就是看演唱者的音高、節奏和原曲的比對程度。
在這個場景下,我們的音高檢測算法可以實時地分析使用者的演唱水準,并給出分數。
除此之外,實時音視訊通信中的一些場景也依賴音高檢測,如 Voice Activity Detection (VAD),如果目前幀有音高的話,說明有人聲。
3. 段落檢測
流行音樂常見的段落類型有:前奏、主歌、過渡段、副歌、間奏、橋段、尾奏這 7 種。
我們調研了市面上做段落檢測的方法,很多都是基于自相似矩陣(Self-Similarity Matrix, SSM),對音樂結構做了 segmentation,也即它們僅僅能劃分時間區間,而無法給出具體的段落類型;Ullrich et al. 提出了基于 CNN 的有監督學習的方法,可以檢測出不同粒度下段落的邊界。除了 “segmentation” ,我們的方法還可以做到 “classification”,即可以給出每個段落的時間區間和類型(上述 7 種)。
我們選取了音樂軟體上熱門榜單裡的前 100 首歌曲,來作為我們的評測樣本集,評測結果及名額含義如下所示:
這 100 首中包含了 19 首土味 DJ remix 歌曲,由于這些歌曲動态範圍較小,能量很強,“動詞打次” 的聲音掩蓋了很多原曲的特質,是以在這類歌曲上,段落檢測算法表現較弱。刨除這些 DJ 歌曲後,算法的 F_pairwise_chorus 可以達到 0.863。
考慮到現在對音樂的消費越來越快餐,而且有時候為了給視訊配樂,需要截取音樂的片段,而副歌往往是一首流行樂最 “抓耳” 的部分,我們将算法封裝為 “副歌檢測” 的功能,一鍵幫使用者篩選出流行歌裡所有的副歌,具體的調用方式在
這裡。
這裡以周傑倫的
《說好的幸福呢》為例,算法的輸出結果如下圖所示,時間機關為秒,大家可以邊欣賞 MV、邊感受副歌的情感與能量~
4. 實時聲音場景識别
上文提到了一些 MIR 算法的效果及應用,不過在哪些場景下可以使用它們呢?也即如何區分出音樂場景呢?
針對這個問題,我們提供有聲音場景識别的算法能力,可以識别出目前是 “語音、音樂、噪聲” 中的哪一種,而且針對語音,可以進一步區分性别(男 | 女)。
下面是一段《新聞聯播》的音頻,聲音場景識别算法标記出了其中的音樂、男聲、女聲,以及無聲音(也即沒有能量)的部分。
關于我們
阿裡雲視訊雲 - 語音與音樂算法團隊,主要為視訊時代的娛樂、教育等場景提供語音音樂等音頻的解決方案。在這裡你可以了解到更多前沿的音頻算法應用,歡迎與我們一起打造更好的音頻世界!
「視訊雲技術」你最值得關注的音視訊技術公衆号,每周推送來自阿裡雲一線的實踐技術文章,在這裡與音視訊領域一流工程師交流切磋。