Comment puis-je faire au sujet de l'interaction avec VST programatically (i) Plugins pour synthétiser audio?

StackOverflow https://stackoverflow.com/questions/3122709

Question

Prenons, par exemple, le VSTi Triforce , par Tweakbench. Une fois chargé dans un hôte VST sur le marché, il permet à l'hôte d'envoyer un signal (probablement MIDI) au VSTi. Le VSTi traitera alors que le signal et la sortie audio synthétisé comme un instrument créé par logiciel dans le VSTi.

Par exemple, l'envoi d'une A4 (note MIDI, je crois) à l'VSTi lui fera la synthèse A au dessus du milieu C. Il envoie l'arrière de données audio à l'hôte VST, ce qui pourrait ensuite soit jouer sur mes haut-parleurs ou enregistrez-.wav ou un autre format de fichier audio.

Disons que j'ai Triforce , et je suis en train d'écrire un programme dans ma langue de choix qui pourrait interagir avec le VSTi en envoyant un à synthétiser la note A4, et enregistrer automatiquement une fichier sur le système?

Finalement, je voudrais être capable d'analyser un fichier MIDI d'une piste entière (à l'aide établies, les bibliothèques stables déjà disponibles à cet effet) et l'envoyer à l'VSTi de « rendre » / synthétiser dans un fichier audio .

Comment puis-je aller à ce sujet, et langue dois-je chercher à construire le cadre de base?

En fin de compte, il sera utilisé dans un projet basé sur Ruby, de sorte que tous les pointeurs vers des ressources spécifiques Ruby serait bien aussi.

Cependant, je suis juste essayer de comprendre fondamentalement comment l'API d'un VSTi fonctionne . (Je me suis rendu compte que cette question est très liée à la question de la construction d'un hôte VST en premier lieu, mais qui ne peut enregistrer des sorties VST fichier et ne pas les lire, et avec une portée beaucoup plus faible)

Merci d'avance pour toute aide =)

Était-ce utile?

La solution

Eh bien, puisque vous avez demandé, la langue idéale pour un projet comme celui-ci va être C ++. Bien qu'il existe des enveloppes pour les langues de niveau supérieur tels que Java et .NET pour le SDK VST, je ne pouvais pas trouver un pour Ruby (bien que je ne trouve ce projet plutôt cool qui vous permet de programme plugins VST dans Ruby ). Alors vous serez coincé faire un certain degré d'intégration de C / C sur votre propre.

Cela dit, vous avez deux options:

  1. Ecrire un hôte VST en C ++, et le lancer en tant que processus séparé de l'intérieur de Ruby.
  2. Intégrer votre code Ruby directement au SDK VST, et charger le plug-in de DLL / Bundles directement à partir de votre code. Ceci est probablement le plus propre mais beaucoup plus difficile à atteindre votre objectif.

J'ai écrit un VST hôte un certain temps de programmation tutoriel sur mon blog retour que vous trouverez peut-être utile dans les deux cas. Il détaille la façon dont vous ouvrez et de communiquer avec les plugins VST sur Mac OS X et Windows. Une fois que vous avez obtenu votre hôte pour charger les plug-ins, vous devez être en mesure soit d'envoyer des événements MIDI directement au plug-in, soit en les lisant à partir du fichier ou d'un type de communication entre votre code Ruby et l'hôte VST (c.-à-un pipe nommé, socket, fichier, etc.). Si vous n'êtes pas familier avec le protocole MIDI, consultez ces liens:

Comme vous l'avez déjà compris, VST est fondamentalement un protocole basé sur des blocs. Vous demandez de petits blocs de données audio du plug-in, et vous envoyez le long des événements MIDI à droite de plug-in avant de traiter ce bloc respectif. Assurez-vous que pas pour ignorer le champ delta MIDI; cela fera en sorte que le plug-in démarre le traitement de l'événement MIDI directement sur l'échantillon désiré. Dans le cas contraire, le plug-in sonnera un peu hors-tempo, en particulier dans le cas des instruments.

Le SDK VST est également basé autour de blocs à virgule flottante, de sorte que les données que vous obtenez en retour contiendra des échantillons individuels dans la gamme {-1,0 .. 1.0}. En fonction de votre format de sortie souhaité, vous devrez peut-être convertir en un autre format. Heureusement, il semble y avoir un binding Ruby pour la bibliothèque de audiofile , de sorte que vous peut être en mesure d'envoyer votre sortie dans ce afin de générer un fichier AIFF / WAV approprié.

En tout, ce sera un montant juste de travail pour arriver à votre objectif final souhaité, mais il est impossible par tout moyen. Bonne chance!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top