今天看到一篇简中文章. 描述了AI即兴演奏的可能性. 大概看下来, 似乎作者承认即兴还有困难, 不过只是资源上的限制. 资源够了, 完全可以和人一样玩即兴. 人玩机型的时候因为有主题和情绪, 所以实际上对人脑的算力要求小得多, 但是时间长了, 脑子会断篇. 很难超过10分钟而不乱. 机器却没有这个限制.
我虽不是专业, 但是大概理解的AI即兴流程, 涉及到缓冲, 实际上人即兴也是一样的. 这么看来, AI能力的边界其实不是AI算法和玩法, 应该是肉人本身的极限.
换句话说, 肉人能做的, 只要将肉人的行为模式分析清楚了, 告诉机器, 机器完全可以从方法论上模拟人的几乎一切行为.
这么看来, AI意识也不是不可能, 一旦人搞清楚了自己的意识真相, 秘密就回被AI攫取, 进而模拟出类人的意识. 这有点瘆人了. 人最好不要继续研究意识了.
看完这篇, 感觉凉透了, 以为人在现场即兴演出中还有优势, 乐手们还有饭碗, 现在看, 不一定了. 搞个机器人壳子, 然后AI音乐给足了算力, 完全可以娱乐喝醉了的肉身们…
不论做什么,我们都绕不过去两件事情。
第一件事情是音乐创作中的即兴反馈。所有的计算都需要时间,尤其是AI模型。假设横轴是时间轴,虚线时用户进行了一次操作,想要更加劲爆一点的音乐。一般情况下是用户操作完成之后,开始计算。计算时音乐会暂停,等计算好之后才会反馈。这样带给用户的体验很不好,中间需要等待很长时间。如果把计算时间缩短,在100、200ms左右或者更低时,可以算作即时反馈。但是这里有一个难以解决的问题。音乐本身有节奏,会像一把尺子一样衡量时间。即便是100ms的延迟,也会明显感觉到这里的卡顿。所以单纯缩短计算时间不是最优解。还有一种想法是在计算时继续播放,播放到一定时间点时,在合适的位置切断。这样带来的问题是过于生硬。
那么即兴反馈到底是什么呢?音乐播放时,用户进行一定的操作,接下来计算的,不仅仅是接下来要播放什么,而是接下来一段时间应该用什么样子的演奏方式使得它无缝衔接到你想要的状态。音乐播放本身就是一个耗时的过程,如果计算时间小于聆听所需要的时间,即兴就可以做到。即兴也意味着不再提前准备很多音频播放,而是边渲染边播放。
这就牵涉到前端的渲染过程。首先看一下音频引擎。以手机为例。手机有一个扬声器,其背后有一个叫做音频线程的东西。这个音频线程一般是操作系统里最高优先级的一个线程。它会把音频分割成很小的切片,例如256个采样点。在48000的采样率下,大概一个切片的时间长度是5.3ms。之后将切片循环加入音频,实现队列播放。任何一个音频文件,都会被切成很小的片段。音频线程将切片移交给扬声器,再通过回调函数获取新的256采样点的切片。如果不从内存里直接给扬声器切片,而是通过快速计算持续生成音频切片,就可以实现实时播放。
在回调函数里,放入图中所示的连接图,连接图可以模拟类似混音台的功能。左边类似虚拟乐队的乐手们,每一个都会接受控制信号。之后就会在连接方块里进行DSP数字信号处理的算法。最后再进行一些加工输出音频。播放完成之后,再经过5.3ms,会有新的一轮回调,重复上面的步骤即可。
虽然看上去很简单,但是每一个方块里面都是他自己数字音乐信号的结果,融合起来虽然很及时,但风险也是并存的。每5.3ms要消耗256个采样点,这意味着每256个采样点计算的时间都必须小于5.3ms。虽然增加缓冲可以降低要求,但是增加缓冲意味着延迟增加。想要尽量降低延迟,计算负载就不能太高。
下一个需要解决的问题是如何让多个乐器可以同步播放。其实只需要给每个乐器一个相同的播放头就可以了。我们会设置两个播放头,红色的叫做计算播放头,黄色的叫做渲染播放头。红色的部分会先运行,稍早于实际时间。计算播放头会动用一些AI算法,将中间生成的结果变成一个一个音频控制信号放在缓冲区中。当黄色渲染播放头刷过去时,会经过这些缓冲区的信号,全部发到相应的轨道上,就可以同步处理了。而且得益于提前一点的计算,不用过分担心高负载。