|
Pagina 4 di 4 4. MAX E MSP
MSP è un’estensione di Max che permette la sintesi e l’elaborazione del suono in tempo reale. Dal momento che sfrutta lo stesso ambiente, le sue componenti sono visualizzate come elementi grafici da connettere tra loro, esattamente come gli oggetti di Max. Gli oggetti MSP svolgono tutte le funzioni tipiche dei linguaggi di sintesi: ci sono oscillatori, inviluppi, filtri, delay, operatori matematici etc. Questo ci dà la possibilità di ricreare graficamente le diverse tecniche di sintesi ed elaborazione del suono di cui si parla in questo libro. Vediamo prima di tutto alcuni elementi di MSP (apri patch objects-8):

Qui abbiamo alcuni oggetti MSP collegati tra loro e con oggetti Max. Notiamo che gli oggetti MSP hanno collegamenti a strisce gialle e nere (è una convenzione per indicare che trasmettono segnali audio, non dati MIDI o di controllo) e che il loro nome finisce sempre con il simbolo “~”. L’oggetto cycle~ è un oscillatore che legge una tabella contenente una forma d’onda, di default questa tabella contiene una sinusoide, ma può essere qualunque onda definita dall’utente, anche un suono registrato. L’inlet di sinistra di cycle~ riceve la frequenza, quello di destra la fase. I valori (campioni digitali) in uscita variano tra -1 e +1 (e non tra -32768 e +32767 come in Csound). Per modificare l’ampiezza del suono bisogna collegare l’uscita di cycle~ con il moltiplicatore di segnali *~. Vediamo che nell’esempio al moltiplicatore è collegato da una parte l’oscillatore e dall’altra l’Object line~ che serve ad interpolare linearmente i diversi valori ricevuti (in questo caso la durata dell’interpolazione è di 20 millisecondi). L’Object line~ viene usato qui per evitare lo zipper noise, cioè il rumore indesiderato dovuto ad improvvisi cambiamenti di ampiezza. L’oggetto in basso a sinistra (dac~) è un convertitore digitale-analogico ed è collegato alla porta (o scheda) audio del computer. Per sentire il suono bisogna fare click sul messaggio “startwindow” e portare l’ampiezza a 0.1 o più. Sentiremo di default una sinusoide alla frequenza di 440 Hz, ma agendo sul Number box di sinistra possiamo variare la frequenza. Per interrompere il suono faremo click sul messaggio “stop”. Abbiamo già abbastanza elementi per riprodurre alcune tecniche di sintesi di cui si è parlato nei precedenti capitoli. Vediamo quindi come è possibile realizzare un patch per la modulazione d’ampiezza così come è stata illustrata nel paragrafo 11.2 (cfr.). Rivediamo innanzitutto il diagramma di flusso relativo:

e poi vediamo il patch corrispondente in Max/MSP (apri patch “Modulazione d’ampiezza”)

Vediamo che ci sono dei Number box in cui possiamo impostare la frequenza della portante, quella della modulante, l’indice di modulazione (che può variare tra 0 e 1) e la variabile “amp”, che serve ad impostare il DC offset e l’ampiezza della modulante (che si ottiene moltiplicando “amp” per l’indice di modulazione5 ); anche “amp” può variare tra 0 e 1. Notiamo anche che ci sono due oggetti apparentemente nuovi: “p mod~” e “p port~”, in realtà si tratta di subpatch, cioè piccoli moduli costituiti da oggetti Max/MSP che svolgono una determinata funzione. Apriamo con un doppio click il subpatch “p mod~” (ovvero la modulante):

Quello che vediamo è l’interno del modulatore: i due oggetti che si trovano sotto le scritte “frequenza” e “I * amp” sono gli inlet del subpatch, mentre l’oggetto che si trova sopra la scritta “out” è l’outlet, da cui esce il segnale del modulatore. Il segnale che esce dall’oscillatore (cycle~) viene moltiplicato per l’ampiezza (I * amp) che può variare tra 0 e 1, avremo quindi in uscita una sinusoide che oscilla (al massimo) tra -1 e +1. La presenza dell’Object line~ nel percorso di “I * amp” ha lo scopo di interpolare le variazioni dell’ampiezza per evitare lo zipper noise. Il segnale che esce dal subpatch mod~ diventa unipolare con l’aggiunta del DC offset (vedi il patch principale) che vale “amp”: dal momento che questo valore può essere al massimo 1, sommando la modulante otterremo un’oscillazione unipolare (massima) tra 0 e 2, che è fuori dal range di valori ammesso. Per normalizzare i valori c’è un oggetto “*~” che moltiplica il segnale per 0.5 (cioè lo divide per 2) e ci garantisce che l’oscillazione unipolare non supererà il valore 1. Il subpatch “p port~” (ovvero la portante) è simile a “p mod~”:

C’è da notare che, essendo l’ampiezza collegata ad un segnale audio (il modulatore) non è necessario inserire nel percorso l’interpolatore line~. Tornando al patch principale vediamo che in alto a sinistra c’è un Object preset in cui sono memorizzate delle configurazioni da provare. Come al solito per ascoltare il suono si fa click sul messaggio “startwindow” e per interromperlo si fa click su “stop”. Vediamo ora la traduzione dell’orchestra che troviamo nel paragrafo 11.3 (apri patch “Modulazione ad anello”):

