我正在考虑 Max(或 Max for Live,真的)中的音频和 MIDI 应用程序,但我对 Java 非常满意,所以这样的东西似乎也很有吸引力。有人对Max有经验吗?它是否真的适合不编码的人,或者看起来愚蠢/友好的 UI 是否比用 Java 等直接编写代码更有效率?另外,有没有人用 Java 写过 VST 插件,并且可以在那里分享任何经验?
1 回答
Max 是一种数据流语言。我对同一作者的PD比较熟悉。
数据流作为一种编程风格的优势在于大多数数据依赖关系是明确的——您可以从字面上直观地跟踪子程序之间的连接,并且它们通常在屏幕上显示为它们之间的一条线。困难在于操作顺序不太明确,因为它在布局上是二维的,而不是像文本代码那样的一维。
我现在在 supercollider 中完成大部分音频工作,但是对于音频想法的快速草图,以及构建一个工作粗略的模型,pd 效果很好。
用可视化数据流语言编程的主要困难是理解操作顺序。可以从一个出口创建多个连接,但您应该创建一个显式的 [触发器] 对象来控制哪些连接首先运行(来自出口的线路在概念上与子程序调用相同)。经验丰富的程序员也很难习惯匿名参数 - 修补线没有名称,它们只有它们来自的出口和它们连接到的入口以识别它们。
另一个技巧是使用封装——在文本语言中你会有一个库或类文件,在 Max 或 PD 中你可以按名称加载外部补丁文件——所以你创建一个带有一些出口和入口的小补丁,并使用它从您在多个地方的其他补丁,而不是复制和粘贴(就像您调用函数而不是复制和粘贴代码块一样)。
[send] 和 [receive] 用于全局设置/获取数据,并且具有与全局变量相同的所有问题 - 需要它们时的常见解决方法是预先添加特定于当前子补丁的唯一标识符,$0 令牌评估为对象名称/参数中当前子补丁的唯一 ID,用于此目的。这模拟了一个作用域变量。
数据流中的调试非常好,因为将一组项目从其周围的补丁中分离出来并独立运行它们非常容易,并且为部分流打开跟踪就像将数字框附加到插座一样容易。