大家好,我是苑盛成,来自北京灵动音科技有限公司(DeepMusic)。非常荣幸向大家介绍我们在音视频方面的一些技术成果。灵动音科技(DeepMusic)主要业务是人工智能辅助音乐创作和制作,本次与大家分享的内容也与此相关。
1、行业背景与问题挑战
首先和大家聊聊目前音乐创作相关的行业背景与问题挑战。
传统的音乐制作过程分为五个阶段:创作者获得旋律、歌词灵感,通过五线谱曲谱或自己用吉他钢琴弹奏得到录音小样做示例,此阶段还十分粗糙,除了已有的歌词旋律外,还需要制作精良的伴奏,这就进入了编曲阶段。编曲阶段会使用到较大型软件如数字音乐工作站,编曲师能够按照一定速度为旋律添加适当的音色乐器,得出能够适配旋律及歌词的伴奏带。接着请歌手到录音棚中进行录制,录音师修正人声节奏及音高。将制作精良的伴奏和人声结合,进入混音阶段。混音师把乐器放置在正确的空间位置,从而良好地与人声融合,使声响尽量均衡,结束以上步骤后即可获得一条基本完成的音频。为了使观众听感更清晰,我们还需在不损失音质的情况下尽量提升音量。
以上便是完成一条音频最基本的步骤,也就是说即使不要求艺术效果,只是快速的流水线生产音频,不吃不喝最快也要半天时间。那如果进行一些艺术上的加工,耗时会更长,甚至达到一个月左右。而这只是时间成本。
制作音频需要的软件总计至少1000美元,不过,钱是小事,重要的是数年的音乐实践和经验积累。举个例子,苹果的编曲软件——logic pro,初学者甚至不知道如何在软件中找到正确的音色,更何况每条音色还可通过各种参数进行调整,此外,如果想要快速录入正确音符,还得先成为一个熟练的键盘手。
大家可以看到,完整制作一条音频需要的时间、金钱成本都很高,并且还要求创作者有一定的音乐知识背景。而目前国内仅有几十万能够进行全链条生产的原创音乐人。
个人而言,面向听歌需求的热歌生产在数量上已经严重过剩。现在的在线音乐用户规模将近七亿,原创音乐人大约有40万,乍一看这个比例还很悬殊,但其实一个音乐人就算一个月做一条音频,一年下来也可以生产300w首音乐,不可能每位听众一年都听300w首歌,也不可能每首歌都获得很高的讨论度。于是,最后一年收益为正也就是能够回本的音乐只有不到1w首。
音乐制作行业有着非常强的长尾效应,头部的极少数歌曲能够火遍全国,而后面99%以上的歌曲都处于赔本的状态。
但其实这个行业并不只有听歌这一个需求。近年来,除了听以外的用户需求正在不断增长,如前几年较火的K歌,至今已有1亿多的用户规模。可以试想一下,将近七亿的听众中有1亿多人想唱歌。此外还有学习需求,目前适龄儿童的音乐学习渗透量已经达到1600万。许多一二线城市的中小学都有音乐兴趣班,甚至有的班级还有班歌。
“玩”也是近几年增长迅猛的需求,换句话说是面向创作交互新体验的兴趣类应用。如前些年的满足即兴弹唱的“唱鸭”APP,最近的大型开放类游戏“原神”中也植入了一些音乐类小游戏,如设置音符按钮供用户弹奏。此外还有VR,虽然目前VR设备中的应用不多,但其中音乐相关的游戏占比较高且评分也相对较高。
2、AI音乐降低创作门槛
大家可以看到,一方面除了听歌之外的需求、交互及创作需求在增长,另一方面真正创作高质量音乐的门槛是很高的。那么如果存在一种方式能够降低门槛,让用户在前端就能简单操作从而生产音乐,是否能够产生一些潜在的新兴音乐相关的消费场景呢?
我们公司花费了几年时间来解决这个问题。首先最重要的是降低音乐创作门槛,也就是通过AI辅助音乐创作编辑使更多普通人懂得用音乐表达情感。有了支撑技术,就可以探索一些交互。同时我想和大家分享关于即兴反馈及如何满足沉浸式体验的心得。
深度学习方面,通过神经网络生成音乐的过程有两条路径:
符号音乐生成——识别或将旧的音频、旧的存量歌曲标注为音乐符号,就像五线谱一样,标注旋律、歌词、和弦等。用音乐符号生产新的音乐符号,再将其渲染为新的音频。如果完全通过AI全自动完成这条路径,那么左边是音乐信息提取,下面是符号音乐生成。右边是音频合成或音频渲染。符号音乐生成中有各式各样的音乐知识生成如歌词、旋律、歌声。
端到端生成——直接从旧的音频导出新的音频。最近在图片生成领域出现了DALL·E 2模型,在模型中输入文字如“宇航员吃香蕉”,会自动输出一张图片,图片中有宇航员、香蕉及其他宇宙的元素搭配。端到端生成的愿景类似,如随意输入一句话即可通过此路径生成一段能够描述话语的音乐。但在音乐创造行业,理想很丰满,现实还是很骨感的,目前我们还没有找到此类模型[注],原因会在下文进行阐述。
注:在演讲时的确是这么觉得的。不过,在演讲结束之后的这半年里,Diffusion类模型增长迅猛。我们预计在这个方面,业界是有可能出现一些端到端音乐生成的成果的。不过它不是非常影响后面的结论,即细粒度的控制仍然会是问题。
简单介绍一下旋律生成方面的简单模型。
用语言模型一键生成音乐旋律可以简单类比为让AI猜测:人类创作一半的音乐,下一个音符会写什么?比如图中这段音乐,完成了前面一段后盖住,让你猜下一个音会是什么。如果AI刚开始什么都不知道,那它肯定是随便猜,在我们公布答案之后再进行修正。所以每一条音频,每一个音符都可以这样出一道题。一条音频大概有几百个音符,几千首歌就有几百万的数据样本。在深度学习领域,这个数据样本虽然不大,但好在旋律在符号音乐领域的token数量非常少。do、re、mi、fa、sol、la、xi从低到高,人唱歌的普遍音域也就是三个八度共36个token。所以学习空间比较小,大概有5000首歌再加上合适的标注,就能得到这种效果。
这样一个demo听上去挺惊艳。它会很快地去生成这样一首音乐的旋律,乍一看好像我们作词作曲这个部分,至少旋律创作已经有了吧?但其实不然。
作为一个“demo”,这听起来很惊艳,但作为落地项目的话会发现两个非常严重的问题。如果我是一个新用户想使用工具生成音乐,那么我大概率不会选择一件全自动生成的作品,因为它不属于我,没有表达我的情感。也许我会生成一大堆音乐,再挑选我想要的,那么此时我会发现第一个生成得挺好听的,第20个也不错,第1千个、1万个也都还行,但它们听起来的味道却大同小异。
实际上当我们用神经网络模型直接这样操作时会遇到一个问题。由于所有神经网络本质都是概率统计,在进行统计分析时一定程度上抹平了不同音乐之间的差异性。而许多优秀的音乐艺术作品好就好在差异性。
第二个问题是我们与音乐制作人交流创作时经常发生的情况——描述音乐情感。许多情感并不是简单的语言模型能够掌控住的。比如今天失恋了,我需要一首悲伤的音乐。也许我们在语言模型中制作各种不同的情绪标签,把悲伤的标签当作全局条件输入,获得一条音频,似乎行得通。但此时用户可能提出更复杂的要求,比如希望悲伤能够含蓄一点、深邃一点、就像大海一样。音乐制作人肯定能够get到这层意境,但AI就麻烦了。如果用类似DALL·E 2的方式直接输入自然语言是否可行呢?经过尝试,我们发现这依然存在一条鸿沟。如果用文字生成图片,如输入“我手里拿着遥控器”,那么对于视觉模型来说这是非常明确的映射。但放在音乐上,输入“手里拿着遥控器”,让模型输出一段旋律,这并不是直接的映射关系。
实际上,音乐以情绪感受而非信息描述为主。如果直接用语言引导在神经网络上生成旋律比较困难。
总之,目前最大的问题是很难将一键生成的音乐创作成果直接落地。音乐创作应该是在用户主导下,通过不断交互完成的,但交互过程中涉及到的用户需求十分复杂。
为了解决这个问题,我们诉诸了人类知识库。音乐方面能供操作的数据集比较少,而音乐知识方面,从古典音乐至今已有几百年的积累发展了。音乐人通过大量的学习和实践,建立了情感和音乐知识之间的映射经验,如果能够获得这些经验,再通过某种方式指导写作,那么相较于普通人会更易懂得如何借助音乐表达自身情感。
目前的数据集不够,所以我们自研了软件进行标注,目前已有17000首的标注,这样能够解决部分问题。那标注的程度如何呢?
可以看到这是一个较高精度时间对齐的标注数据,包括了主要的音乐知识。有了音乐知识后能做的事情就变多了,比如和声,我们可以制作一个存量音乐知识的数字图书馆,进而建立情绪和音乐知识的映射关系。上文的都是和弦代号,没有多年乐理经验的同学看不懂,但没关系,我们可以从音乐知识中到答案,再把建立的映射关系录入系统。比如乐理概念中的“升四级半减七和弦”,在技术上来说就是#4、6、1、3四个音同时响起造成的声响范围。乐理书中还提到在流行音乐中这个和弦构成阻碍中止,带有停滞感,能够表达出悲惨的声音氛围。
那么,如何通过AI利用以上乐理知识呢?
我们在一万首歌中筛选出了大概500首含有“升四级半减七和弦的歌曲”。大家可以尝试去听一下,四级半减七和弦基本上表达的情绪是类似的,这就是乐理知识映射出的情绪。
之前在语言模型基础上,模型出什么概率分布,我们就用什么概率分布,如果在后处理没有任何要求就按照神经网络的方式进行,有要求就按照音乐情绪进行,最后输入系统迭代生成。那是否能够结合这两件事呢?
再以旋律为例。在和弦的宏观约束下,可以做一些旋律上的统计,统计不同和弦进行下旋律骨架的音高分布。图中横轴的数字15634125是和弦进行,俗称卡农进行,因为卡农这首古典音乐就是用这套和弦创作而来,有许多的流行音乐也通过这一套路生成。我们把旋律中较为重要的音叫做骨干音。纵轴下面是do,上面是xi。颜色越亮代表使用这一套路的歌曲越多,越黑代表越不希望把对应的音当作骨干音。可以发现在这样的一个合成套路中有非常明显的亮色线条,mi、re、do、xi、la、so、fa、re。实际上许多歌都是这样写的,比如前几年很洗脑的《学猫叫》中所有的音都在这里。
知道这件事后,再通过经典的核心套路就可以操作了。例如,用户想要耳熟能详、容易被接受的歌,那么就把歌曲的所有音落在这些亮线上;用户想要在某一个位置更加惊艳,那么就把对应位置的音落在暗线上,听起来会明显抓耳。
流行音乐中有各种各样的核心套路,当你用朴素贝叶斯或更复杂的模型时,将其做成统计概率模型,就可以在复杂的和弦上进行旋律的调配。我们用相对复杂的和弦进行测试,最高音的钢琴是全自动生成的,音符是通过上文提到的方式生成,其他部分是使用另一种编曲模型自动生成的。最后将两部分合并就得到了现在听到的音频。
上文介绍的内容主要是想表达,借助音乐理论结合数据建立情感与音乐知识的映射可以指导AI模型和算法的可控生成。能够更好地服务音乐生成算法的落地。有了以上工具后可以进一步进行交互方面的探索。
3、音乐创作交互方式的探索
在探索过程中我们重点考虑的指标如下:
1、自由程度:用户能够拥有质量多元化的操作路径。一键生成再好也不可能所有事情都一键生成,因为客户需要操作。
2、及时程度:用户的操作能够尽快反馈到听觉效果,避免按一下要等半个多小时的情况。
3、惊艳程度:用户进行不同操作时能够听到多元化并且差异较大的结果。
4、自然程度:在用户进行音乐交互时,不会明显的感觉到这是AI。我们希望用户把全部精力和注意力放在与音乐的交互中,而不会意识到这背后有一个强大的模型。
我们在不同场景下尝试了不同方案。如视频配乐中bgm的探索。
在K歌类场景,我们与全民K歌合作了“AI换曲风”功能。如用户可以将林俊杰的《江南》更换为古风、DJ、R&B、摇滚等风格。而且不仅是简单的片段,在中间的转场也进行了特别的设计,这是由标签引导的。此外,有的音乐发烧友希望能够自己控制乐器。
有了AI操作,就可以解放音乐人。音乐人写的好几百条音乐,现在能够通过AI一次生成。只要标注音乐,加入不同乐器立即就丰满了起来。这种方式也适用于轨道的调控。
那么是否能够再进一步?使用户输入旋律成为可能。
流程看似简单有趣,但其中涉及到许多AI工作。用户哼唱结束后需要将旋律转变为符号,这是音乐信息提取工作;转变为音高符号后继续进行乐理分析及旋律骨架识别;得出骨架后,利用多种算法匹配和弦;最后通过自动编曲模型用多种编曲形式形成交互剧本。
未来我们会尝试更多不同的需求。
4、音乐创作交互的即兴反馈
不论做什么,我们都绕不过去两件事情。
第一件事情是音乐创作中的即兴反馈。所有的计算都需要时间,尤其是AI模型。假设横轴是时间轴,虚线时用户进行了一次操作,想要更加劲爆一点的音乐。一般情况下是用户操作完成之后,开始计算。计算时音乐会暂停,等计算好之后才会反馈。这样带给用户的体验很不好,中间需要等待很长时间。如果把计算时间缩短,在100、200ms左右或者更低时,可以算作即时反馈。但是这里有一个难以解决的问题。音乐本身有节奏,会像一把尺子一样衡量时间。即便是100ms的延迟,也会明显感觉到这里的卡顿。所以单纯缩短计算时间不是最优解。还有一种想法是在计算时继续播放,播放到一定时间点时,在合适的位置切断。这样带来的问题是过于生硬。
那么即兴反馈到底是什么呢?音乐播放时,用户进行一定的操作,接下来计算的,不仅仅是接下来要播放什么,而是接下来一段时间应该用什么样子的演奏方式使得它无缝衔接到你想要的状态。音乐播放本身就是一个耗时的过程,如果计算时间小于聆听所需要的时间,即兴就可以做到。即兴也意味着不再提前准备很多音频播放,而是边渲染边播放。
这就牵涉到前端的渲染过程。首先看一下音频引擎。以手机为例。手机有一个扬声器,其背后有一个叫做音频线程的东西。这个音频线程一般是操作系统里最高优先级的一个线程。它会把音频分割成很小的切片,例如256个采样点。在48000的采样率下,大概一个切片的时间长度是5.3ms。之后将切片循环加入音频,实现队列播放。任何一个音频文件,都会被切成很小的片段。音频线程将切片移交给扬声器,再通过回调函数获取新的256采样点的切片。如果不从内存里直接给扬声器切片,而是通过快速计算持续生成音频切片,就可以实现实时播放。
在回调函数里,放入图中所示的连接图,连接图可以模拟类似混音台的功能。左边类似虚拟乐队的乐手们,每一个都会接受控制信号。之后就会在连接方块里进行DSP数字信号处理的算法。最后再进行一些加工输出音频。播放完成之后,再经过5.3ms,会有新的一轮回调,重复上面的步骤即可。
虽然看上去很简单,但是每一个方块里面都是他自己数字音乐信号的结果,融合起来虽然很及时,但风险也是并存的。每5.3ms要消耗256个采样点,这意味着每256个采样点计算的时间都必须小于5.3ms。虽然增加缓冲可以降低要求,但是增加缓冲意味着延迟增加。想要尽量降低延迟,计算负载就不能太高。
下一个需要解决的问题是如何让多个乐器可以同步播放。其实只需要给每个乐器一个相同的播放头就可以了。我们会设置两个播放头,红色的叫做计算播放头,黄色的叫做渲染播放头。红色的部分会先运行,稍早于实际时间。计算播放头会动用一些AI算法,将中间生成的结果变成一个一个音频控制信号放在缓冲区中。当黄色渲染播放头刷过去时,会经过这些缓冲区的信号,全部发到相应的轨道上,就可以同步处理了。而且得益于提前一点的计算,不用过分担心高负载。
5、音乐驱动的音画同步
除了不同乐器不同轨之间的同步,还有一个同步也很重要――音画同步。假设有一个小人在跳舞,舞蹈也得踩点,跟上音乐的节拍,这时程序就不止要在音频线程内做同步了。
这里存在一个让开发者头疼的问题,视觉和音频内容如何同步进行?同步问题是一个比较庞大的问题,其需求、场景、外部环境都不相同,大体可分为如下几类:
数据锚定。在K歌软件中,要使歌曲与歌词同步,其实都是静态资源,什么时候该出什么,本质是锚定的,只需将数据提前安排好即可。
动态触发。在可交互场景中如射击游戏,需要根据用户事件同步出发视觉和听觉的资源。用户点击鼠标开枪,枪声响起的听觉和敌人倒下的视觉之间的同步,这是动态触发的过程。不过此过程对延迟要求没有特别高,只要保持在50ms内,用户就不会有明显的感知。在对时间不敏感的场景(如回合制游戏)中,即便点击鼠标后200ms内出现声音造成的音画不同步都是可以接受的,不会引起严重问题。
第三种情况就比较危险了,用户在一段正在播放的音乐中实时进行了一些操作,希望实时演算的音乐和舞蹈能够卡在节拍上。此时的主要麻烦在于时间由音乐主导。像上文提到的,音乐是时间的尺子,速度稳定。如果有个鼓点动次打次,到打节拍时差20ms就会开始被人察觉、令人不适。所以这里存在高精度的要求。
那么音画不同步的情况如何发生呢?音频和视觉是在不同线程中实时渲染完成的,有各自的时钟,时钟不同步时就会出现问题。计算过程中有时负载高,有的位置卡顿一下会造成两边不同步。有了计算和渲染两个播放头再加上计划表后可以较好的解决这个问题。在播放音乐时只需控制好渲染播放头,并且让动画的所有控制信号从计划表中发出,那么视觉上的每一帧的控制信号并不在自己的线程中计算,在音频线程中计算即可。一方面,播放头由音乐主导,消费由视觉处理。能够做到严格同步。另一方面,切换到没有音乐的场景时,把音效的播放头变成图像主导,事件消费的时间点由图像的线程控制。
6、未来展望
最后介绍一下我对未来的一些看法。我认为在音乐创作方面,创作和消费的界限在慢慢溶解。几十年前,想要录一首歌,需要花真金白银进录音棚,得到一个录音带。现在几乎都是软件,我想录多少就录多少,都是存储的信号而已。如果知识的门槛可以再降一点,就意味着普通人也可以进行创作了。这个时候音乐制作可能就不再局限于小众创作、大众消费的固有模式,每个人都可以创作,每个人都可以欣赏别人。那么消费者和生产者之间的界限就会开始模糊。
此外,我认为交互体验会慢慢变得沉浸化和多元化。现在的音乐人只需要关心怎么做好音乐就足够了。但是未来,随着VR、元宇宙概念的不断深入,视觉体验也会开始寻求音乐上面的多感官参与。这样的世界正在逐步形成,我希望我们可以在这样的世界中,担当起一份责任。
0