Blender中的Python音乐封面生成器

在本文中,我将讨论搅拌机的附件,促使我创建搅拌机的原因,开发过程以及YouTube上的“成功”。




背景知识


一切始于大约一年前(2018年11月),我在YouTube的优惠中看到《终极佳能》如此不寻常的封面

这个家伙记录了歌曲中每个音符的样本,并通过艰苦的编辑,从中整理出整首歌曲。 对谁来说,但我认为这至少很有趣。 观看次数(当时略高于1,000,000)表明该主题( 1%的吉他技巧,99%的编辑技巧 )很受欢迎。

我敢肯定,那些至少参与混音的人知道,有时候稍微切开和移动音轨比让粗心的吉他手重播声乐要容易一些。 我也曾经制作过经典的封面,即使到那时,我仍然想像视频中的那个家伙一样爬行并创建封面。 现在,我看到“我的想法被无耻地偷走了”,并且精疲力尽。 我很讨厌火车离开了,但突然间我意识到我可以做同样的事情,但是在不同的层面上,增加了一个新的步骤-1%吉他1%编辑98%编程技能

此外,这将使您可以创建更加复杂的作品,通过手动编辑,很少有人会有耐心。

发展历程


因此,任务是自动化将声音样本切成乐曲的过程。

首先,必须以某种方式将有关乐曲,其音符,音轨,乐器的数据传达给未来的程序。 我立即想到了GuitarPro及其数据导出选项:MusicXML和MIDI。

搜索使我选择了Python 音乐21上的midi文件解析器。 这不仅是一个解析器,而且除此之外,我不需要模块中的任何东西。 这些类似物要么具有可怕的文档,要么无法像音乐一样轻松地实现我所需要的。

太好了,现在我可以从Midi文件中获取有关音轨,音符,位置和持续时间的数据。 我们走得更远。

现在,基于此数据,您需要剪切视频/音频文件。 然后我选择了足够快的速度。 绝对是Blender,尽管它作为视频编辑器的功能不强。 我有使用Adobe PremierePro,After Effects的经验,但是有我自己的脚本方言,该方言在其他任何地方都没有用,并且它的功能对我来说是未知的。 在Blender中,几乎所有操作都可以通过Python脚本执行。 并且已经与音乐的语言相匹配21。 值得解释的是,那时我对Python一点都不熟悉,因此我也认为该项目是结识这种流行语言的绝佳机会。 宾果!

渐渐地,我开始深入研究该语言,通过music21将midi文件注释输出到控制台,迅速研究了如何为搅拌器添加附件,并进行了第一个实际任务:生成样本数据。 他在吉他上记录了每个独特的音符并开始切割,但很快就停止了。 我的内部程序员对这项艰巨的工作提出了抗议(每种乐器可能有很多注释:30-50)。 而且,这将必须剪切笔记并将其分别渲染到单独的文件中,然后将每个轨道笔记的长度调整到时间线的开头...通常,此过程必须简化。

