神曲背后的故事:算法工程师带你理性解构“蚂蚁呀嘿”
作者:意姝
審核:泰一
什么是音樂?
《禮記》里說,“凡音者,生人心者也,情動于中,形于聲,聲成文,謂之音”,音是表情達意的一種方式。從樂理上講,通常音樂是由節奏、旋律、和聲這三要素構成的,十二平均律這些律式和數學緊密相關。所以我們可以說,音樂是一個感性與理性交融的產物。而今天要介紹的音樂信息檢索(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一段旋律的重復,簡潔明了,常見于宗教音樂。
https://y.qq.com/n/yqq/song/004Yc5sF3Rq7Wn.html
- ABAB兩段旋律交叉重復。
https://y.qq.com/n/yqq/song/000aKduC3mu0IL.html
鋼鐵俠出場音樂
- AABA在重復的旋律中添加一段不太一樣的,避免乏味感,如這首圣誕歌曲。
https://y.qq.com/n/yqq/song/002zL7ur42FYtK.html
- 古典音樂
一些古典音樂有自己的內容組織形式,如奏鳴曲式(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 算法的效果及應用,不過在哪些場景下可以使用它們呢?也即如何區分出音樂場景呢?
針對這個問題,我們提供有聲音場景識別的算法能力,可以識別出當前是 “語音、音樂、噪聲” 中的哪一種,而且針對語音,可以進一步區分性別(男 | 女)。
下面是一段《新聞聯播》的音頻,聲音場景識別算法標記出了其中的音樂、男聲、女聲,以及無聲音(也即沒有能量)的部分。
關于我們
阿里云視頻云 - 語音與音樂算法團隊,主要為視頻時代的娛樂、教育等場景提供語音音樂等音頻的解決方案。在這里你可以了解到更多前沿的音頻算法應用,歡迎與我們一起打造更好的音頻世界!
「視頻云技術」你最值得關注的音視頻技術公眾號,每周推送來自阿里云一線的實踐技術文章,在這里與音視頻領域一流工程師交流切磋。
原文鏈接:https://developer.aliyun.com/article/782642?
版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。總結
以上是生活随笔為你收集整理的神曲背后的故事:算法工程师带你理性解构“蚂蚁呀嘿”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开课啦! dubbo-go 微服务升级实
- 下一篇: Midway Serverless 2.