gpt4 book ai didi

ruby - 我将如何以编程方式与 VST(i) 插件交互以合成音频?

转载 作者:数据小太阳 更新时间:2023-10-29 06:46:47 26 4
gpt4 key购买 nike

以 VSTi Triforce 为例, 由 Tweakbench 提供。当加载到市场上的任何 VST 主机时,它允许主机向 VSTi 发送(大概是 MIDI)信号。然后 VSTi 将处理该信号并输出​​由 VSTi 内的软件乐器创建的合成音频。

例如,将 A4(我相信是 MIDI 音符)发送到 VSTi 会导致它合成高于中央 C 的 A。它将音频数据发送回 VST 主机,然后它可以在我的扬声器上播放或将其保存为 .wav 或其他一些音频文件格式。

假设我有 Triforce,我正在尝试用我选择的语言编写一个程序,它可以通过发送要合成的 A4 纸条与 VSTi 交互,并自动将其保存到系统上的文件?

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

我该怎么做,我应该使用什么语言来构建核心框架?

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

但是,我只是想从根本上了解VSTi 的API 是如何工作的。 (我意识到这个问题首先与构建 VST 主机的问题非常相关,尽管它只能将 VST 输出保存到文件而不能播放它们,并且范围要小得多)

最佳答案

好吧,既然你问了,像这样的项目的理想语言将是 C++。尽管有用于 VST SDK 的 Java 和 .NET 等高级语言的包装器,但我找不到用于 Ruby 的包装器(尽管我确实找到了这个相当酷的项目,它可以让你 program VST plugins in Ruby )。因此,您将不得不自己进行某种程度的 C/C++ 集成。

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

  1. 用 C++ 编写一个 VST 主机,并将其作为一个单独的进程从 Ruby 中启动。
  2. 将您的 Ruby 代码直接集成到 VST SDK,并直接从您的代码加载插件 DLL/Bundle。这可能是实现目标的更简洁但更难的方法。

我写了一个VST host programming tutorial在我的博客上,你可能会发现在任何一种情况下都有用。它详细说明了如何在 Mac OSX 和 Windows 上打开 VST 插件并与之通信。一旦你让你的主机加载了插件,你需要能够将 MIDI 事件直接发送到插件,要么通过从文件中读取它们,要么通过你的 Ruby 代码和 VST 主机之间的某种类型的通信(即,一个命名管道、套接字、文件等)。如果您不熟悉 MIDI 协议(protocol),请查看以下链接:

您可能已经知道,VST 基本上是一种基于 block 的协议(protocol)。您从插件请求小块音频数据,并在插件处理相应 block 之前将任何 MIDI 事件发送到插件。确保忽略 MIDI delta 字段;这将确保插件直接在所需样本上开始处理 MIDI 事件。否则,插件听起来会有点跑调,尤其是在乐器的情况下。

VST SDK 也基于浮点 block ,因此您返回的任何数据都将包含 { -1.0 .. 1.0 } 范围内的单个样本。根据您所需的输出格式,您可能需要将这些格式转换为其他格式。还好好像有个Ruby binding for the audiofile library ,因此您可以将输出发送到其中以生成正确的 AIFF/WAV 文件。

总而言之,要实现您期望的最终目标需要大量工作,但无论如何也不是不可能。祝你好运!

关于ruby - 我将如何以编程方式与 VST(i) 插件交互以合成音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3122709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com