|
本人完全是一个音乐门外汉,对音乐兴趣和天赋都很有限,从没想过自己与音乐有什么交集。这一两年,音乐开始对我的生活有了一点点影响:和很多小朋友一样,女儿从四五岁开始学习钢琴了,家里不时会想起她弹钢琴的声音,自己有时也考虑AI能在钢琴学习中起到什么作用。此外,父亲是一个K歌爱好者,这两年开始喜欢用手机上的全民K歌唱歌唱戏,这些APP能够给用户K歌进行评价。
那么,是否能用AI来评价钢琴弹奏?这个问题也有几个朋友问过我。自己近几年主要研究AI相关问题,但始终围绕图像视频分析,从没考虑过声音方面的AI。虽然知道深度学习在音频分析领域(语音识别等)同样发挥巨大作用,但鉴于学科差异一直未深入研读。促使我开始考虑这个问题的关键来自于下图(摘自 AnthemScore | Music Transcription Software, AnthemScore是一款将声音转换成五线谱的软件):
一段钢琴弹奏音频对应的时频图以及弹奏标识,可以看到钢琴按键与视频图吻合地很好,当然还是存在复杂的泛音和其他影响,使得这个问题也不是那么容易解决
这张图清晰地告诉我们:通过分析音频对应的时频图,可以完成钢琴按键的对应分析。既然是图像,我相信自己属于行内人士。
“爱弹奏”(暂定名)小程序就是我们(我和两个年轻人)近期关于钢琴AI技术研究成果的一个综合体现。小程序的核心功能和 唱吧 、全民K歌 比较类似,就是评价用户弹奏的钢琴曲,给出得分和排名。那么这个小程序背后所体现的具体AI算法主要有哪些呢?这篇文章将简单向大家介绍这方面的内容,向感兴趣的同学做一下科普工作。
小程序的介绍请参考下面链接: 一、钢琴弹奏水平评价
“爱弹奏”的核心功能就是计算机AI自动评价用户的弹奏水平。评价一个钢琴弹奏需要知道对应曲目的标准弹奏,用户与标准弹奏越接近分数就越高。在“爱弹奏”中,评价对象包括按键准确度、流畅度和力度。与标准弹奏相比,如果用户错按或者漏按琴键,会造成准确度的下降;按键时间点偏差(节奏错误、生疏引起的不连贯)则会造成流畅度的下降;而按键轻重不匹配则会造成力度的下降。为了实现这些功能,需要研究如下几个核心技术:
- 钢琴音乐对应按键还原。一个钢琴老师能够仅仅听声音就知道学生演奏情况,是因为他具备从钢琴弹奏音频中恢复出弹奏者的按键过程(即哪个时间点按下或放开某个按键、按下的力度如何)。如何能够将这个过程在计算机中重现,是钢琴分析AI所关注的重要问题。上文提到的AnthemScore就是这方面科研成果的应用。在使用AnthemScore过程中,我们发现它处理速度较慢,准确率也不是很理想。为此我们学习参考了这方面大量的研究工作,完成了一个还算“凑合”的AI程序:它大概能够在3秒内完成约3分钟钢琴弹奏音频的分析,并支持在线实时处理(相当于 边听边分析,就是“爱弹奏”目前的模式),准确率也达到了比较理想的程度(即使是实时分析“野蜂飞舞”这样高难度的曲子),这为我们后续的分析打下了良好的基础。我们首先将收集的一万多首曲库的专家弹奏进行分析,作为标准模版存在数据库中,然后实时分析用户弹奏,与专家弹奏进行比对,给出评价。
- 按键数据的对齐。利用上述技术分析出用户按键信息后,下一步就是需要实现按键数据的对齐。对齐的意思是给出两段钢琴曲A(用户弹奏)和B(专家弹奏)的按键过程,计算出A中的每一次按键在B中的对应按键。这个过程事实上非常复杂,因为用户弹奏会出现很多非标准情况:可能从中间段开始弹奏、可能出现频繁的重复和跳跃(比较难的地方重复弹奏或干脆跳过)、可能频繁出现按键错误(错按、漏按)。对齐算法必须给出一个非常合理的映射关系,而且计算速度一定要够快。我们完成了该功能的实现,对齐效果是非常理想的,在小程序最后的分析结果“完整度”部分,就是对齐结果的简单展示。
- 评价分数的计算。当按键数据对齐后,计算分数就是一个比较简单的过程了。如果钢琴曲A中的某个琴键在标准曲B中没有对应,表示用户多按了该琴键;B中某个琴键在A中没有对应,表示用户漏按了该琴键,两种情况都会影响准确度得分。如果A中琴键按下的时间段和B中琴键按下的时间段保持比例关系,那么流畅度得分会比较高(这里不能要求完全时间一致),当然如果该比例数值距离1偏差很大(也就是用户弹的异常快或慢),也会影响流畅度的得分。按键力度也流畅度类似,考察的是A与B中按键力度是否保持比例关系。
需要说明一点,目前市面上有不少智能钢琴具备上述功能,但绝大部分都依赖对电钢琴或传统钢琴的改造(电钢琴需要连接MIDI输出,传统钢琴需要专门的拾音设备)。仅有少量依靠声音的陪练APP,但它们的效果我个人认为是难以令人满意的,基本都无法做到复杂快速弹奏的准确识别,在行业内基本没有影响力。
我们目前的评价方式对于高水平用户而言可能是难有区分度的,因为准确流畅的弹奏对于他们而言问题不大。如何更科学地评价弹奏,我们后续也还会深入研究。 二、钢琴曲自动检索匹配
和K歌类APP不一样的地方,“爱弹奏”允许用户不指定弹奏曲目,而是根据用户的弹奏声音自动分析出用户弹奏的曲目,然后用对应曲目计算得分。这点类似一些音乐APP的“听歌识曲”。这个功能的推出的原因也很简单:“爱弹奏”曲库提供了一万多首钢琴曲,虽然提供了比较方便的目录检索功能,但有一些钢琴曲的作曲者以及钢琴曲名很难找到统一标准的中文翻译,这加大了用户靠关键词检索的难度,因此我们想到通过“听歌识曲”的功能来实现定位。
我们测试了国内外多个提供相关功能的APP,包括大名鼎鼎的Shazam、网易云音乐等,测试效果都非常不理想。它们原曲识别的能力很强,但却不适用“爱弹奏”这样的场景(例如朗朗弹奏的某个曲子,如果播放原曲这些APP就能找到结果,但如果是其他人弹奏相同的曲子就基本检索不到)。这方面的科研论文有限,完成这个功能点上我们也花了很多时间。
两个曲目的对齐然后评价打分功能其实可以用于“听钢琴弹奏识曲”,一段弹奏A和曲库里所有曲子都进行对齐打分,得分的高低其实就对应相似程度。但是对齐打分的计算虽然能够实现单曲实时,但是对于大规模的曲库检索却完全不能胜任。例如“爱弹奏”目前提供了约1万3千首钢琴曲,即使一次对齐消耗0.1秒,一万首曲子匹配一遍也要花费1000秒时间。因此必须要有使用全新的思路解决这个问题,最后我们利用按键关系形成的“按键指纹”构建反向索引,最终达到快速检索的需求。
用户选择智能弹奏时,系统会自动检索当前曲库内相似度较高的曲子,当排名第一的曲子相似度达到一定数值时,会加粗显示。当用户弹奏时间很短或者曲子特别简单时(表示弹奏的特征还不能很好体现该曲目的特点),检索结果可能会不理想,这也是我们后面算法需要进一步提升的部分。还有一点需要提示,智能检索会消耗一定的计算资源,如果同时使用的用户较多可能反馈结果会比直接选曲弹奏慢。
三、钢琴曲难度评价
在设计“爱弹奏”功能时候,参考K歌软件也想加一个综合排行榜。如果完全按得分对全部弹奏进行排名却不公平,因为后台一万多首钢琴曲难度差异非常大,简单曲目可能一个初学者都比较容易拿到95分,但复杂曲目得到85分会更难。因此我们自然想到了总排行榜应该同时考虑得分和曲目难度,而评价一个钢琴曲的难度就成为必须的工作。
作为一个音乐门外汉,解决这个问题就有些困难,在咨询了一些学习过钢琴的人士之后,我们初步完成了一个评价算法,能够从按键速度、按键转换难度、黑键密度、曲目长度等几个方面综合评估一个钢琴曲的难度。我们完成算法后对曲库里考级曲目进行了评测,大体符合难度分布,但其中还是有一部分曲目的结果很意外,也就是高级别的考级曲目在我们当前算法评价下难度很低,或者低级别考级曲目的评价难度却相对较高。这里的问题我们还在研究,因此综合排行榜功能会在稍后再推出,目前只在曲目内按分数进行排名(需要注意的是,参与排名的曲子弹奏完整度需要高于某个阈值)。
后续研究工作
现在的小程序只是我们目前工作的一个简单综合,我们还会持续深入研究并更新工作。我们希望能够解决下面几个问题:
- 消除周围环境其他声音对钢琴按键识别的影响。当环境中存在其他声音时,人是能够分辨哪些是钢琴的声音的,但我们的AI在这方面还有待提高,它会把其他声音也当作钢琴声音进行识别分析。因此在弹奏时候要求用户保持环境的安静,非钢琴声音(包括人声、伴奏等)都会降低准确度得分;
- 加速弹奏对齐。弹奏对齐是目前“爱弹奏”整体计算资源占用最高的部分,提升其计算性能是提升小程序后台服务支持用户数量的关键;
- 提升曲库检索准确率。我们希望能够在最短时间内快速定位弹奏曲目,而现在实现的算法在处理简单和短时弹奏时并不非常理想;
- 提升钢琴曲难度评价的合理性。实现一个更加客观有效的钢琴曲评价算法,是实现综合排行榜不可缺少的部分;
- 钢琴弹奏到数字化五线谱的对齐。小程序目前能够给弹奏评价,但是如何在五线谱中可视化展现扣分的位置,需要将按键对应到数字化五线谱上,这部分工作将是我们下一步攻关的重点。只有很好解决这个问题,我们才能够给出更客观易懂的评价报告,将小程序功能进一步推广到教育领域,而不仅仅是目前这类娱乐应用;
- 钢琴音乐的“美颜”。相机具备美颜功能后,大家才乐于分享自己的照片视频。通过手机自带麦克收集的钢琴音乐的音质并不高,分享出去后可能缺乏质感。为此,我们也考虑后续添加声音“美颜”功能,提升大家分享的乐趣;
- 更合理的评价机制。目前我们仅使用用户弹奏与标准弹奏之间的差异度来进行评价,这对于初级或中级爱好者而言可能已经可用,但对于真正的高水平弹奏,我们的评价机制事实上已经达不到要求;
- 支持其他乐器。很显然,类似的技术路线也可以应用到其他乐器的分析评价上,这也是我们后续考虑的一个方向。
- AI运算的前端化。鉴于目前小程序的形式,所有数据都汇集到后台服务端进行计算处理,服务端的压力比较大。后续我们会考虑开发独立的APP,并将部分运算转移到手机端处理,降低服务器压力,提升用户体验。
很显然,这些功能已经不是我们两三个人能够短时间完成的。这也是我写这篇文章的初衷,希望通过上述介绍,找到真正感兴趣志同道合的朋友,希望你能够积极联系我们(尤其希望有兴趣且了解音乐和钢琴的朋友加入),一起投身钢琴和音乐AI领域的研究和应用开发。 |
|