2011-05-26 14 views
6

Voglio creare uno strumento VST che abbia 16 ingressi MIDI e almeno 16 uscite audio. Simile a come fanno kontakt o halion.VST instrument multiple in e out

Qualche idea?

+1

Ma hai già qualche esperienza con la programmazione vst? Trovo sorprendente che 16 canali dovrebbero essere più difficili da implementare di 2, non è il caso quando si costruiscono plugin vst con software come SynthMaker (che è l'unico modo che ho fatto finora). Lì, puoi semplicemente aggiungere una quantità arbitraria di input e output. – leftaroundabout

+0

Qualche esperienza, ho usato synth maker prima di. Ma il mio nuovo progetto deve essere in C++. –

+2

Un'altra cosa: hai davvero bisogno di 16 ingressi MIDI, o solo 16 MIDI _channels_ (che è il numero offerto da una qualsiasi connessione MIDI)? – leftaroundabout

risposta

4

Come notato da @leftaroundabout, è improbabile che siano necessari 16 ingressi e uscite, in particolare per uno strumento. Tuttavia, disporre di 16 ingressi MIDI e 16 uscite audio è molto comune per le drum machine e altri strumenti multitraccia in cui l'utente potrebbe voler elaborare singolarmente ciascuna voce. Gli ingressi audio in generale non sono particolarmente utili per gli strumenti nel loro complesso.

Detto questo, è sufficiente un'istanza il plugin in questo modo:

MyPlugin::MyPlugin(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, 0, kNumParameters) { 
    if(audioMaster) { 
    setNumInputs(0); 
    setNumOutputs(16); 
    } 
    // other constructor stuff ... 
} 

Questo è il punto di partenza. Tuttavia, poiché la stragrande maggioranza dei plug-in è solo stereo, ci sono un sacco di altri lavori che dovrai fare per farti fornire all'host 16 canali di output (supponendo che lo supporti). Probabilmente dovrai chiamare lo getSpeakerArrangement() e lo setSpeakerArrangement() ad un certo punto e anche sostituire lo getOutputProperties().

Come per i canali MIDI, l'host non deve trattarli in modo diverso dal normale. Ti verranno consegnati eventi MIDI regolari, sotto forma di VstMidiEvent s che conterranno dati MIDI regolari (cioè, per tutti i 16 canali, se l'utente lo sceglie). Questa è la parte più semplice: è la messa a punto degli output che è il trucco.

+0

Suppongo tu sappia come funziona Kontakt. Come posso impostare il mio vst in modo che ogni canale midi possa essere inviato a un canale diverso all'interno del vst? –

+2

Tutti gli eventi midi vengono inviati insieme. Separare manualmente gli eventi midi in arrivo in base al numero del canale. – Shannon

+1

Cosa ha detto @Shannon. ;) Fondamentalmente, prendi il boccone inferiore dal byte di stato per ottenere il canale e inviarlo alla rispettiva voce. Il modo in cui gestisci i 16 canali fa parte del design interno del tuo plugin e non ha nulla a che fare con il framework VST nel suo complesso. –