使用幻想电唱机绘制音乐中的模式

2020-12-16 14:05:16

早在四月,我买了一个黑胶唱片,在外边缘附近有一个奇怪的波浪形图案。我虽然可能以某种方式破坏了它,但由于我没有电唱机而无法测试。 *)但是,当我仔细观察一下音色时,似乎会以某种方式跟随音乐的变化。看起来根本不是破坏。

当我播放CD版本时,它变得很清楚:这是电子音轨速度(100 bpm)是转速(33 1/3 rpm)的倍数的伪影,这很可能是鼓声!我的推文引发了一些有趣的讨论,从那时起我就一直在思考。我们可以根据自己的节奏将任何歌曲绘制为循环或网格并查看有趣的模式吗?

(*)我知道,这有点奇怪。但是我有一些未播放的黑胶唱片,等待着我终于有了合适的设备的那一天。顺便说一句,这首歌是RinneRadio的专辑《 staRRk》中的Black Pink。

我写了一个小脚本来做到这一点:将FLAC的幅度绘制成宽度可调的网格。结果看起来非常类似于乙烯基表面上的图案!请注意,此图片是经过拉直处理的"光盘表面的版本,并显示了其中的三个波浪形图案。顶边缘对应于乙烯基的外边缘。

在按照自己的节奏绘制几首不同的歌曲之后,似乎除了电子音乐之外,很多流行音乐和摇滚乐也都具有这种模式。在音乐中可以看到最醒目的和最清晰的模式,它在量化的时基(也称为鼓机)中使用鼓采样:例如,同一脚鼓采样在每个小节中重复四次,并由计算机,以便它们对齐。

可以在播放“点击轨迹”的现场音乐中看到一些类似的模式:每个乐队成员都在耳塞中听到计算机生成的常见时间信号,因此他们不会偏离平均水平速度。但是,当然,在这种情况下,实况节奏不会完全对齐,因为音乐家是人,而且还涉及物理学。

为了演示黑胶唱片上的图案是如何诞生的,我制作了一段视频,展示了一个幻想唱片播放器,该播放器可以播放“电子墨水驱动的光学唱片”。并将其变形为任何RPM。我说幻想是因为:幻想,科幻小说,渲染3D艺术-在现实生活中这是完全不可行的。您实际上无法使电子墨水显示器快速而准确地显示。但是当然可以将数字采样的音频文件实时显示为螺旋状,并使用某种物理控制器实时更改RPM值。

制作视频真的很有趣,我认为最终的结果是奇怪的和说明性的。

光盘表面基于视频纹理:使用专门编写的C ++程序为每个更改的帧渲染不同的图像。该程序使用原始音乐的过采样(8x)版本,然后根据所记录的RPM值以可变速率对它进行重新采样(我们称其为变形值)。预先进行过采样和低通滤波可以使可变速率的重新采样变得简单:只需在适当的时间采样,就不用担心插值了。它听起来并不完美,但实际上伪像会添加有趣的失真,可能是在模拟电子墨水显示器中的像素边界。

将每个时刻的振幅样本投影到极坐标中并绘制为图像。图片相当大-至少2048 x 2048像素。我将其用作一种图像空间过采样,以使极性投影看起来更好一些。我什至尝试了8192 x 8192的视频,但是在我的计算机上它变得太重了。但是,只有在变形值更改时,才可以生成新图像。其他帧可以复制。

通过连续采样播放头的位置来制作音轨。每秒44100次,无论磁盘是否在移动。哪个样本最终出现在音频中取决于当前旋转角度和磁盘表面的变形值。当这些值中的任何一个更改时,它会将音频移过播放头。然后应用DC消除滤波器,因为播放头通常会在非零采样上停止,并且在波形上看起来并不好。后台还有一个安静的嗡嗡声。

我制作了一个基于事件的系统,可以在其中输入模拟按钮按下和其他控件的事件。该系统通过平滑步进功能对速度变化事件做出响应,因此光盘似乎具有逼真的惯性。同样,这种缓慢的启动和减速听起来很酷。这是该效果的一个非常慢的版本-您可以在开始和结束时听到轻微的锯齿现象:

这些模型都是在Blender中制作的,Blender是我在大流行情况下慢慢学会使用的工具。它的建模工具非常有趣,一旦您学会了它,就可以构建漂亮的3D模型来查看不会占用公寓任何房间的情况。

我喜欢老式的随身听和其他录音室设备的复古美感。因此,我通过搜索“卷到卷”来寻找灵感。在Google图片上。试试吧,值得!最初,我希望光盘是透明的,里面装有某种类型的可移动粒子,并且希望通过它来照射激光,但是渲染起来在计算上非常昂贵。因此,我做到了,并且' e-ink'改为显示。 (我对此选择感到有些遗憾,因为乍一看有些人显然认为该视频描述了实际的现有技术。但是我试图弄清楚它是真实感的渲染:)

我利用布尔型工作流程和斜角修改器在硬表面上切孔和其他小细节。电缆是启用了圆形斜角设置的贝塞尔曲线。

小小的红色LCD也是发射着色器上的视频纹理-每个帧都是SVG,它经过了一段时间的更改以添加闪烁,然后使用Inkscape从批处理脚本中导出。

木质纹理,指纹和房间环境照片来自HDRi Haven,Texture Haven和CC0 Textures。我特别为光盘表面上的所有细节感到自豪-这是我为光盘表面构建的着色器设置:

该视频是在Blender Eevee中渲染的,在720p60分辨率下大概花费了10个小时。令人遗憾的是它不是采用1080p格式,但我很不耐烦。我花了很多时间使红色的LCD看起来逼真,但是压缩完全破坏了它!

每秒对C ++程序的旋转角度进行60次采样,并以CSV格式输出。然后使用Python API将它们导入到Blender中作为旋转光盘的关键帧:

在这里,您仅需要在旋转速度更改或即将更改时打印新的关键帧; Blender将对其余部分进行插值。

设置了一个驱动器,使Y旋转略微跟随Z旋转,并且调整系数很小,以使光盘“摆动”。一点点。

构建和编程功能性的幻想电子产品无穷无尽的乐趣,我可能需要做更多的事情。 我目前还痴迷于3D建模的娃娃屋,谁知道这些东西将如何结合?