10
votes

Comment numériser / énumérer les dll de plug-in vst?

J'essaie de construire un petit programme qui héberge des effets VST et je voudrais numériser un dossier pour les dlls plugin.
Je sais comment trouver toutes les DLL mais maintenant j'ai les questions suivantes:

  • Quelle est la meilleure façon de déterminer si une DLL donnée est un plugin VST?
    J'ai essayé de voir si le DDL exporte la fonction appropriée et cela fonctionne bien pour les plugins réalisés avec les versions les plus récentes de la VST SDK, car il exporte une méthode appelée "vstpluginmain" mais les versions plus anciennes exportent une fonction "principale" plutôt générique. < / li>
  • Comment puis-je déterminer si le plugin est un effet ou un instrument?
  • Comment puis-je scanner les plug-ins VST Shell?
    Les plugins de shell sont essentiellement des dlls qui contiennent en quelque sorte plusieurs effets. Un exemple de ceci sont les plugins fabriqués par Waves Audio http://www.waves.com/

    PS: S'il y a une bibliothèque qui peut faire tout cela pour moi, merci de me le faire savoir.


2 commentaires

Seriez-vous prêt à partager une partie de votre code d'hôte? Essayer de créer un hôte de la VST moi-même, aucune idée où commencer.


@DanielroDrigues J'ai un hôte VST open source chez github.com/Teragonaudio/mrswatson


3 Réponses :


9
votes

Comment déterminer un plugin VST?

Une fois que vous avez trouvé MAIN / VSTPLUGINMAIN ... Appelez-le! Si ce qui est retourné est null, ce n'est pas une VST. Si ce qui est retourné, c'est un pointeur sur les octets "vstp" (voir vstint32 magique; /// dans eeffect.h), alors vous avez une VST. < / p>

Le vstpluginmain renvoie un pointeur sur une structure d'affecte. Vous devrez regarder cette structure.

effet ou instrument? Affect :: Drapeaux | (effllagssynth = 1 << 8)

Les VST Shell sont plus complexes:

catégorie sera kplugCategshell

Soutenir la cando "shellcategory".

Utilisez effshellgetnextplugin pour énumérer.

par exemple, répondez à audiomastercurrentaid dans votre rappel avec l'ID que vous voulez.


3 commentaires

Merci d'avoir répondu. Il y a juste quelque chose que je ne comprends pas complètement. Supposons que je trouve une DLL qui n'est pas un plugin, mais des exportations "principales" (qui semblent un nom assez commun ...), puis en retourne quelque chose. Est-ce que je ne vais pas avoir des problèmes si j'essaie de déré à la recherche de "VSTP"?


Potentiellement. Vous vérifieriez certainement si le pointeur était non nul. Vous pouvez également envisager de vérifier si votre rappel a été appelé. Il serait peu logique qu'un utilisateur ait stocké une DLL malveillante dans leur dossier VSTPlugins.


@DaveGamble Yea, ma principale préoccupation était un code malveillant. Bonne réponse!



1
votes

Si vous souhaitez développer votre application d'hôte VST dans .net Jetez un coup d'oeil à vst.net


0 commentaires

3
votes

@Dave Gamble a cloué, mais je voulais ajouter quelques objets sur les plugins VST Shell, car ils sont un peu difficiles à travailler avec.

Pour déterminer si une VST est un plug-in shell, envoie le effectplugcategory opcode sur le répartiteur du plug-in. S'il renvoie kplugcategshell , il s'agit d'un plug-in shell. Pour obtenir la liste des sous-plug-ins dans la coquille, appelez essentiellement effshellgetnextplugin jusqu'à ce qu'il renvoie 0. Exemple de code SNIPPIT (adapté à partir d'un hôte VST de travail ): xxx

si vous voulez réellement charger un plugin dans une coquille VST, c'est un peu plus délicieux. . Premièrement, votre hôte doit gérer le AudiomasterCurrentaid OPCODE dans le rappel hôte. Lorsque vous appelez la méthode de la VST VSTPLUGINMAIN () pour instancier le plug-in, il appellera le rappel hôte avec cet opcode et demandera l'identifiant unique qui doit être chargé.

parce que cela Callback est fabriqué avant la fonction principale renvoie (et donc, avant de délivre un Aeffect * à votre hôte), cela signifie que vous devrez probablement stocker l'ID de plug-in Shell Pour charger dans une variable globale, puisque vous ne pourrez pas enregistrer un pointeur sur des données significatives dans VOI * User du champ eeffect struct à temps pour qu'il soit réussi à vous dans le rappel de l'hôte.


0 commentaires