Domanda

Prendiamo, per esempio, il VSTi Triforce , da Tweakbench. Quando caricato in qualsiasi host VST sul mercato, esso consente all'host di inviare un segnale (presumibilmente MIDI) alla VSTi. Il VSTi sarà quindi elaborare il segnale e l'uscita audio sintetizzato come creato da uno strumento software all'interno del VSTi.

Per esempio, l'invio di una (nota MIDI, credo) A4 al VSTi lo farà di sintetizzare la A di cui sopra Medio C. Si invia la parte posteriore dei dati audio al VST Host, che poi potrebbe o giocare sul mio altoparlanti o salvarlo in .wav o qualche altro formato di file audio.

Diciamo che ho Triforce , e sto cercando di scrivere un programma in mia lingua di scelta che potrebbe interagire con il VSTi inviando una nota A4 da sintetizzare, e automaticamente il salvataggio in un file sul sistema?

Alla fine, mi piacerebbe essere in grado di analizzare un file MIDI intera di un solo brano (utilizzando stabiliti, biblioteche stabili già disponibili per questo scopo) e inviarlo al VSTi a "render" / sintetizzare in un file audio .

Come posso fare per questo, e in che lingua devo cercare di costruire il quadro di base?

In definitiva, sarà utilizzato in un progetto di Ruby-based, quindi eventuali riferimenti a specifiche risorse di Ruby sarebbe bello pure.

Comunque, sto solo cercando di capire in fondo come l'API di un VSTi funziona . (Mi sono reso conto che la questione è molto legato alla domanda di costruzione di un host VST, in primo luogo, anche se uno che può solo salvare le uscite VST in un file e non riprodurle, e con notevolmente più piccolo campo di applicazione)

Grazie in anticipo per qualsiasi aiuto =)

È stato utile?

Soluzione

Bene, dal momento che hai chiesto, il linguaggio ideale per un progetto come questo sta per essere C ++. Anche se ci sono wrapper per linguaggi ad alto livello come Java e .NET per il VST SDK, non riuscivo a trovare uno per Ruby (anche se ho trovato questo progetto piuttosto freddo che permette di plugin VST programma in Ruby ). Così sarete bloccato facendo un certo grado di integrazione C / C ++ da soli.

Detto questo, avete fondamentalmente due opzioni qui:

  1. Scrivi una VST Host in C ++, e lanciarlo come un processo separato dall'interno di Ruby.
  2. Integra il tuo codice Ruby direttamente al VST SDK e caricare il plugin DLL / Bundles direttamente dal codice. Questo è probabilmente il più pulito, ma così difficile da raggiungere il tuo obiettivo.

Ho scritto una VST ospite programmazione di esercitazione sul mio blog un po 'indietro, che si possono trovare utili in entrambi i casi. Esso fornisce informazioni su come aprire e comunicare con i plugin VST sia su Mac OSX e Windows. Una volta che avete ottenuto il vostro ospite a caricare i plugin, è necessario essere in grado né di inviare gli eventi MIDI direttamente al plugin, avviene mediante la lettura dal file o un certo tipo di comunicazione tra il codice Ruby e l'host VST (ad esempio, un named pipe, socket, file e così via). Se non si ha familiarità con il protocollo MIDI, prova anche questi link:

Come forse avrete già capito, VST è fondamentalmente un protocollo basato su blocchi. Si richiede piccoli blocchi di dati audio dal plugin, e si invia su uno qualsiasi degli eventi MIDI a destra plug-in prima di elaborare quel blocco in questione. Assicurarsi non per ignorare il campo delta MIDI; questo farà sì che il plugin inizia l'elaborazione dell'evento MIDI direttamente sul campione desiderato. In caso contrario, il plugin suonerà un po 'fuori-tempo, soprattutto nel caso di strumenti.

Il VST SDK si basa anche intorno blocchi in virgola mobile, in modo da tutti i dati si torna conterrà i singoli campioni nell'intervallo {-1.0 .. 1,0}. A seconda del formato di output desiderato, potrebbe essere necessario convertire questi per qualche altro formato. Fortunatamente, sembra che ci sia un Rubino vincolante per la libreria file audio , in modo da può essere in grado di inviare l'output in che al fine di generare un file corretto AIFF / WAV.

In tutto, sarà una discreta quantità di lavoro per raggiungere il tuo obiettivo finale desiderato, ma non è impossibile con qualsiasi mezzo. Buona fortuna!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top