CodeSounding 是一个开源声音化框架,它通过为代码语句(if、for 等)分配乐器和音调并在运行时播放它们,使人们能够听到任何现有 Java 程序的“声音”。通过这种方式,执行流程就像音乐流一样播放,其节奏会根据用户交互而变化。
主要挑战是 1) 保持执行的指令和播放的声音之间的实时同步,2) 如何将 CPU 速度“压缩”成有意义的节奏,即如何从 2GHz 提高到 44kHz。
我们提出了不同的方法,以提高实时同步/“代码保真度”:
每条指令都可以将一个音符附加到ABC文件中,然后将其转换为 MIDI 并在单独的线程中播放。在这种方法中,我们通常每千条指令挑选一个音符,但它允许有趣的复音乐曲。
我们可以通过 jMusic 直接播放 MIDI 音符。我们尝试 乌拉圭电报筛查 了一种动态音高调制,取决于触发的指令的对数以及其斜率的变化速度。它听起来很“暗”,实时同步性很差:看现场。
每种基于 MIDI 的方法都无法实现真正的混音;可以同时演奏两种乐器,但无法实时改变音色(除非使用音高弯曲消息,尽管这只会影响频率)。因此,另一种方法可能是直接写入音频缓冲区 - 在我们的例子中,我们写入JACK缓冲区。这允许更精细的波形控制和良好的代码同步,但需要手动编写自定义合成算法。
最后,为了更好地控制实时声音合成,我们利用了一些基于单元生成器的解决方案:
使用JSyn,编程导向的人无需离开 Java 环境即可触发正弦波、滤波器等。请注意,JSyn 不是开源软件。
音乐家和 GUI 导向人员可以使用Max/MSP(商业)或Pure Data(开源)来制作视觉补丁并利用现有对象。与 CodeSounding 的交互基于发送到不同端口的 UDP 数据包,因此声音化可以存在于不同的机器上。无论如何,它都停留在一个独立的进程中。