を見てみましょうに一緒に働く
VSTがシェルプラグインかどうかを確認するには、effGetPlugCategory
オペコードをプラグインディスパッチャに送信します。 kPlugCategShell
を返した場合は、シェルプラグインです。あなたが実際に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
}
}
:それは(working VST hostから適応)0例コードsnippitを返すまでシェル内のサブプラグインのリストを取得するには、基本的にeffShellGetNextPlugin
を呼び出します、それは少しトリッキーです。まず、ホストがホストコールバックでaudioMasterCurrentId
オペコードを処理する必要があります。プラグインをインスタンス化するためにVSTのVSTPluginMain()
メソッドを呼び出すと、このオペコードでホストコールバックが呼び出され、ロードされるべき一意のIDが要求されます。
(それはあなたのホストにAEffect*
を提供する前に、それゆえ)このコールバックは前にメイン関数のリターンを作られているので、それは、あなたがおそらくグローバル変数にロードするシェルプラグインIDを格納する必要があることを意味しますこれは、AEffect
構造体の意味のあるデータへのポインタをvoid* user
フィールドに保存することができなくなるため、ホストコールバックでそれが返されるためです。
あなたのホストコードの一部を共有しますか? vstホストを自分で作成しようとすると、どこから起動するのかわかりません。 –
@DanielRodrigues私はhttp://github.com/teragonaudio/MrsWatson/でオープンソースのVSTホストを持っています –