Wie scanne / lese ich vst plugin dlls?

8

Ich versuche ein kleines Programm zu erstellen, das vst-Effekte hostet und ich möchte einen Ordner nach Plugin-DLLs durchsuchen.
Ich weiß, wie man alle dlls findet, aber jetzt habe ich die folgenden Fragen:

  • Was ist der beste Weg zu bestimmen, ob eine bestimmte DLL ein VST-Plugin ist?
    Ich habe versucht, nur zu sehen, ob das ddl die richtige Funktion exportiert und das funktioniert gut für Plugins mit den neueren Versionen des vst sdk, da es eine Methode namens "VstPluginMain" exportiert, aber ältere Versionen exportieren eine eher generische "main" -Funktion / li>
  • Wie stelle ich fest, ob das Plugin ein Effekt oder ein Instrument ist?
  • Wie scanne ich vst shell plugins?
    Shell-Plugins sind grundsätzlich DLLs, die mehrere Effekte enthalten. Ein Beispiel dafür sind die Plugins von Waves Audio Ссылка

ps: Wenn es eine Bibliothek gibt, die all das für mich tun kann, lass es mich wissen.

    
Roald 15.07.2009, 01:34
quelle

3 Antworten

7

Wie wird ein VST-Plugin ermittelt?

Sobald du main / VSTPluginMain gefunden hast, rufe es an! Wenn das Ergebnis NULL ist, handelt es sich nicht um ein VST. Wenn was zurückgegeben wird, ist ein Zeiger auf die Bytes "VstP" (siehe VstInt32 magic; ///< must be #kEffectMagic ('VstP') in aeffect.h), dann haben Sie eine VST.

Der VSTPluginMain gibt einen Zeiger auf eine AEffect-Struktur zurück. Sie müssen diese Struktur betrachten.

Effekt oder Instrument? AEffect::flags | (effFlagsIsSynth = 1 << 8)

Shell VSTs sind komplexer:

Die Kategorie wird kPlugCategShell

sein

Unterstützen Sie die "shellCategory" canDo.

Verwenden Sie effShellGetNextPlugin zum Aufzählen.

Zum Beispiel antworten Sie auf audioMasterCurrentId in Ihrem Rückruf mit der gewünschten ID.

    
Dave Gamble 15.07.2009, 02:49
quelle
3

@Dave Gamble hat es genagelt, aber ich wollte ein paar Dinge über VST Shell Plugins hinzufügen, da sie ein wenig schwierig zu handhaben sind.

Um festzustellen, ob es sich bei einer VST um ein Shell-Plugin handelt, senden Sie den effGetPlugCategory -Opcode an den Plugin-Dispatcher. Wenn es kPlugCategShell zurückgibt, dann ist es ein Shell-Plugin. Um die Liste der Sub-Plugins in der Shell zu erhalten, rufen Sie im Grunde effShellGetNextPlugin auf, bis sie 0 zurückgibt. Beispielcode snippit (angepasst von einem Arbeiten VST-Host ):

%Vor%

Wenn Sie tatsächlich ein Plugin in eine VST-Shell laden wollen, ist es etwas komplizierter. Zunächst muss Ihr Host den Operationscode audioMasterCurrentId im Host-Callback verarbeiten. Wenn Sie die VSTPluginMain() -Methode des VST aufrufen, um das Plugin zu instanziieren, ruft es den Host-Callback mit diesem Opcode auf und fragt nach der eindeutigen ID, die geladen werden sollte.

Da dieser Callback vor gemacht wird, kehrt die Hauptfunktion zurück (und daher, bevor sie einen AEffect* an Ihren Host liefert), müssen Sie wahrscheinlich die Shell-Plugin-ID speichern Laden Sie eine globale Variable, da Sie nicht in der Lage sind, einen Zeiger auf irgendwelche sinnvollen Daten im void* user -Feld der AEffect -Struktur rechtzeitig zu speichern, damit er Ihnen im Host-Callback zurückgegeben wird.

    
Nik Reiman 17.05.2013 16:09
quelle
1

Wenn Sie Ihre VST-Host-Anwendung in .NET entwickeln möchten, schauen Sie sich VST.NET

an     
obiwanjacobi 03.02.2010 11:56
quelle

Tags und Links