使用 MT3 模型识别音频乐谱
今年初的时候,网上有一篇标题为《谷歌推出全能扒谱 AI:只要听一遍歌曲,钢琴小提琴的乐谱全有了》的报道。其实文中提到的 MT3 项目并非是 Google 官方推出的,只是使用了 Google 的 T5X 训练框架而已。MT3 在 Google Colab 上提供了一个 Notebook,用户可以直接在线使用。
Colaboratory 是 Google 推出的一个类似 Jupyter Notebook 在线服务,提供 Python 运行环境。如果你不清楚这些和编程有关的概念也没有关系,并不会影响后续的使用。
首先,要准备一个用于乐谱识别的 DEMO 音频。我在 B 站上找到一个 Somewhere In Time 的钢琴演奏版。使用 youtube-dl 下载视频并转换成 MP3 格式:
powershellyoutube-dl -x --audio-format mp3 https://www.bilibili.com/video/BV15g4y1v7TT/
也可以使用 GUI 工具 B23Downloader 下载视频:

然后,在浏览器中打开 MT3 项目的 Colab Notebook 页面。完整 URL 如下:
https://colab.research.google.com/github/magenta/mt3/blob/main/mt3/colab/music_transcription_with_transformers.ipynb
第一步,选择菜单「代码执行程序-更改运行时类型」,弹出对话框中的「硬件加速器」选择「GPU」,点击「保存」:


第二步,依次执行「Setup Environment」、「Imports and Definitions」和「Load Model」,点击左边的三角箭头即可运行。

执行过程中可能会输出一些警告信息,可以不必理会。

每一步执行成功后,会在左侧显示执行耗时。如上图所示,「Load Model」执行了 13 秒。
第三步,执行「Upload Audio」上传音频。同样忽略输出的警告信息。

第四步,执行「Transcribe Audio」,将 MP3 转换成 MIDI 格式。这一步操作执行会比较慢,我这里耗时 1 分钟。

最后,执行「Download MIDI Transcription」,下载 MIDI 文件。
用开源作曲软件 MuseScore 来打开下载的 transcribed.mid
文件。

可以看到一共识别出 5 个音轨,分别是:钢琴、大提琴、小提琴、中提琴和单簧管。然而原曲明明是钢琴和小提琴二重奏,这个识别准确度还是有些问题。