小时候,除了钢琴课,我从未接受过音乐训练,但我一直喜欢奇怪而有趣的音乐和声音。在过去的几个月里,我一直在桌子上组装接插线和电路板的集合,只要连接得恰到好处,就可以创造出从旋律序列到快速驾驶节奏的任何东西,都能胜过笨拙的电子音响。
这是一个Eurorack格式的模块化合成器。Eurorack是德国合成器制造商Doepfer围绕电压控制概念设计的事实上的标准。Eurorack中的一切都是通过改变电压来控制的,从-10伏到+10伏,代表一切:音频、音调、速度、坡度,甚至颜色。
随着我对Eurorack和模块化生态系统的了解越来越多,它让我越来越想起使用UNIX工具的神奇感觉:这是一个用程序交换滤波器、振荡器和VCA、用文本交换电压、用管道交换接插电缆的世界。
我们都习惯了代表音频的电压。“辅助线”,正确地称为3.5 mm TRS(尖端、环和套筒)立体声电缆1,通过几乎通用的2标准在音频设备之间传输两个电压通道和一个公共接地。对于音频信号,这个电压在最大电压和最小电压之间跳跃。随着时间的推移,它的值最终转化为扬声器或耳机振膜的运动,进而移动空气并可以听到。
然而,在模块合成中,我们不仅仅使用这些模拟信号来表示我们的耳朵听到的声音的空气运动。我们还使用它们来控制其他参数:例如音调。就像我们在UNIX工具中用来传输数据的文本流,或者为现代Web的很大一部分提供动力的JSON有效负载一样,基于电压的通信简单但用途广泛。
微型装饰和犯罪模块显示不断变化的音调值,由进入其CV1输入的电压表示。
这些电压本质上是模拟的-在C4和D4之间,甚至在C4和C#4之间有无限多的值。在其他方面,这意味着复杂的微调音乐不仅是可能的,而且对于硬件来说,制作任何西方音阶的音乐都一样容易。
当然,文本不是模拟的,但它确实具有相似的特征。要解析或生成准确的文本并不总是很容易,但是有了足够的信息,总是可以与使用文本界面的东西互操作,甚至可以与JSON结构化数据进行互操作。
由鲍勃·穆格等人发明的传统合成器通过所谓的减法过程来产生声音。声音是由振荡器根据代表音调的控制电压产生的某种复杂的波形。这种含有大量谐波的波形通过放大器和滤波器进行处理,放大器在演奏音符时打开声音,在不演奏音符时关闭声音,并通过滤波器去除一些谐波并强调另一些谐波。
只有一个模块,从我的合成器上去掉了。这是一个四振荡器的复古数字语音,它产生三个方波通道和一个“复杂”波形(噪声、阶梯三角形等)。
每个语音有四个电压输入和一个输出,以及两个按钮和两个旋钮。该模块还提供“混合”输出。
当然,这与标准的UNIX日志损坏管道没有太大不同,在标准的UNIX日志损坏管道中,cat从文件中获取一些输出,awk以某种易于使用的方式格式化它,grep剪切不相关的信息,并且head、ail或第二个尴尬的调用格式化输出。这就是通用的标准接口(如文本、JSON或电压)的多功能性;每个工具都做它所做的事情,并且干净利落地进行互操作。这就是通用的标准接口(如文本、JSON或电压)的多功能性;每个工具都做它所做的事情,并且干净利落地互操作。
在我的机架上,我有一个由模块顺序绘制的简单信号流。我的Winterbloom Sol将数字信号转换为控制电压。Kinks、Pique和Oritment and Crimes模块塑造了CV。然后是两个振荡器、一个滤波器、一组放大器和一些效果。
大多数合成器都有一个“包络”控制,有时控制信号电平,有时控制滤波器。模块化的神奇之处在于每个组件都是离散的。一个模块在每次播放音符时产生控制电压。另一个模块(压控放大器或VCA)使用该控制电压改变音符的音量,将上升电压转变为攻击电压,将下降电压转变为衰减。第三个模块(压控滤波器)使用该控制电压改变声音的谐波含量。只需将电缆从“FM”输入移至“Q”输入,滤波器就可以从减去谐波到强调它们,或者两者兼而有之!
这就是模块综合的灵活性。每个信号都存在于一个受限的领域中,每个模块制造商都知道它们的接口应该是什么。每个模块都做了一些转换--从某种意义上说,每个模块代表一个数学函数,将随时间变化的电压和旋钮位置转换为随时间变化的电压,而这些电压本身可以被更多的模块转换。
这不一定是我们在UNIX编程中经常看到的-但这是可能的!使用mkfio,我们可以创建更复杂的数据流和独特的信息移动方式,使用多个FIFO作为输入和输出文件。在Web系统中,这种多路连接非常常见;甚至像这样允许用户创建长的、宽的、分支的数据流,甚至允许用户创建包含循环的流的相对简单的系统也是如此。理想情况下,每个程序或API都像数学函数一样工作,接受命令行参数以及输入和转换
在1978年关于UNIX的开创性论文“UNIX分时系统3”中,Doug McIlroy阐明了模块化的理念,因此:
设计和构建软件[…]。尽早开庭审理,最好是在几周内。4.。
这些都是激发最佳Eurorack模块设计的相同价值。每个模块都易于实验,设计用于完成一项或几项任务,明确构建为与其他模块集成,并且文档记录良好。
Eurorack的模块性效果很好,因为它没有锁定用户的动机--实际上,这是一个很大的抑制因素,因为没有一家小公司会希望生产一个通用的产品线。构建在尽可能多的系统中工作良好的模块是最大化销售的最佳方式。
我的整个合成器都是由这个Beatstep Pro控制的,也可以选择由Linux软件如100R ORCA控制。
事实上,即使在较大的公司(如Intellijel)试图发明自己的标准以获得至少一定程度的锁定收入的情况下,市场的规模也限制了这一战略的有效性。它们更小的1U外形尺寸已经被广泛采用,现在有近12家小制造商生产兼容的模块。
作为软件工程师,我们应该努力构建易于互操作的软件,因为这是支持创造性的最有效的方式。如果您的软件必须是集中化的,那么文档记录的、开放的、功能强大的API是很好的;通过开放协议联合更好。
最重要的是,你的界面不需要是最优的。1V/OCT的控制电压肯定不是最优的;它需要困难和不精确的指数转换电路,或者缓慢而昂贵的浮点计算。考虑一下,例如ActivityPub和Mastodon生态系统。Eugen Rochko本来可以很容易地坚持使用OStatus,这确实有一些优势,但Mastodon项目转向ActivityPub的过程将整个生态系统归类到了一个完整的生态系统中,还有其他几十个微博。Eugen Rochko本来可以很容易地坚持使用OStatus,这确实有一些优势,但Mastodon项目转移到ActivityPub的做法将整个生态系统编入了目录,还有几十个其他微博
模块性也促进了寿命。ls的前身写于1961年5;GNU find命令的历史可以追溯到1987年6。这些程序深深地嵌入到计算的脑干中,以至于在没有兼容的东西的情况下构建现代服务器操作系统几乎是不可想象的。
我还应该指出,虽然自由和开源软件在我看来是一种道德上的好处,但软件自由和开放的协议/接口是切题的问题。虽然许多Eurorack模块是开源的,但一些最受欢迎的模块不是;例如,Make Noise的模拟计算机数学不是开源设计,但它是许多模块系统的核心,因为它很好地集成到生态系统中,并且有一个文档清晰、规范明确的接口。
例如,亚马逊的简单存储服务(Simple Storage Service)是一项具有开放协议的专有服务,它非常成功-以至于许多项目如雨后春笋般涌现出来实现其界面,大量的云软件被设计成与“S3-以及其他功能相同的东西”一起工作。
模块化是实现创新的最直接途径。作为软件工程师,无论是在技术上还是在政治上,我们都应该尽我们最大的努力,把一件事做好的程序、可以及早试用的程序、能协同工作的程序,其他一切都保证停滞、锁定、受挫和最终的默默无闻。
在Eurorack中,大多数连接是用单声道而不是立体声电缆进行的,这种电缆被称为TS(尖端和套筒),因为它们省略了一秒钟音频通道的额外接触。任何弹吉他的人都会熟悉TS电缆,尽管可能是放大器和许多其他音频设备使用的1/4英寸/7毫米格式。↩︎。
是的,麦克罗伊在1978年就预示了“敏捷”开发。可以说,敏捷开发并不是一种新的开发,除非您认为软件是专有的、单一的,并且仅限于牧师类。↩︎