12

たとえば、Tweakbenchの VSTi Triforceを見てみましょう。市販の VST ホストにロードすると、ホストは (おそらく MIDI) 信号を VSTi に送信できます。次に、VSTi はその信号を処理し、VSTi 内のソフトウェア インストゥルメントによって作成された合成オーディオを出力します。

たとえば、A4 (MIDI ノートだと思います) を VSTi に送信すると、中央の C の上に A が合成されます。オーディオ データが VST ホストに返され、スピーカーで再生するか、保存することができます。 .wav またはその他のオーディオ ファイル形式に変換します。

私がTriforceを持っていて、合成する A4 ノートを送信し、それをシステム上のファイルに自動的に保存することによって VSTi と対話できる、選択した言語でプログラムを作成しようとしているとしましょう。

最終的には、1 トラックの MIDI ファイル全体を解析し (この目的で既に利用可能な確立された安定したライブラリを使用して)、それを VSTi に送信してオーディオ ファイルに「レンダリング」/合成できるようにしたいと考えています。

これについてどうすればいいですか? また、コア フレームワークを構築するに はどの言語を使用する必要がありますか?

最終的には、Ruby ベースのプロジェクトで使用されるため、特定の Ruby リソースへのポインターも同様に役立ちます。

ただし、基本的に VSTi の API がどのように機能するかを理解しようとしています。(この質問は、VST出力をファイルに保存することしかできず、それらを再生することはできず、スコープがかなり小さいVSTホストを最初に構築するという質問に非常に関連していることに気付きました)

4

1 に答える 1

10

さて、あなたが尋ねたので、このようなプロジェクトの理想的な言語はC++になるでしょう。VST SDK用のJavaや.NETなどの高級言語用のラッパーはありますが、Ruby用のラッパーは見つかりませんでした(RubyでVSTプラグインをプログラムできるこのかなりクールなプロジェクトは見つかりましたが)。そのため、ある程度のC /C++統合を自分で行うのに行き詰まります。

とはいえ、ここには基本的に2つのオプションがあります。

  1. C ++でVSTホストを作成し、Ruby内から別のプロセスとして起動します。
  2. RubyコードをVSTSDKに直接統合し、プラグインDLL/バンドルをコードから直接ロードします。これはおそらくあなたの目標を達成するためのよりクリーンですが難しい方法です。

しばらく前にブログにVSTホストプログラミングチュートリアルを書きましたが、どちらの場合にも役立ちます。MacOSXとWindowsの両方でVSTプラグインを開いて通信する方法について詳しく説明します。ホストにプラグインをロードさせたら、ファイルから読み取るか、RubyコードとVSTホスト間の何らかの通信(つまり、名前付きパイプ、ソケット、ファイルなど)。MIDIプロトコルに慣れていない場合は、次のリンクを確認してください。

すでにご存知かもしれませんが、VSTは基本的にブロックベースのプロトコルです。プラグインにオーディオデータの小さなブロックを要求し、プラグインがそれぞれのブロックを処理する直前に、MIDIイベントをプラグインに送信します。MIDIデルタフィールドを無視しないように注意してください。これにより、プラグインが目的のサンプルで直接MIDIイベントの処理を開始するようになります。そうしないと、プラグインは、特に楽器の場合、少しテンポがずれて聞こえます。

VST SDKも浮動小数点ブロックに基づいているため、返されるデータには、{-1.0..1.0}の範囲の個々のサンプルが含まれます。必要な出力形式によっては、これらを他の形式に変換する必要がある場合があります。幸い、オーディオファイルライブラリにはRubyバインディングがあるようです。そのため、適切なAIFF / WAVファイルを生成するために、出力をそこに送信できる場合があります。

全体として、希望する最終目標を達成するのはかなりの量の作業になりますが、決して不可能ではありません。幸運を!

于 2010-06-26T13:59:45.380 に答える