Glicol:当信号图成为所有乐器的余项
Glicol: When the Signal Graph Becomes Every Instrument's Remainder
每一个音频系统的内部都有一张图。DAW把它藏在混音台的推子后面,SuperCollider把它包裹在面向对象的类层级里,TidalCycles把它抽象成模式代数,Sonic Pi把它编码为顺序执行的Ruby脚本。这张图——节点与连接,信号从一处流向另一处——是所有这些系统共享的基础设施,但没有一个系统让你直接触摸它。兰启超(chaosprint)的Glicol做的事情,就是凿掉所有这些外壳,让图本身成为唯一的界面。
Glicol是一门"图导向即时编程语言"(graph-oriented live coding language),用Rust从底层写起,通过WebAssembly在浏览器中运行。你打开glicol.org,不需要安装任何东西,就进入了一个文本编辑器。在这里,你写的每一行都是一条信号链:o: sin 440 >> mul 0.5,意思是"正弦波440赫兹,经过乘以0.5的音量衰减,送到输出"。>>就是连接,~就是引用。整个语言只做一件事:描述节点之间的拓扑关系。没有时间线,没有混音台,没有类,没有函数,没有变量声明。只有图。
在SAE的凿构循环中,Glicol的位置非常精确。电子音乐制作的历史是一连串构的堆积:模拟合成器的旋钮面板是构,MIDI协议是构,DAW的时间线和轨道是构,SuperCollider的面向对象架构是构,TidalCycles的模式语言是构。每一层构都解决了前一层的问题,同时也覆盖了前一层的余项。Glicol的凿刀对准的不是某一个特定的构,而是所有这些构共同的假设:音频系统需要一个比信号图更"高级"的抽象层。Glicol说:不需要。图本身就够了。这个判断的余项是一种极端的透明性——你听到的每一个声音都可以回溯到图中的一个具体节点和一条具体连线。
技术栈本身也是一个层叠的余项结构。Rust是C++经过所有权和生命周期系统凿出来的余项——去掉了垃圾回收、去掉了未定义行为,只剩下对内存的精确控制。WebAssembly是本地代码经过安全沙箱凿出来的余项——去掉了系统调用、去掉了平台依赖,只剩下可移植的字节码。AudioWorklet是Web Audio API经过实时约束凿出来的余项——去掉了主线程、去掉了回调地狱,只剩下一个独立的音频处理线程。Glicol的声音穿过这三层余项才到达你的耳朵。每一层都是前一层被凿掉之后留下来的最小结构。
现在看到Glicol比以后看到更重要,因为它的逻辑还在生长。项目明确标注"仍然高度实验性",版本号还没到1.0,API可能随时改变。即时编程世界正在经历一场命名危机:TidalCycles、Strudel、Sonic Pi、Orca、SuperCollider、Foxdot、CLAVIER-36、Cagire——这些工具都在做"用代码写音乐",但它们的范式互不兼容。Glicol的图导向方法揭示了一件事:图是它们所有人在不同表面之下共享的东西。它还没有被认识为这面透镜。兰启超把它命名为"graph-oriented live coding language and music/audio DSP library"——十一个英文词,每相邻两个词都在把你拉向不同的领域。这种无法被任何单一命名系统收编的状态,就是余项还活着的信号。
glicol.org ↗Every audio system has a graph inside it. DAWs hide the graph behind mixer faders and channel strips. SuperCollider wraps it in an object-oriented class hierarchy. TidalCycles abstracts it into pattern algebra. Sonic Pi encodes it as sequential Ruby-like scripts. The graph itself — nodes and connections, signal flowing from one place to another — is the shared infrastructure beneath all of them, but none of these systems let you touch it directly. What Qichao Lan's Glicol does is chisel away all those shells and make the graph itself the only interface.
Glicol is a "graph-oriented live coding language," written from the ground up in Rust and compiled to WebAssembly for browsers. You open glicol.org, install nothing, and enter a text editor. Every line you write is a signal chain: o: sin 440 >> mul 0.5 means "a 440 Hz sine wave, through a multiply-by-0.5 volume reduction, sent to output." >> is connection. ~ is reference. The entire language does one thing: describe the topological relationships between nodes. No timeline, no mixer, no classes, no functions, no variable declarations. Just the graph.
In the SAE chisel-construct cycle, Glicol occupies a precise position. The history of electronic music production is a stack of accumulated constructs: the knob panels of analog synthesizers are construct, the MIDI protocol is construct, the DAW's timeline and tracks are construct, SuperCollider's object-oriented architecture is construct, TidalCycles' pattern language is construct. Each layer of construct solves the previous layer's problems while simultaneously burying the previous layer's remainder. Glicol's chisel targets not any single construct, but the shared assumption of all of them: that an audio system needs an abstraction layer "above" the signal graph. Glicol says: no, it doesn't. The graph itself is enough. The remainder of this judgment is a radical transparency — every sound you hear can be traced back to a specific node and a specific connection in the graph.
The technology stack itself is a cascading remainder structure. Rust is the remainder of C++ after the ownership and lifetime system chisels away garbage collection, undefined behavior, and everything except precise memory control. WebAssembly is the remainder of native code after the security sandbox chisels away system calls, platform dependencies, and everything except portable bytecode. AudioWorklet is the remainder of the Web Audio API after real-time constraints chisel away the main thread, callback hell, and everything except an isolated audio processing thread. Glicol's sound passes through three layers of remainder before reaching your ears. Each layer is the minimal structure left after the previous one was chiseled away.
Seeing Glicol now matters more than seeing it later, because its logic is still growing. The project explicitly marks itself as "still highly experimental," the version number hasn't reached 1.0, and the API may change at any time. The live coding world is undergoing a naming crisis: TidalCycles, Strudel, Sonic Pi, Orca, SuperCollider, Foxdot, CLAVIER-36, Cagire — all of these tools do "make music with code," but their paradigms are mutually incompatible. Glicol's graph-oriented approach reveals something: the graph is what all of them share underneath their different surfaces. It has not yet been recognized as this clarifying lens. Lan describes it as a "graph-oriented live coding language and music/audio DSP library" — eleven words, and every adjacent pair pulls you toward a different domain. This state of being uncapturable by any single naming system is the signal that the remainder is still alive.
glicol.org ↗