Algo-ritmi

Tutorial e idee su software musicali

Posts Tagged ‘unpack

Settima Parte: introduzione al VCA

con un commento

Nella terza parte dello schema, la nota midi immagazzinata nella lista creata precedentemente viene divisa di nuovo in pitch e velocity e questi due valori vengono inviati a due parti distinte del “circuito”: il pitch verrà trasformato in una frequenza da inviare all’oscillatore che emetterà il suono desiderato, la velocity verrà utilizzata per gestire l’andamento del volume nel tempo al quale l’oscillatore dovrà suonare, quello che in gergo viene chiamato Envelope Generator (EG) o Voltage Control Amplifier (VCA) nelle macchine analogiche.

VCA

In questo sequencer, che chiamerei “ad impulsi” – in quanto le note suonate sono cortissime (50 ms) – l’EG ha solamente due punti di inviluppo che sono:

1. il tempo che impiega a raggiungere il volume impostato dalla velocity
2. il tempo che impiega una volta raggiunto il volume massimo a tornare a zero

Anche se un po’ impropriamente, questo EG potrebbe essere considerato un “attack/release”, solitamente nei sintetizzatori i punti di inviluppo sono almeno 4: “attack/decay/sustain/release”, per qualche informazione in più su quest’argomento date un’occhiata a questo link: http://www.vintagesynth.com/techniques/faq.shtml alla voce “Envelope (VCA)”.

Ritornando al nostro schema e percorrendolo dall’alto verso il basso, abbiamo dunque la lista in arrivo dall’oggetto receive che viene suddivisa in pitch e velocity dall’oggetto unpack il quale genera in uscita rispettivamente dal primo outlet il pitch e dal secondo la velocity.

Come accennato prima, i due valori seguono a questo punto due strade diverse: il pitch passerà attraverso l’oggetto mtof che lo trasformerà in una frequenza in Hz e lo invierà all’oscillatore (di questo ne parlerò più avanti) mentre il valore della velocity andrà ad alimentare il meccanismo dell’EG.

Prima di procedere è necessario specificare un paio di cose: il volume di un segnale in MSP varia da zero a 1 e le connessioni degli oggetti in MSP trasmettono un segnale e non un valore, consiglio vivamente di leggere il manuale “tutorial and topics” di MSP per comprendere bene questi concetti.

L’ampiezza del segnale (volume) dovrà essere quindi un numero float (a virgola mobile) compreso tra zero e 1, quindi la velocity in arrivo dovrà essere divisa per il valore massimo possibile (127), quindi utilizzerò una divisione: / 127. (Ho scritto un numero float come divisore per avere in uscita un numero float).

Altra cosa importante è che l’EG deve entrare in azione solo nel caso in cui la velocity sia un valore superiore a zero: il controllo in questione è fatto da un gate che apre o chiude l’invio del valore della velocity in base al valore stesso, che deve essere superiore a zero. il confronto viene fatto con l’oggetto >, che restituisce 1 nel caso il confronto sia vero.

Da notare che per fare funzionare correttamente questa parte devo tenere in considerazione la regola di MAX per cui gli inlet sono letti sempre da destra verso sinistra, per cui è importante che l’oggetto > si trovi più spostato verso destra rispetto all’oggetto /, altrimenti il gate si aprirà ma il valore che vi passerà attraverso sarà quello precedente.

Ora che la velocity arriva nel posto giusto al momento giusto, posso implementare la gestione dell’EG utilizzando l’oggetto line~ di MSP che in base ad una lista genera un movimento nel tempo del segnale.

Il messaggio che alimenta la lista in entrata dell’oggetto line~ è così composto: “0, $1 10 0 120″, il che significa “in 10 millisecondi vai da zero a $1 (la velocity passata al messaggio), una volta raggiunto $1, in 120 millisecondi raggiungi zero”. Ecco così ricreato l’effetto di “attack/release”.

Moltiplicando il segnale in uscita da line~ attraverso l’operatore *~ con il segnale audio in arrivo dall’oscillatore, si avrà quindi la modulazione del volume dell’oscillatore nel tempo.

Written by lodevalm

Dicembre 11, 2007 alle 1:37 pm