Dal momento che nella modulazione ad anello non viene fatto uso del DC offset, qui vengono semplicemente moltiplicate le uscite di due oscillatori cycle~. Rispetto al patch precedente troviamo un nuovo elemento: l’ampiezza infatti viene regolata con l’Object gain~ che è un fader per i segnali audio. Non c’è molto altro da dire su questo patch che è piuttosto semplice. La modulazione di frequenza pone qualche problema in più, come sappiamo dal paragrafo 12.1 è necessario infatti calcolare l’ampiezza della modulante in termini di indice di modulazione:
ampiezza = indice di modulazione * frequenza della modulante
(apri la patch “FM semplice”)

Qui abbiamo due subpatch, uno per la portante e l’altro per la modulante. Apriamo la modulante (doppio click su “p FMmod~”):

Vediamo che la frequenza della modulante e l’indice di modulazione vengono moltiplicate tra loro e il risultato viene impiegato come ampiezza della modulante, ovvero come quantità di deviazione che subisce la frequenza della portante (cfr. paragrafo 12.1 e 12.2). Il resto del patch è semplice da analizzare e lo lasciamo come esercizio al lettore (osservate il contenuto del subpatch “p FMPort~” aprendolo con un doppio click). Nel paragrafo 12.3 si parla di famiglie spettrali e di rapporti portante/modulante; il patch “Famiglie Spettrali” ci permette di impostare la frequenza modulante in rapporto alla portante:

Come si vede nei due Number box in alto si possono variare il numeratore e il denominatore di una frazione che servirà da moltiplicatore per la frequenza portante, il risultato dell’operazione viene usato come frequenza modulante6. Sarà così possibile sperimentare diversi rapporti portante/modulante generando varie famiglie spettrali. Abbiamo detto che la frequenza della modulante varia in rapporto alla portante, questo significa che variando la frequenza della portante non avremo un cambiamento timbrico, ma una variazione di altezza. Sono possibili configurazioni di qualunque livello di complessità (se la potenza della macchina che si ha a disposizione lo permette, naturalmente), vediamo ad esempio un patch per realizzare la FM con portanti multiple (apri patch “FM con port. multiple”:

Ogni portante ha la sua frequenza e la sua intensità (che può essere impostata con l’Object gain~): notiamo che per sommare dei segnali audio è sufficiente collegarli ad una stessa uscita, MSP provvederà a generare un segnale che è la somma dei segnali prodotti. Concludiamo con un patch che ci permette di impostare gli inviluppi di una FM semplice (apri patch “FM con inviluppi”):

Al centro del patch ci sono due Object function, con cui si può tracciare graficamente un inviluppo. Function emette liste di valori che possono essere utilizzate da line~ per creare gli inviluppi. Al modulo FM è stato applicato un kslider che come sappiamo ci permette di suonare note temperate. Kslider emette valori MIDI, mentre il subpatch FM vuole frequenze in hertz, per questo l’uscita di kslider è collegata all’Object MSP mtof, che fa la conversione da MIDI a hertz.
Oltre a Max/MSP per Macintosh, esistono altri programmi simili (di pubblico dominio, a differenza di Max che è commerciale), per diverse piattaforme. Ricordiamo: Pd, un software per la sintesi in tempo reale creato da Miller Puckette (il primo sviluppatore di Max). E’ molto simile a Max/MSP ed esiste per IRIX, NT, e Linux (sito web: http://crca.ucsd.edu/~msp/software.html).
Un altro software molto simile a Max è jMax, sviluppato all’IRCAM di Parigi per Mac OS X, Linux e SGI. Realizzato in Java e C, punta molto sulla portabilità multipiattaforma. Il sorgente è liberamente disponibile sotto GNU General Public License (vedi: http://www.ircam.fr, http://www.gnu.org/directory/jMax.html).
In questa breve introduzione abbiamo solo scalfito la superficie di quello che è possibile fare con Max e MSP, chi volesse approfondire l’argomento può consultare i siti internet elencati qua sotto.
SITI INTERNET IN CUI E’ POSSIBILE REPERIRE ALTRE INFORMAZIONI SU MAX/MSP
www.cycling74.com/index.html Sito ufficiale di Max/MSP, dove ci si può anche iscrivere alla mailing list.
www.pluggo.com Estensione Max/MSP per realizzare plug-in VST 2.
ftp://ftp.ircam.fr/pub/forumnet/max/ Oggetti, Patch e Applicazioni Max/MSP
www.geocities.com/CapeCanaveral/Lab/7055/ Risorse, Links e Tutorial per Max
http://maxmsp.tripod.com Software/ Max, MSP, Nato Externals e Patches
http://node.net/unmax/ sito Max "non ufficiale", contiene oggetti e molti link utili
www.music.columbia.edu PeRColate/ sintesi per modelli fisici Max/MSP
http://cnmat.CNMAT.Berkeley.EDU/Max/ Altri oggetti Max, Tutorial etc.
5 Come vedete è stato necessario collegare il Number box corrispondente alla variabile "amp" ad un Bang button che va all'ingresso dell'indice di modulazione. Questo perché l'oggetto "*", come la maggior parte degli oggetti Max, agisce solo quando riceve un messaggio nell'inlet di sinistra: se il messaggio è un numero verrà utilizzato per la moltiplicazione, se invece è un "bang" verrà utilizzato l'ultimo numero ricevuto. Quindi ogni volta che variamo "amp" (nell'inlet di destra), il "bang" (nell'inlet di sinistra) ci permette di effettuare la moltiplicazione. Con gli oggetti MSP che elaborano i segnali (come ad esempio "*~") non è necessario questo "trucco", perché il segnale è un flusso di dati che viene aggiornato continuamente.
6 Anche qui è stato necessario collegare il Number box corrispondente al denominatore ad un Bang button che va all'ingresso del numeratore e la stessa cosa avviene per l'Object box * più sotto. Per una spiegazione cfr. la nota 5.

This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Italy License.
|