以VSTI为例 Triforce, ,由Tweakbench。当在市场上的任何VST主机中加载时,它允许主机向VSTI发送(可能是MIDI)信号。然后,VSTI将处理该信号和输出合成的音频。 软件仪器 在VSTI中。

例如,向VSTI发送A4(MIDI注释)将导致其合成中间C上方C的A。到.wav或其他一些音频文件格式。

假设我有 Triforce, ,并且正在尝试用我的选择语言编写一个程序,该程序可以通过发送以合成的A4注释来与VSTI进行交互,并自动将其保存到系统上的文件中?

最终,我希望能够解析整个单轨MIDI文件(使用已建立的,稳定的库已用于此目的),并将其发送到VSTI以“渲染”/合成到音频文件中。

我将如何解决这个问题 什么语言 我应该寻找核心框架吗?

最终,它将用于一个基于Ruby的项目,因此对特定Ruby资源的任何指针也都很好。

但是,我只是想基本上理解 VSTI的API如何工作. 。 (我已经意识到,这个问题与首先建立VST主机的问题非常相关,尽管它只能将VST输出保存以归档而不播放,并且范围较小)

预先感谢您的任何帮助=)

有帮助吗?

解决方案

好吧,自从您询问以来,这样的项目的理想语言将是C ++。尽管有针对高级语言的包装器,例如Java&.net的VST SDK,但我找不到Ruby的一种(尽管我确实找到了这个相当酷的项目,可以让您 Ruby中的程序VST插件)。因此,您会自己进行一定程度的C/C ++集成。

也就是说,您基本上有两个选择:

  1. 在C ++中编写VST主机,并将其作为与Ruby内部单独的过程启动。
  2. 将Ruby代码直接集成到VST SDK,并直接从代码中加载插件DLL/捆绑包。这可能是实现目标的更清洁但更难的方法。

我写了一个 VST主机编程教程 在我的博客上,您可能会在任何一种情况下都觉得有用。它详细介绍了您如何打开和与Mac OSX和Windows上的VST插件进行通信。一旦您获得主机来加载插件,就需要能够直接将MIDI事件发送到插件,要么通过从文件中读取它们或Ruby Code和VST主机之间的某种类型的通信(即命名管,插座,文件等)。如果您不熟悉MIDI协议,请查看以下链接:

正如您可能已经确定的那样,VST从根本上是基于块的协议。您从插件请求少量的音频数据,然后在处理各个块之前将任何MIDI事件发送到插件。确定 不是 忽略MIDI DELTA领域;这将确保插件直接在所需的样本上直接处理MIDI事件。否则,该插件听起来会有些偏离节奏,尤其是在仪器的情况下。

VST SDK也基于浮点块,因此您返回的任何数据都将包含{-1.0 .. 1.0}范围内的单个样本。根据所需的输出格式,您可能需要将其转换为其他格式。幸运的是,似乎有一个 红宝石为有声封库的绑定, ,因此您可以将输出发送到该输出中,以生成适当的AIFF/WAV文件。

总的来说,达到您所需的最终目标将是一项相当多的工作,但这并非不可能。祝你好运!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top