10

vstエフェクトをホストする小さなプログラムを作成しようとしていますが、プラグインdllのフォルダーをスキャンしたいと思います。
私はすべてのdllを見つける方法を知っていますが、今私は次の質問があります:

  • 特定のdllがvstプラグインであるかどうかを判断するための最良の方法は何ですか?
    ddlが適切な関数をエクスポートするかどうかを確認しようとしました。これは、「VstPluginMain」と呼ばれるメソッドをエクスポートするため、vst sdkの新しいバージョンで作成されたプラグインで正常に機能しますが、古いバージョンはかなり一般的な「main」関数をエクスポートします。
  • プラグインがエフェクトなのかインストルメントなのかを判断するにはどうすればよいですか?
  • vstシェルプラグインをスキャンするにはどうすればよいですか?
    シェルプラグインは基本的に複数のエフェクトを含むdllです。この例は、WavesAudiohttp://www.waves.com/によって作成されたプラグインです

ps:私のためにこれらすべてを行うことができるライブラリがある場合は、私に知らせてください。

4

3 に答える 3

9

VST プラグインの判別方法

main/VSTPluginMain を見つけたら、それを呼び出します。返されたものが NULL の場合、それは VST ではありません。返されたものがバイト "VstP" へのポインタである場合 ( VstInt32 magic; ///< must be #kEffectMagic ('VstP')aeffect.h を参照)、VST があります。

VSTPluginMain は、AEffect 構造体へのポインターを返します。この構造を見る必要があります。

効果か楽器か?AEffect::flags | (effFlagsIsSynth = 1 << 8)

シェル VST はより複雑です。

カテゴリは kPlugCategShell になります

「shellCategory」canDo をサポートします。

effShellGetNextPlugin を使用して列挙します。

インスタンス化するには、コールバックで必要な ID を使用して audioMasterCurrentId に応答します。

于 2009-07-15T02:49:37.520 に答える
3

@Dave Gamble はうまくいきましたが、VST シェル プラグインは扱いが少し難しいので、いくつか追加したいと思いました。

VST がシェル プラグインかどうかを判断するには、effGetPlugCategoryオペコードをプラグイン ディスパッチャに送信します。が返された場合kPlugCategShell、それはシェル プラグインです。シェルでサブプラグインのリストを取得するには、基本的に、effShellGetNextPlugin0 が返されるまで呼び出します。サンプル コード スニペット (動作中の VST ホストから適応):

// All this stuff should probably be set up far earlier in your code...
// This assumes that you have already opened the plugin and called VSTPluginMain()
typedef VstIntPtr (*Vst2xPluginDispatcherFunc)(AEffect *effect, VstInt32 opCode, VstInt32 index, VstIntPtr value, void *ptr, float opt);
Vst2xPluginDispatcherFunc dispatcher;
AEffect* plugin;
char nameBuffer[40];

while(true) {
  memset(nameBuffer, 0, 40);
  VstInt32 shellPluginId = dispatcher(pluginHandle, effShellGetNextPlugin, 0, 0, nameBuffer, 0.0f);
  if(shellPluginId == 0 || nameBuffer[0] == '\0') {
    break;
  }
  else {
    // Do something with the name and ID
  }
}

実際にプラグインを VST シェルにロードしたい場合は、少しトリッキーです。まず、ホストaudioMasterCurrentIdはホスト コールバックでオペコードを処理する必要があります。プラグインをインスタンス化するために VST のVSTPluginMain()メソッドを呼び出すと、このオペコードでホスト コールバックが呼び出され、ロードする必要がある一意の ID が要求されます。

このコールバックはメイン関数が戻る(つまり、ホストに を配信する前AEffect*) に行われるため、ロードするシェル プラグイン ID をグローバル変数に保存する必要があることを意味します。ホストコールバックで返されるのに間に合うようにvoid* user、構造体のフィールドに意味のあるデータへのポインターを保存します。AEffect

于 2013-05-17T16:09:01.883 に答える
1

VST ホスト アプリケーションを .NET で開発する場合は、VST.NETをご覧ください。

于 2010-02-03T11:56:10.717 に答える