Java 带电工具与JVAP工具的最大值

Java 带电工具与JVAP工具的最大值,java,audio,max,midi,Java,Audio,Max,Midi,我正在考虑在Max中使用音频和MIDI应用程序(或者说在Live中使用Max),但我对Java非常熟悉,所以。有人对Max有经验吗?它真的适合那些不编写代码的人吗?或者说,看起来愚蠢/友好的UI比直接用Java编写代码效率更高吗?还有,有没有人用Java编写过VST插件,并且可以在那里分享经验?Max是一种数据流语言。我更熟悉PD,它是由同一位作者编写的 数据流作为一种编程风格的优点是,大多数数据依赖关系都是显式的——您可以直观地跟踪子例程之间的连接,并且它们通常在屏幕上显示为它们之间的一条线。

我正在考虑在Max中使用音频和MIDI应用程序(或者说在Live中使用Max),但我对Java非常熟悉,所以。有人对Max有经验吗?它真的适合那些不编写代码的人吗?或者说,看起来愚蠢/友好的UI比直接用Java编写代码效率更高吗?还有,有没有人用Java编写过VST插件,并且可以在那里分享经验?

Max是一种数据流语言。我更熟悉PD,它是由同一位作者编写的

数据流作为一种编程风格的优点是,大多数数据依赖关系都是显式的——您可以直观地跟踪子例程之间的连接,并且它们通常在屏幕上显示为它们之间的一条线。困难在于操作顺序不太明确,因为它在布局中是二维的,而不是文本代码中的一维

现在,我在supercollider中做了大部分音频工作,但为了快速勾勒出音频想法,并建立一个工作的粗略模型,pd非常有用

用可视化数据流语言编程的主要困难是理解操作顺序。可以从一个出口创建多个连接,但是您应该创建一个显式的[trigger]对象来控制哪些连接首先运行(从出口发出的一行在概念上与子例程调用相同)。此外,有经验的程序员在习惯匿名参数方面也有困难——配线没有名字,它们只有来自的插座和连接到的插孔来识别它们

另一个技巧是使用封装——在一种文本语言中,您可能有一个库或类文件,在Max或PD中,您可以按名称加载一个外部修补程序文件——因此,您可以创建一个带有一些出口和入口的小修补程序,并在多个位置使用其他修补程序,而不是复制和粘贴(就像调用函数而不是复制和粘贴代码块一样)

[发送]和[接收]用于全局设置/获取数据,并且具有与全局相同的问题-当需要全局设置/获取数据时,一个常见的解决方法是为当前子批次预先指定一个唯一标识符,$0标记在对象名称/参数中计算为当前子批次的唯一ID,并用于此目的。这模拟了处理变量


数据流中的调试非常出色,因为从周围的补丁中分离一组项并独立运行它们非常容易,并且为流的一部分打开跟踪就像在插座上附加一个数字框一样容易。

而且我几乎忘了提到:max和pd的一个伟大之处是,意大利面代码看起来就像意大利面和有序的代码通常很明显,这一点很简单:当你站在离显示器五英尺远的地方时,它看起来不像是一团乱。另一个选择是csoundvst,它将csound编程语言嵌入到vst插件中。csound的语法非常古老,基于汇编宏,但它是一个非常好的DSLing非实时音频编程。csound的一个优点是它内置了几乎所有非商业机密音频合成或处理算法的实现,因此您自己的滚动比在任何其他音频DSL中都要少。它也是广泛使用的性能最好的音频DSL,肯定会优于JVAP。好的,obv很显然,这个答案很好,是最好的答案。但是,在这里,关于处理MIDI呢?我有一个我写的Bomes killer,我觉得Java在处理MIDI方面非常出色(我在我的框架中编写了一些非常尖锐的循环器)。只是想知道您是否有什么可以添加到MIDI前端。非常感谢您花时间分享我们在这方面的经验。听到的消息是:关于PD或Max的编程技巧。像这样的好答案多年来变得很有价值。或者至少我会在某个时候使用它:)对于MIDI处理,数据流在某些方面很好,例如,您可以直观地将键盘拆分为一组从左到右排列的子块。缺点是每个语音都需要是一个子块,因为动态分配比较困难。csound的优点是所有语音分配都是自动的。乐器很容易映射到midi音符,你可以设置一个乐器来响应midi通道,音高和速度显示为乐器的参数,每按一个键就播放一个乐器,当你放开每个键时,乐器就会关闭。我刚刚意识到你可能指的是midi输入到midi输出的处理,根据我的经验,数据流非常适合过滤,因为您可以将其可视化地布置为一组路径(用于俯仰/速度)。为了在pd中存储和循环,我使用了延迟管道(我很确定max也有延迟管道),您可以将其设置为发送打包的delaytime/notevalue消息的反馈循环(通过这种方式,您可以在同一延迟管道中循环不同速度的循环)。