解决的办法是在Blender中使用这种东西作为标记。 这些本质上是带有可在特定框架上设置的文本信息的点。 逻辑是这样的:用户安排他的视频和音频(如果音频记录在单独的轨道上),将它们彼此驱动,并用标记在视频中每个音符的开头标记,在标记文本中指出该音符是什么类型(A#,D,C和等)及其记录的最大持续时间。 然后,有关标记的信息将记录在文件中,并且在剪切单个音符时已被使用。



下一点是功能的实际“核心”-剪切笔记及其在时间轴上的位置。 具有讽刺意味的是,没有什么特别的要说:有很多阅读文档,Blender的文档远非总是那么详尽,但是逐渐地,我实现了我想要的。 当我看到(听到)第一个结果(这是Epidemic-Frodo小组的简短组成)时,幸福无止境。 我想每个人都知道什么终于出现时的感觉。



代码质量很差。 我试图赶时间,因为 我以为我不是唯一想到这种事情的人,也不想在这里领先我(剧透!我多么天真)。 因此,没有时间坚持风格并反思结构,我试图更快地获得一个可行的原型。

细微差别


现在介绍实施的细微差别。 Blender的编辑器层数上限为32,该图显示音频和视频样本(绿色和紫色)​​各占14层,并以升序排列,然后在其扇区的开头。 这是由于Blender不允许您在另一个样本之上生成样本这一事实。 在音乐中,下一个音符经常在上一个声音结束之前开始。 因此,为了避免重叠,我决定在高于上一个音符的一层上产生下一个音符,并且当扇区的各层结束时,请从第一层重新开始(第一个音符听起来最多可能向前14层)。 是的,这可以通过节省层数来实现,但我如前所述,我很着急。

最细心的人可能会注意到整个扇区是2乘14层,即28层,在Blender中的最大值是32层。事实是,对于生成笔记,您必须通过脚本生成2条原始轨道(视频和音频),然后将其剪切掉注意。 而且您无法在其他轨道上生成,因此我为此业务保留了第31层和第32层。 29号和30号用于中间存储已生成的音轨:生成发生在midi文件的一个音轨下,然后将音符分组为一个音轨,传输到29/30层,我们生成下一个音轨,依此类推。

还有一个细微差别:在midi乐谱中,有回放速度之类的属性。 它可以在合成内部多次更改。 在music21中,我从未发现有机会追踪这些速度变化。 因此,生成音符的速度将与midi文件中指定的第一速度一致。 有两种解决方案:

  1. 对于具有新速度的每个部分,仅使用它创建一个新的midi文件;
  2. 使用“速度”速度修改器(初始速度的倍增因子)再次生成小节注释。



我更喜欢在GuitarPro中为每种速度添加我自己的音轨,然后在Blender中,仅用速度修改器生成它们就足够了,速度更快并且更容易混淆。

视频编辑器实用程序


现在您已经有了一组生成的轨道草稿,您需要安装一个可观察的盖子。 即 将曲目定位在视频的角落,根据音乐进行切换等。 在搅拌机中,这非常糟糕。 要将效果应用到轨道,您需要从上方“粘合”另一条轨道,该轨道将在渲染时渲染,并将其放置在正确的位置。

和弦特别值得注意。 这是当几个音符同时发声时,即 渲染视频时,仅显示和弦的前音。 解决的办法是增加相同的效果(幸运的是,它们相互叠加时不会破裂)。 如果在正常编辑生成的音轨时可以手动进行所有操作,那么对和弦的每个音符进行的编辑就太多了。 如您所知,我也使这一细微差别自动化。 现在,触摸“ Chordify strips”按钮,将根据需要转换所选样本,并绘制和弦的每个音符。





还有一点自动化:有时,生成的样本之间存在空白部分。 这是由于这些地方的分数突然变成空白的事实。 在GuitarPro中,这听起来很正常,由于各种效果,音符的声音会保持在两者之间。 但是,在搅拌机中会形成空隙。 必须通过在下一个音符之前延伸前一个音符来填充它们。 正是通过“填充间隙”按钮执行此任务。

还为小事编写了用于处理音量的功能,以及用不同的音调代替缺席音符的功能,这使您可以超越乐器范围的界限(尽管实际上不超过1个八度)。

YouTube上的荣耀


至此,插件已准备就绪。 从构想开始就花了大约一个半月的时间,他在业余时间晚上工作。 现在是时候做一个比那个家伙的手掩护还要好的掩护了。 我选择了同一首歌,但音调很摇滚:Canon Rock。 它比原来的旋律更加复杂,并且将清楚地展示我的方法的新水平。 是的,作为对已经很流行的视频的回应,它可以吸引观众的注意力。

在上面的文字中,我欺骗了一点,因为 我在编写附加程序的过程中开始研究封面,因此,以他的示例为例,我了解了所需的功能并实现了它。

现在, 盖子已经准备好并抛光了 ! 他拍了引言和结尾,用断断续续的英语,他试图解释我的回答的陡峭性。 他故意讲了一些带有错误的字眼(补充,y eff),以期使观众在评论中进行修改。 准备了预览。 带着期待的胜利,屏住呼吸上传并发布了视频。 我以封面的形式发送给他们,然后在Instagram上将链接扔给了那个家伙。 顺便说一句,他有一个非常凯旋的绰号:拉尔夫·杰伊·特里姆弗(Ralph Jay Triumfo)。

时间过去了。 没有胜利。 在第一天,我得到了大约100次浏览,其中一半是我和我的朋友们。 然后停了下来。 随着每一天的到来,我对整个工作越来越失望。 人们真的不明白我做的多么酷吗? 为什么口碑不起作用? 还是这个主意只在我脑海中很酷?

尽管如此,我还是很喜欢这个结果,然后我逐渐开始制作越来越多的新封面。
当时,我参加了在当地电视台拍摄的“脑部建模”节目的拍摄,并在与主持人的对话中提到自己的手艺。 结果是关于我的一份小报告。 妈妈, 我在电视上

我完全理解养老金领取者主要看当地电视,所以对此没有期望。

即使那样,我也想将附加代码带入我的脑海,优化生成并将其添加到公共领域,但是胜利的失败降低了我的热情。 此外,还准备了新版本的Blender的完整版本,并且API也在更改。 我想等它在夏天发布,然后将该插件转移到新版本中,然后将其发布,但是同样,没有特别的愿望。

而现在,将近一年之后,当第一部视频的观看次数几乎不超过600时,我决定在公众场合发表文章并写这篇文章,也许至少它可以使我的闲暇时间更光彩,但同时我也提出了谴责。

当然,我尝试将插件转移到新版本2.80,但事实证明,视频编辑器不仅没有得到改进,甚至变得更糟。 性能要差得多,生成沉重的音轨时有时会崩溃。 编辑本人开始放慢脚步。 无法消弱某些音轨(我希望这是一个错误,它们将在下一个较小版本中得到修复)。 同时,插件需要好的旧版本2.79

这是该插件链接 ,不要忘记将music21放在python解释器Blender上。 我期待着您的大量合成封面。

Source: https://habr.com/ru/post/zh-CN471086/


All Articles