这篇博文是关于65daysofstatic的《Wreckage Systems》(残骸系统)。《Wreckage Systems》是一个无限音乐直播作品。你可以在这里观看,也可以在这里听纯音频版本。它并不是一个游戏,尽管它是在Unity中建立的,且所有的音频都在Wwise中运行。实际上它部分是一个准学术研究项目,部分是“一个突然无法巡演的乐队所制定的针对大流行病的应急计划”。它是一个顽固的乌托邦式的尝试,试图找到新的方式来写和表现音乐,也是一个借口,来制造很多不一定有机会进入65daysofstatic更传统产出的噪音创作尝试。我将在下面进入它的Wwise内核,但首先要介绍一下它的背景,即为什么它存在。
背景
早在2014年,我的乐队65daysofstatic被要求为《No Man's Sky》创作原声音乐。这意味着不仅要写一张充满线性、歌曲形式的常规配乐专辑,还要构建一个无限长的、动态的配乐,以配合Hello Games所创造的无限大的、程序生成的宇宙。
我们是作曲家,但创建 《No Man's Sky》音频框架的重任是由音频总监(可能是魔法师)保罗-威尔负责的,所以关于这些无限的声景如何在游戏中实际建立的技术细节并不是我们真正要讲述的。然而,作为一个乐队,我们渴望充分利用配乐的生成性,因此我们投入到互动音乐技术的速成课程中,并匆匆忙忙地深入参与到这个过程中。我们带着关于制作非线性音乐的无数想法和对音乐的基本性质的新的存在性担忧来到了另一边。
大约在同一时间,偶然的是,我正在攻读博士学位,探索流行音乐背景下的算法作曲策略(就是关于你”如何可以将这些策略应用于像我这样的嘈杂的现场乐队“的研究)这种将游戏音乐开发和实验性算法音乐研究应用于65daysofstatic的事件在几年内持续平行发生,并开辟了许多我一直渴望探索的未开发的领域。
尽管我的整个成年生活都在使用电脑制作音乐,但在这一切结束时,我对任何可以被普遍描述为算法驱动的、程序性的或生成性的音乐技术应用于创作的说法都产生了深刻的批判,甚至经常持怀疑的态度。不是因为我不认为计算机能够自主地制造有趣的声音结构,而是因为——对我来说,扬声器发出的实际声音只是音乐的一小部分。你可以给计算机所有的基于机器学习、神经网络的超人工智能,但你永远无法给它意图——你永远无法给它一颗破碎的心、过剩的浪漫,它永远不会理解在一个狭小的房间里和它的朋友们一起制造混乱的噪音,或者在重复的节拍下整夜跳舞的快乐。
然后,就有了《Wreckage Systems》。这是一个持续进行的项目,我们在互联网上无休止地播放不断变化的音乐,试图解决这种辩证关系:"计算机永远不可能真正理解嵌入到音乐中的意义是什么;应该是我们使用计算机自主地制造有意义的音乐"。
《Wreckage Systems》是一个对当代艺术家被不合理地要求去折腾无限音乐内容的艺术化表达吗?或许,但它还是一个看看在自动音乐失去所有意义之前,音乐家们能把它推到什么程度的尝试,也是一个由Wwise驱动的Unity项目来完成的由大量的算法撞击声、悲伤的钢琴声、突兀的霹雳声、自由爵士乐循环、田野录音、程序化合成器旋律以及一大堆其他生成性音乐系统组成的集合体。
如果你对进一步解释《Wreckage Systems》背后的哲学和艺术思想的博客文章,以及对我们使用的个别作曲技术进行的更详细的分解感兴趣,那么请看看我们的Wreckage Systems Patreon,这是我们选择的维持这个奇怪的音乐实验的方式。若您想要预览,这里有一篇解锁了的文章,讨论了更多关于我们在《No Man's Sky》上的经验。如果你喜欢乌托邦式的马克思主义,那么这里有一篇与项目有关的历史唯物主义的大胆运用。而本文接下来的其余部分将具体考察Wwise项目,为您揭示该项目如何驱动存在于《Wreckage Systems》广播中的65个不同的自主音乐系统。
整体结构
在直播中总共存在65个不同的 "Wreckage System"。每个系统在Wwise中都有自己的一套声音和行为,并经常在Unity中借助自定义脚本对行为进行延展。因为《Wreckage Systems》不是一个游戏,也因为它只是以音视频流的形式向公众提供,而不是以软件的形式,所以我们可以围绕音频输出设计一切,而不需要考虑磁盘空间、DSP线程、发声数、音频质量等等限制。它不需要成为任何传统意义上的交付的产品。
为此,或多或少每个Wreckage Systems在Wwise中都有自己的SoundBank,其中充满了所需的高质量音频。还有一个额外的SoundBank,一直在加载一般的背景隆隆声(Drone)、静态嘶嘶声和偶尔的UI音效。
直播流中的广播循环就像一系列的无线电传输,从静止状态中出来,然后又落回静止状态中。当一个新的系统上线时,它加载SoundBank,开始运行,并从静态中交叉淡化到系统正在制作的音乐中。当系统接近尾声时,它又回到静态,卸载已完成的系统的SoundBank,并重复这个循环。系统很少坚持超过7-8分钟,所以如果你看广播至少有这么长的时间,并跟随日志的内容,你应该能够注意到这个动作。(哦对,它偶尔也会黑掉自己……)。
Wreckage System的类型
65个不同的系统中的每一个都基于一个概念,我们称之为 "constellation heart"(凝聚之心)。这里有一个来自我们Patreon的简短视频,以非技术性的方式解释了这个概念。
(国内观赏视频通道)
基本上,我们在这个视频中想说的是,在可能的情况下,我们没有让我们建立的主要音频框架限制任何特定系统的主要音乐理念。每个系统的 "constellation heart"是系统音乐想法的核心,是使该特定系统独特的东西,也是我们需要不惜一切代价保护的东西,以阻止该项目成为一个包含65种不同口味的平庸的生成性声景的系统。有时,一个系统的 "constellation heart" 就像一组特定的独特样本一样简单。有时,这个系统可能耗费了几天或几周的时间去构建,因为它充满了互动音乐的Music Switch Container 与 Playlist Container,还具有定制的Stinger和Transition,无法与任何其他系统通用。通常,这意味着Unity中还包含了一套额外的自定义脚本,不仅仅是启动或停止Wwise事件,而是会扩展系统的行为——也许是通过生成MIDI音型,也许是利用事件上的各种回调命令来实时创造音乐。尽管我们尽力确保每个"constellation heart"的想法的独特,但仍有必要在一定程度上概括所有系统的运作方式。
因此,在所有系统的顶层是一个非常通用的游戏同步状态。这有七个通用状态。
- Beginning
- State_00
- State_01
- State_02
- State_03
- State_04
- Ending
一个系统可以选择忽略这些状态,把相同的东西分配给所有的状态,但是每个系统都从它的起始状态开始,在它的结束状态结束。如果系统正在使用不同的状态,那么它可以选择通过使用该系统特有的自定义sequencer在它们之间移动,或者使用一个通用的sequencer,在系统决定运行多长时间的过程中随机切换它们。
除了这个顶层的机制之外,Wwise中的系统实际的样子,可被以如下方式划分:
ACTOR-MIXER 系统
比较简单的系统是那些倾向于听起来更氛围化或声景化的系统。这种音乐往往是在Actor-Mixer Hierarchy结构中使用Random Container和Blend Container的配合来生成的。(在听了太多年糟糕的算法音乐之后,我坚信只要核心旋律或声音足够有趣,用极其简单的随机化方式反而可以走得更远)
Wwise也很适合将简单的随机化进行分层,从而造更复杂的变化。例如,这里有一个叫做Unravelling的系统:
在上图左侧,你可以看到它是如何被构建的——所有的东西都存在于一个单一的Blend Container中,当系统启动时就会被触发(子Blend Container是歌曲的不同部分)。截图中突出显示的容器'Busy',只有在'State_01'处于激活状态期间才能听到。在Unravelling这个例子中,其他容器代表对应其他状态。别的系统可能具有对应多个状态的容器,或者具有多个容器同时混合的状态。
仔细看看我们创造变化的方法,展开'DulcimerPhrases'容器可了解它如何工作。核心是一个随机容器,它从一个都在同一音阶内的扬琴音符样本池中播放一个音符样本。它的父类是一个序列容器,循环6次,Max Offset为2,Crossfade Duration为0.5,Min Offset为-0.2。它的父容器是DulcimerPhrases容器,每8秒触发一次,最大偏移量为8。 这一切加起来就是,每8-16秒一次,它将播放一个6-8个扬琴音符的短音型,在时间上有一点变化,使它听起来更人性化。
正如你所看到的,这个容器与Blend Container中的其他容器放在一起,这个Blend Container是系统的一个特定状态。其他状态有不同的采样,不同的层次结构,不同的工作方式。有些包含循环,有些是单独的打击乐样本,以固定的速度重复...... 这种可能性基本上是无穷无尽的。
相对的,这里有一个简单一些的系统,叫Papour。
这个系统不使用状态。它有三个随机容器,每个容器都充满了类似的36个样本。每个容器都有不同数量的低通滤波器,以7到20秒间不同的Trigger rate触发,中间的容器被调低一个八度。采样本身是长长的、类似Blade Runner配乐中的合成器的音符,我们在65HQ录制,使其充满了粗糙感和混响,为其赋予了现场调节的滤波器扫频变化。将这一切都送入Wwise中的另一个巨大的混响总线,你就瞬间得到了一个科幻声景!
其他的Actor-Mixer系统,例如Mist_Crackle,在音频内容和复杂性方面也同样精简,但使用方式不同,在Wwise中作为采样乐器存在。
有些乐器是用许多样本在整个范围内进行映射的(比如被多个系统使用的主钢琴)。其他的,比如上图中的 "CrackleToneSynth",则是比较精简的。这个系统只用了三个采样的音符映射到整个音域,并通过一些漂亮的混响进行处理。
对于这样的系统,与其使用Unity中的通用Sequencer来循环播放状态,不如使用自定义脚本,以这样或那样的方式创建音乐模式,然后将它们作为MIDI音符发送到Wwise。Mist_Crackle是一个环境声景,精确的节奏既不重要也不需要,它在Unity中使用一个coroutine loop,从可能的MIDI音符库中提取,并通过一些简单的随机化创造出一个由缓慢的氛围旋律和较低音区的和弦进行组成的声景。
INTERACTIVE MUSIC 系统
其他系统使用了Wwise中比较常见的互动音乐实现方法,利用了Horizontal Sequencing和Vertical Remixing技术。我不会在这里说得太详细,因为对于Wwise的用户来说,这可能是创作互动音乐最常见的使用情况。下面是一个基于Interactive Music Hierarchy的系统的例子:
这个系统,Available Data,基于一首线性的、具体的歌曲,是作为Wreckage系统研究的一部分而写的。预先 录制的版本是一首12分钟的节奏、合成器、吉他和噪音构成的庞然大物。(如果你想听的话,可以在这里收听) 它的残骸系统相当于被设计成同样长、同样凶猛的主题变体,每次出现时都是这样。上面的截图显示了其结构。所有东西都住在一个开关容器里,各种播放列表充满了不同的轨道和子轨道。另外这个系统具有很多自定义的Stinger和Transition,且在Unity侧有一个自定义的音序器,使用加权概率在各状态中移动。这需要大量的平衡,但结果是Available Data的每一次迭代都能够可靠地播放头尾及两部分间的松散骨架(像原本一样),且每次都会触发新的段落、循环和变化。
组合系统
另有很多系统是以混合Actor-Mixer系统及Interactive Music系统的形式存在的。
Malign系统是为那些“你是一个沮丧的赛博朋克侦探,在某种昏暗的电子酒吧里喝掉你的悲伤”的时刻提供的末日爵士乐配乐。它基于一个非常简单的、刻意重复的循环,在一个互动音乐播放列表容器中运行。最重要的是,Unity通过回调来触发这个循环。然后,它使用这些回调来跟踪每个新的循环的开始,在每个循环的开始,它决定是否要在电钢琴上做一个小的旋律模式,或吉他,或两者都不是。
如果它决定演奏吉他,那么它就通过Wwise事件触发随机容器,从大量的样本集合中触发一个乐句。如果它决定弹奏电钢琴,它就会使用一些自定义代码,使用MIDI音符编号创建一个新的旋律模式,然后通过调度MIDI音符并将其发布到指向采样的电子钢琴乐器的Wwise事件中,在随后的循环中播放它。
由于Unity浮动的帧率,以这种方式运用回调会面临一些微小的节奏波动,但在像Malign这样的系统背景下,微小的时间上的不稳定却会有助于使旋律人性化。(我们还运用这种技术进行过一些实验——用回调的方式产生快速的breakbeat段落,结果就相对不太成功了)。
结论
本文中这些例子粗略地勾勒出了大部分系统的构建方式,但它所希望的是展现出这个项目的意义——在”某种可通用的、可扩展的框架“和”允许在每个系统的基础上整合自定义行为的系统“之间找到一个平衡。作为一个乐队,《Wreckage Systems》向我们展示的是(这纯粹是一个主观的观点)——在这个一切都自动化的时代,当涉及到制作有意义的艺术时,选择更曲折的方式并动用蛮力变得越来越重要。通过各种手段--使用计算机来寻找、建立和使用工具来帮助你穿越所有那些痛苦的平庸,这样你就可以更快地找到你潜意识中的钻石。但在这个过程中,无情地编辑和摒弃那些不够好的东西,这就是创作。而所有这些规划,这些意向性,就是"constellation heart"。它是永远无法被概括的。
评论