AnthemScore是一款利用卷积神经网络进行乐谱转写(music transcription)的实验性软件。这篇文章我将介绍如何在Linux上从挤牛奶、养鸡开始做蛋糕 如何使用这款工具。
首先看一个AnthemScore辅助打谱的曲子。
蛮干净的对不。不过这是我后期稍微修整过的,Anthemscore经常会把鼓等频率分布很长的声音胡乱识别成一大串A4以下的低音,或者把高次泛音列也误认为基音(尤其是八度的倍音),此外还有时值过短的问题,所以生成的谱其实是非常丑的,还需要弄到MuseScore3里面运用你的乐理知识修一下。不过AnthemScore在配器不太复杂、尤其是弦发声乐器(吉他、钢琴、小提琴)音符频率干净的曲子上面,识别效果很出色,调性和节拍也基本没有出错过。
对music transcription方面领域的技术感兴趣、或者对AnthemScore的原理感兴趣的可以看作者的这篇原理科普,作者能把图像识别领域的卷积神经网络用在音乐频谱图上非常厉害。(类似的研究方向是“鸡尾酒会谈话”问题,也就是如何分辨两个同时讲话的人的讲话内容。有时候感觉人耳真是神奇,明明那么轻松可以分辨出来的不同音色,让计算机来区分却难如登天者。)
最近在热情地投身Ubuntu,那我就尽量把工作和兴趣用的软件都带到Linux下面吧。
AnthemScore这个软件,其实我建议在Windows底下用。因为有显卡CUDA加速的Windows编译版本(虽然也就是处理花上两分钟和二三十秒钟的差别,快不了多少)。再不行也有OS X 安装包。原因是Linux版比较烦的地方是自己装Qt依赖。因为Qt虽然是开源的,但最近变成商业软件,我没有研究它的license,似乎是不准随便打包分发。
首先去开发者Lunaverus的网站下载安装包。Linux x64 installer或zip都行。网速不快的话,建议还是(离线的)zip包。
然后解压出来,放到随便什么目录下面,就称为<anthemscore dir=“” install=””>吧。
现在装Qt。AnthemScore指定需要装的是Qt 5.12.5版。去Qt官网下载Qt的通用online installer。执行它
1 | |
这个安装程序有内置代理设置,就不需要额外指定proxy-chains了。
然后……我发现装个Qt居然还要注册用户,checking license,然后从远程软件源下载Qt工具包的元信息。搞得和Unity3D一样麻烦。而且虽然参照Anthemscore的README.md文件,,只需要安装”Desktop gcc 64-bit” 和 “Qt WebEngine”。那些Developer Tool一律不选。但特么安装的时候还是会把Qt Examples和Qt Creator都强制装上。我只是想用Qt运行库,并不想自行开发啊喂!
更严重的是,虽然挂了魔法工具,但联网下载组件的速度实在太慢了。你能想象以70KB/s的速度下载上G的文件吗?
所以我把安装程序关了。可是我不知道怎么通过apt-get下载(草),只好去清华大学软件镜像源的Qt仓库找离线安装包。(btw,中科大、北理工、CNNIC也有Qt 镜像)。
镜像仓库里面可以看到,Qt现在有好几个维护版本,community_releases(社区编译版,已经被商业化接管,2017年之后就不再发放新版本了)、development_releases(开发版,类似nightly build)、linguist_releases(多语言版)、minisro(小发行版,似乎是用于Android开发)以及official_releases(官方正式版)……其实哪个都没差吧,而且每个版本的OS X、Windows、Linux的离线安装包都有。
我们选择Anthemscore指定的5.12.5版本的离线包。5.12.x的都可以。只要小版本号不变,API就没差别。
然后照样执行安装。
1 | |
这就很快了,十几秒钟就好了。
btw,仓库里还有Qt Creator(IDE)和Qt Design Studio(UI可视化设计然后生成界面描述代码QML用的),还有PyQt。说起来我之前还用PyQt5/PyQt4写过工作上的小程序。当时另一个binding实现是PySide。不知道现在兼容得怎么样了。
记得只需要装”Desktop gcc 64-bit” 和 “Qt WebEngine”。我有点奇怪一个成品软件要gcc编译器干什么,把tensorflow编译到本机CPU上?(还真的有可能)不过既然说了就装吧。
不管你是怎么装完的Qt,安装完毕后需要把Qt的库给软链接到Anthemscore的目录里面。
1 | |
运行一下license工具看能不能启动。
1 | |
正常的话,应该能看到如下输出:
License utility version = 8
Testing…
Tests Passed.
假如不幸不成功,提示以下信息的话:
Root permissions needed. This binary should be owned by root with the setuid bit set. If it is, run ‘mount’ with no arguments to verify that the partition containing this binary was not mounted with ‘nosuid’.
官方提供了一个修复脚本和排查方案,和用户权限有关,照着做就行了。
1 | |
这时候应该能看到这样的权限状态:
-rwsrwxr-x 1 root <username> ……
然后再运行
1 | |
看一下程序所在的分区,它不应被挂载为’nosuid’标志。(SUID机制好像类似于Windows里面的文件的读写执行权限用户组,我也不是很懂。)
然后就可以运行了。用法和Windows下面一样。
1 | |
第一次启动有点慢,大概要二十秒,可能是和服务器通信申请 trial license。默认语言是Deutsch。我草,满屏幕德文。好在可以在Datei——Sprache菜单里面可以切换成简体中文(机器翻译)。欧洲音乐圣地爱好者自己看着办选择Deutsch、Francias、Italiano。
我试了一下《星天宫の庭で》。自己电脑是小米笔记本Pro16存顶配版(2017年年底买的)CPU是i7-8550U,处理时长大概要120秒,峰值时大概会吃掉6GB内存。大部分时间花在Finding notes步骤。
有一个需要说明的微调选项是音符敏感度,太右边了会把一些没用的泛音列和杂音当成基音音符,太左边了又会遗漏音符。一般默认在中间就行。我不是很喜欢那个简陋的spectrum 音符调整界面。直接导出MusicXML格式后,换别的打谱软件调整就行。
其他设置可以参考官方教程
注意,第一次运行的时候需要联网获取license。试用期三十天。激活的时候也需要联网。授权机制也是利用机器码的唯一性,稍微用硬件指纹信息修改的工具就能绕过。discord的相关爱好者频道也有流传crack了,但有能力和需求还是支持正版吧。
其实还是用Windows版比较好,虽然把Qt一堆dll都放进目录里了,也就200MB多一点,你不需要装别的东西。Qt能跨平台这一点是挺好的。虽然运行库有点重。但现在的软件动辄大几十M,专业程序几百M也很正常。不是特殊的工业设备成本剪裁要求的话,那一点容量也给得起。
Linux这种吃个蛋糕还要从给牛挤奶、养鸡生蛋开始的DIY哲学,麻烦不麻烦啊。
顺便一说,Anthemscore并不能拆分不同乐器的声音,或者消除人声。想做这件事的话,有另一个非常出色的工具Spleeter,是用tensorflow训练的CNN,人声去除效果非常好(但因为原曲一般最后都会走混响效果器的缘故,会有一点点卡拉OK包间的那种回声感)。我经常拿Spleeter的GUI版本制作黄油歌曲的instrument版。国内前不久还出现过换皮+闭源+收费的在线服务版本。
Nicechord曾经做了一期关于人声消除原理软件的科普。他在里面说截止他做节目的那个时间点(2018年3月),市面上并没有所谓真正能透彻消除人声的工具。
想要把人声从一张专辑中拿掉,就有点像你想要把牛奶从拿铁(牛奶混合咖啡)里拿掉一样。以现在的技术而言是办不到的……
但他同时也预言了机器学习技术的前景。时代变得太快,2018年10月的节目中他就介绍了机器学习去人声的类似软件RX7。
只是这样的软件会让很多人失业吧,因为听说日本的卡拉OK的伴奏版大多居然不是找音乐厂商拿的无人声母带,而是雇佣听谱职人(耳コピー職人)把歌曲的每个轨道的每个音符听辨出来,从头还原歌曲工程的,一首歌要花费两天时间,太特么工匠精神了。