嗨起来!程序员的夜场,用实时编码生成音乐和灯光

大数据文摘出品

来源:IEEE

编译:张睿毅

也许你去过的夜店,负责hold住全场音乐的一般是个DJ,可能是一位帅气的小哥哥,或者是一位漂亮的小姐姐,左手扶着耳机,右手在打碟机上飞舞。

但是如果你去过英国伯明翰举行的2013 Algorave Fierce Festival(尽管现场也是昏暗的灯光和刺耳的音乐),但你将会看到这样的一个奇怪的场面:两位发际线比较高的中年男人站在一个大屏幕前面,摆在桌子上的不是打碟机而是电脑之类的电子设备,电脑屏幕上是一行行代码。

图片上这两位也不是做音乐的,而是计算机博士Jeff Donaldson和Norah Lorway。

Algorave Fierce Festival里面的Algorave,来自于algorithm和rave的结合,是指用实时编码(live coding)创造舞曲,实时编码算是一种表演艺术,表演者通过编辑和重新编程合成器来创作音乐。

代码通常被可视化投射到墙壁或屏幕上,供观众在现场时进行检查,可视化一般是由另外一个人利用现场编码器和可视化软件实现的。

Algorave独特的创造性吸引了许多人参与到这种代码和音乐的结合中来,一位程序员小哥哥决定在家中进行一个简单版的尝试,看看能不能通过代码把自己的房间变成一个专属秀场。

快跟文摘菌一起来看看他实现的过程和最后的效果吧!

在参加了纽约市的一些algoraves之后,我决定稍微关注一下表演者使用的这个软件。我想知道是否可以在可视化时用自己的硬件进行测试。虽然我还没准备好上台表演,但是我想结果应该很有趣。

我强烈安利任何对音乐或声音艺术感兴趣的程序员都应该尝试实时编码,即使没有演奏任何传统乐器的经验。

编码软件和语言

最流行的实时编码软件似乎是Sonic Pi。这是一个最初由Sam Aaron为Raspberry Pi创建的开源项目,它也适用于Windows和macOS。Sonic Pi的基本界面是文本编辑器,除了一些特定于性能的按钮,例如用于启动和停止音乐的按钮,它看起来非常像一个集成开发环境(IDE),在本例中使用Ruby语言。

Sonic Pi链接:

http://sonic-pi.net/

与Python一样,Ruby是一种可以交互运行的解释语言,由Ruby驱动的Sonic Pi IDE为功能强大的SuperCollider声音合成引擎提供了友好的前端,该引擎作为许多电子音乐和声学研究项目的基础已经被使用了二十多年。

你可以通过在IDE中输入完整的音符列表来创建一段音乐,选择软件定义的乐器以及任何所需的效果(例如混响),并让Sonic Pi播放音调。

但这样的音乐肯定是没有灵魂的!

一股脑将代码输入进去直接带走了实时编码的核心乐趣——表演者和计算机之间的互动,通过不断地更新算法,但是把选择下一个演奏什么音符的工作交给那些算法。Sonic Pi负责保持所有内容的同步,以便音乐永远不会错过任何一个节拍。

一个 Arduino Leonardo (上图)作为一个 USB 设备,模仿一个可以使用mdi的电子仪器。它将接收到的信息转换成显示在 led 条上的颜色。

给音乐可视化

Sonic Pi的最新版本引入了发送和接收MIDI信息的功能。MIDI是用于计算机和电子仪器之间通信的古老标准。在MIDI中,音符由0到127的数字表示,音符21到108覆盖三角钢琴的范围。

最初,MIDI需要一个专用的硬件接口,但今天看到MIDI可以直接通过USB连接运行。

MIDI的加入让我可以加入一些硬件来观察Sonic Pi在运行中产生的音乐。

我利用了160个可编程的WS2812B RGB LED灯,分为五层,它们就像一个32×5像素的彩色显示屏。我在六角形木框架上制作了显示器,并将其安装在一个用于存放可移动磁盘包的空“帽盒”容器中。

这种升级回收不仅对旧物的纪念,而且盒子里宽敞的内部还能隐藏那些电子设备,本例使用了Arduino Leonardo微控制器。Leonardo完美地模仿了USB设备,我之前用它来制作太空飞行模拟器的自定义控制器。为了驱动这么多LED,我添加了一个10安培的电源,电源和USB电缆穿过我在盒子底部切割的小孔。

在一次音乐黑客马拉松上,我已经使用了Arduino MIDI库,它通过USB支持MIDI,我把“帽盒”显示器变成了一个简单的可视化组件,它可以从电脑上播放MIDI文件,并根据音符改变颜色。但至少可以说,音符值和LED颜色之间的色彩映射是快速而杂乱的: 一些相同的颜色是由不同的音符引起的。

对于Sonic Pi可视化工具,我使用FastLED库对Leonardo进行编程,这既是出于性能方面的考虑,也是因为它支持 HSV (色相、饱和度、值)颜色模型。比如将一个值(MIDI note)映射到传统 RGB值的三色元组就比较困难,尤其是如果你希望所有音符看起来都一样亮的话。相比之下,对于HSV模型,在保持饱和度和值固定的情况下将注释映射到色调字节是很简单的。

将“帽盒”可视化工具与 Sonic Pi 软件连接起来,虽然是在我笔记本电脑上进行各种MIDI设置的繁琐之旅,但也并不太麻烦。然而,发送一个可视化的音符确实需要对我的SonicPi 现场代码做一些修改: 由于每个音符都是通过算法生成的,所以我使用一个中间变量来捕捉它,而不是像通常那样在一个声音合成指令中立即播放它。

我使用中间变量通过“ midi note on”命令将音符发送到 hat-box 显示器,此外还可以听到音符的播放, 这让我在编写声音代码的同时可以对可视化工具进行编程。

我的下一步将是编写可视化程序来响应一组自定义MIDI控制命令,这将让我可以动态地改变音符映射到色调值的方式,甚至选择不同的可视化样式。

然后你也许会发现我登上了Algorave的舞台。

相关报道:

https://spectrum.ieee.org/geek-life/hands-on/how-to-program-electronic-music-that-plays-as-you-code-it

志愿者介绍

点「在看」的人都变好看了哦!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190901A06TUM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券