(我的)程序生成的音乐很糟糕

2020-12-07 07:30:07

-Voxel,列出关于音乐生成的具体事实,以及具体针对我的音乐生成器的事实

我希望在groolet32.exe中,美术资产能够随着音乐及时摆动和跳跃。

购买,委托或编写音乐,将音乐整体转录到执行环境中,然后使用本地可用的音乐生成工具(JavaScript中的Tone.js,Unity中的Helm或wwise)播放音乐

购买,委托或编写音乐,将书面音乐中的重要时刻转录为软件语言,使乐器的点击触发效果。

购买,委托或编写音乐,使用自动分析(Unity中的Koreographer)来猜测音乐中何时发生动态变化,并使用它们来触发效果。

购买,调试或编写音乐,将音乐输出为midi,并在使用midi引擎驱动效果时播放音乐。

每种策略都有其起伏。值得注意的是,前四个策略从听起来简单但施加“购买,委托或写音乐”开始。购买音乐-好吧,很难围绕股票音乐构建完整的游戏-尤其是在音乐对于音乐机器人的游戏来说至关重要的情况下,尤其如此。

如果我打算公平地支付作曲家的钱,调试音乐实在太昂贵了(如果我有钱的话,我就应该这样)。

独自编写音乐将意味着我个人的音乐制作技能将大大提高,因为目前我的工作水平接近“三盲小鼠”。我的许多家庭成员在音乐上都很有才华-我的弟弟嫁给了一个“音乐老师”家庭-但我认为他们中的任何一个都没有破解过DAW,他们非常忙于自己的生活,所以很难撼动,希望电子游戏准备就绪的音乐会掉下来。

这样就剩下了程序生成的音乐。认为我什至不能写一首正规的歌,可以构建一台可以为我写音乐的计算机,但天真,但是-如果我擅长任何事情¹,那就是编程。

tl; dr“我们构建了一个名为Magenta.js的工具,可让您对某些曲调进行张量处理”

带着一些热忱着手完成任务,我设法让Magenta.js慢慢生成了音乐。对于如何将缓慢生成的8秒乐曲转换为更长的歌曲,我有一个简单的计划:

使用一些基本的试探法来猜测片段的关键特征(“ C#大调”),评估它们的强度(很多鼓声或音符负荷)并将其保存在庞大的片段数据库中。

将两个或三个剪辑编织在一起,重复几次,以制作完整的“歌曲”。

添加工具以控制所需的键签名,强度,并在最后一秒钟更改乐器,速度和所拥有的功能。

取得输出并使其听起来像人们会故意听的真实人类音乐。

现在,该方案存在一些确定的问题。其中之一就是Tone.js,这是一个功能强大的合成器工作台,是为阅读过整本书有关数字信号处理的人们而不是其他人而编写的。

实际上,大约12年前,我参加并通过了DSP生成音乐的高级课程。与普通人相比,我没有什么借口绝对不要在将振荡器附加到事物上浪费时间。请注意,我还是很垃圾,我没有什么借口。

这是系统产生的第一首可远程传递的歌曲。是的...好吧?不错。那是一年前的系统。

诚然,我整年都没有从事过procgen引擎的工作,但是在过渡期间它并没有发展太多,对吧?我认为我可以通过简单的启发式规则,调整和修饰来调整输出的音乐性,但是-我不能。一个非常有才华的音乐家/制作人也许可以,但是正如我们已经确定的那样,我发现C的能力比内陆萨斯喀彻温省的咸海盗要差。

我的大多数巧妙更改都会使输出听起来更好……有时。更糟糕的是,有时候。有时,很少会出现这种系统产生的东西,如果您没有引起很大的关注,您可能会对真实的音乐感到困惑。很多时候,它会产生平淡无奇的声音。大约它经常产生一些使人不愉快的东西。

我曾经想过的一个想法是构建一个潜在的投票系统,以尝试清除系统中的“不良”音调-如果我的音乐生成系统实际上由一千个剪辑组成,在大多数情况下听起来都不错,因为所有这些听起来不好的声音已经被淘汰了,那是做事的一种方式。

但是即使达到最佳状态,输出也不是……非常好。

问题的很大一部分就是作曲很难。如果您采用可以想到的最简单的音乐风格,网上有人会痛苦地解释Fart Chalice IV的配乐实际上是利用了比音五音阶和后现代的音调在四分之一到十六分音符之间造成人为的不和谐。爵士乐风格的交替变化。我几乎听不到音乐。我无法应付!

涉及音乐时听起来不错的方法没有一套简单的规则-人与人之间的差异太大。有数十套相互冲突的规则,并且由于有很多方法可以打破这些规则而仍然使音乐听起来听起来不错(或遵循规则并且仍然让音乐听起来听起来很糟糕),所以很多音乐理论都不是如此之多的“有用的指导原则”,因为它是“无穷的分类法”,并且大多数分类法在过去500年中都是由德国人和意大利人编写的。

我喜欢这本书。我从头到尾阅读了不止一次。即使是关于音乐生成的一章,作者也巧妙地选择了一个方案,他们选择了一个五声调的音阶,使所有声音听起来都很好,然后几乎随机地摆弄。 (许多程序生成/输入驱动的音乐都使用类似的技术)。

它充满了涉及图形和规则引擎的好主意,还有很多让我兴奋的东西。其中一位撰稿人多次使用“格式塔”一词。

这本书的很大一部分只是在讨论何时使用过程生成。

我将这本书的答案概括为“如果您正在阅读本书,那将比您想像的要少”。

例如,这可能是一个很大的承诺,除非它们的含义只是乌云密布

生成内容的好处是显而易见的。无限的内容-甚至无限的乏味内容,仍然是无限的。这就是为什么人们仍然去自助餐厅的原因-无限的劣质食物还是很有吸引力的。

如果过分地限制输出空间,您的procgen输出将感觉平淡无奇。当我使用太多的音乐理论规则来限制音乐生成器的输出时,它只能生成类似6首不同的歌曲,它们听起来都非常平淡而相似。

如果您对输出空间的限制不够大,那么您的输出将感到无形和不公平。当我关闭音乐理论规则时,垃圾输出的数量已失控。

为了产生有意义的程序生成输出,您必须非常了解问题空间,并努力制定智能规则。

或者,直率地说,“不要尝试以程序方式生成您尚未创建的东西,虚拟的”。

如果我在发生器上玩了足够长的时间,就会碰到几乎听不到的可听音乐的小片段,但是大多数情况下,输出的声音更像是无形的糊糊:

更糟糕的是,经过长时间的聆听,我设法说服自己,也许我手上确实有一些好东西-通常这需要为Voxel演奏,他知道应该听什么音乐-或我自己听一些实际的人类产生的音乐,以提醒我,我连续几个小时都听着无所事事的混乱,它开始使我的大脑陷入水坑。

是的-可能不是永久的,但有时重要的是要知道什么时候扔毛巾。我认为该项目的这一部分已经失败了,并且已经到了需要付出更多努力才能减少收益的地步。

我想我要从清单中尝试一项新计划-“购买,委托或编写音乐,将音乐输出为midi,在使用midi数据静默驱动效果的同时播放音乐”。我可能会写一些基本的鼓循环,让“ FruityLoops”教程陷入困境,让该项目起步,然后找一个有能力创作音乐的人,如果我觉得该项目快要结束的话实际运送距离。

无论如何,Groovelet音乐引擎,您有最后的机会发光。开玩笑吧!最好带点悲伤的东西。