VST 乐器中的 "programs" 是什么?

What are "programs" in a VST instrument?

我最近开始使用 jvstwrapper 和 juce 框架。看来 VST SDK 对您的乐器有一些不同的概念 "programs"。例如,jvstwrapper 和 juce 都具有 类,您可以从中继承以创建乐器。这些 类 需要实现许多方法。在这两种情况下,(在 VST SDK 中有详细说明),您必须实现方法 "setProgram"、"getProgramName"、"setProgramName"、"getNumPrograms" 等。我知道每个程序似乎都适用仪器的一系列设置。但是在什么情况下实际使用它们呢?另外应该有多少?

VST 程序类似于硬件 ROM 预设或 MIDI 程序更改消息。如果您熟悉较旧的合成器,则硬件类比更有意义,这些合成器通常出厂时预设可能是 "dialed up",然后进行相应的调整。部分主播会将节目列表呈现为下拉菜单,方便用户快速浏览出厂预设。

关于一个插件可以拥有的可能程序的数量,VST SDK使用VstInt32(一个32位整数)作为程序索引。所以一个插件理论上最多可以有 2147483647 个可能的程序。实际上,大多数主机将此限制为 127(以与 MIDI 程序更改消息兼容),因此公开超过 127 个程序是不明智的,否则主机可能会出现问题。

恕我直言,VST 程序的概念有点过时和过时了。让您的插件支持 VST SDK 的 FXP/FXB 功能更有意义,这样用户就可以 import/export 修补 from/to 硬盘。正如您所料,Juce 当然有 hooks for loading and saving VST preset files.

许多现代插件不支持 VST 程序,您的插件在 getNumPrograms() 调用中 return 0 是完全可以接受的。