Algo-ritmi

Tutorial e idee su software musicali

Posts Tagged ‘pack

Sesta Parte: gestire pitch e velocity

nessun commento

Il primo blocco della nuova patch non presenta particolari differenze rispetto alla versione precedente:

tempo and matrix

l’unica differenza è l’aggiunta di un messaggio clear, che svuota la griglia del matrixctrl (per informazioni aggiuntive, consiglio di leggere il tutorial numero 3).

La sezione successiva è invece un’implementazione della precedente versione:

column to midi note

La lista binaria composta dall’output della colonna del matrixctrl viene prima rovesciata (questo serve perchè le note partono da basso, mentre invece la lista arriva in ordine dall’alto verso il basso) tramite zl rev, dopo di che viene estratto l’indice che vale 1 (ossia il nostro pitch) tramite zl sub 1. A questo punto se trovo un 1 nella lista, zl sub 1 invierà l’indice a expr che lo somma a 59 per ottenere una nota nell’ottava centrale di una tastiera e contemporaneamente dal suo secondo outlet leggerò 1 (nel caso sia stato trovato il valore ricercato nella lista) o zero (il valore non è stato trovato).

Seguendo il segnale in uscita dal secondo outlet di zl sub 1, vediamo innanzi tutto che l’output viene inviato a un moltiplicatore * 127, questo perchè il valore della velocity ha per convenzione un range che va da 1 (nota suonata pianissimo) a 127 (nota suonata al massimo del suo volume) con il valore zero che esprime un “note off”, ho aggiunto un numberbox che va da 0 a 127 nel secondo inlet della moltiplicazione di modo da poter controllare il valore della velocity. Per esempio selezionando 64, la moltiplicazione darà come risultato 1*64, quindi la velocity sarà la metà.

I due dati rilevanti della nota in uscita da questo blocco sono immagazzinati in una lista attraverso l’oggetto pack. Questo oggetto imposta il numero di inlet in base al numero di argomenti, nel mio caso, gli argomenti sono 2: pitch (nel primo inlet) e velocity (nel secondo inlet) e crea una lista in uscita composta dai relativi valori degli inlet (o degli argomenti).

A questo punto non resta che gestire il “note off”, che ho impostato 50 millisecondi dopo la nota con velocity maggiore a zero, una nota cortissima.

Ho dunque utilizzato l’oggetto pipe, che ritarda l’invio di un numero in arrivo nel primo inlet di un determinato intervallo in millisecondi. L’intervallo è definibile attraverso il suo secondo inlet o come nel mio caso specificandolo come argomento nell’oggetto.

Il “note off” sarà quindi un ritardo della nota suonata con la velocity impostata a zero, per cui pipe è connesso direttamente al primo inlet di pack e gli passerà il pitch dell’ultima nota ricevuta ed al tempo stesso è collegato ad un button che emetterà un bang ad un messaggio che passa zero al secondo inlet di pack, il tutto con un ritardo di 50 millisecondi rispetto all’ultima nota suonata.

A questo punto il gioco è fatto, ho creato un “modulo” che crea una lista composta da due valori che rappresentano una nota midi. Il primo valore è creato in base al pitch ricevuto dal matrixctrl ed il secondo in base alla velocity desiderata (per default 127) tramite il numberbox con l’etichetta “velocity”. Ad ogni nota corrisponde il relativo “note off” che ha un ritardo di 50 millisecondi rispetto alla nota suonata.

Questa lista viene inviata tramite un oggetto send con l’etichetta “seqNote” al prossimo blocco che si occuperà di far suonare la nota midi ricevuta.

Written by lodevalm

Dicembre 10, 2007 alle 2:37 pm