|
Pagina 2 di 4
2. ELEMENTI DI MAX Cominciamo con il vedere com’è fatto un oggetto di Max:

Questo è un Object box chiamato select che presenta due ingressi (inlet) e due uscite (outlet). I dati entrano negli inlet, subiscono una qualche elaborazione, ed escono dagli outlet. Gli Object box svolgono la maggior parte delle funzioni di Max, ogni Object box ha un nome che ne definisce la funzione e un numero variabile di inlet e outlet. Un Object box, a seconda delle funzioni che svolge può avere uno o più argomenti (da non confondere, ovviamente, con gli argomenti di Csound): nel nostro caso l’argomento è “3”. Vediamo di chiarire questi punti: l’oggetto select serve a confrontare i numeri che entrano nell’inlet di sinistra con l’argomento (che, nel nostro caso è il 3 che appare dopo la parola select). Quando il numero che entra nell’inlet di sinistra è 3, dall’outlet di sinistra esce un messaggio che ci indica che il numero corrisponde all’argomento, quando invece il numero è diverso da 3, quel numero esce, invariato, dall’outlet di destra (questo perché potrebbe servire per ulteriori confronti o elaborazioni). A cosa serve l’inlet di destra? A cambiare l’argomento: se ad un certo punto volessimo confrontare i numeri che entrano nell’inlet di sinistra con il 4 invece che con il 3, ci basterà inviare il numero 4 all’inlet di destra, e il termine di confronto cambierà. Ecco alcuni esempi di oggetti disponibili in Max. Oggetti matematici:

Oggetti per la comunicazione via MIDI:

Oggetti per la gestione degli eventi nel tempo:

Oltre agli Object box ci sono gli oggetti grafici (User Interface Object) che permettono all’utente di modificare i dati con il mouse o con la tastiera. Uno dei più semplici è il Number box:

che ha un outlet da cui emette numeri che possono essere modificati facendovi scorrere sopra il mouse. Ecco un esempio (apri objects-1):

Qui abbiamo un Number box collegato all’Object + che ha l’argomento “5”. La funzione che svolge l’Object + è questa: a ogni numero che entra nell’inlet di sinistra viene sommato l’argomento e il risultato esce dall’outlet. Abbiamo collegato l’outlet con un altro Number box, così è possibile vedere il risultato dell’operazione. Se fate scorrere il mouse sul Number box in alto vedrete contemporaneamente modificarsi il numero presente nel Number box in basso. Con questo sistema di collegamenti fra i diversi Object è possibile creare strutture di grande complessità. Prima di vedere qualche altro esempio, diamo una rapida scorsa ai principali Object di Max cominciando con gli User Interface Object (apri objects-2):

Come si può vedere il Number box esiste in due versioni: quella in alto a sinistra serve ad emettere numeri interi (integer) e quella immediatamente sotto può emettere numeri che hanno anche una parte decimale (numeri floating point). C’è poi lo slider e il dial, che emettono numeri interi se vi si trascina sopra il mouse. Un oggetto leggermente più complesso è il kslider, che raffigura una tastiera. Facendo clic con il mouse su uno dei tasti, dall’outlet di sinistra esce il numero corrispondente alla nota MIDI azionata, e dall’outlet di destra la velocity, che è tanto più alta quanto più in alto viene premuto il tasto (vedremo poi come inviare questi dati a uno strumento MIDI). Il bang button emette un “bang” se si fa clic con il mouse. Cos’è un bang? E’ uno dei messaggi più importanti dell’ambiente Max; significa “vai, agisci, comincia ad elaborare, emetti dati” e serve in genere a far produrre un output a un oggetto o iniziare un processo di elaborazione. Nel nostro patch il bang button è stato collegato all’Object random che ogni volta che riceve un bang emette un numero random compreso tra zero e n-1 (n è l’argomento, in questo caso 12). Il toggle è un altro User Interface Object che emette alternativamente un 1 e uno 0 facendo clic con il mouse. 1 e 0 significano, in ambiente Max, rispettivamente “on” e “off”. Abbiamo collegato il toggle all’Object metro che quando riceve un “on” emette messaggi “bang” a intervalli regolari specificati nell’argomento (nel nostro caso ogni 500 millisecondi). L’ultimo Object di questa serie è il preset, che ha la funzione di memorizzare lo stato degli altri Object del patch, cioè quali numeri sono presenti nel Number box, in che posizione sono lo slider e il dial, eccetera. Facendo clic su uno dei quadratini del preset è possibile richiamare una configurazione precedentemente memorizzata, con shift-click è possibile memorizzare una configurazione. Nel nostro caso sono state memorizzate tre configurazioni indicate dai tre puntini presenti nella griglia. Vediamo ora come Max memorizza i dati (apri il patch objects-3):

L’oggetto table è un array, ovvero un “contenitore” dove possono essere memorizzati diversi numeri, ognuno dei quali ha un “indirizzo” che lo identifica. Gli indirizzi sono una serie di numeri interi consecutivi che partono da 0. Ad esempio se la table contiene una sequenza di tre elementi che sono 7, 4 e 5, significa che all’indirizzo 0 c’è il numero 7, all’indirizzo 1 il numero 4 e all’indirizzo 2 il numero 5. Per visualizzare un determinato numero bisogna fornire all’oggetto table l’indirizzo corrispondente nell’inlet di sinistra (vedi figura objects-3: all’indirizzo 2 corrisponde il numero 5). Facendo doppio clic sull’Object table si apre una tabella che può essere editata graficamente.

Si può disegnare una qualunque curva all’interno della table. La rappresentazione grafica ci dà gli indirizzi lungo l’asse delle X (l’asse orizzontale) e le quantità corrispondenti lungo l’asse delle Y (verticale). Nella figura vediamo una table che può contenere 128 numeri (che avranno quindi l’indirizzo che varia da 0 a 127). Per memorizzare e inviare messaggi arbitrari si può usare il Message box. Facendo clic su un Message box il suo contenuto viene inviato agli Object collegati. Nel nostro esempio abbiamo collegato diversi messaggi all’Object Text, un oggetto utilissimo per compilare partiture Csound. I messaggi ricevuti da Text vengono memorizzati in un file di testo nell’ordine in cui sono stati ricevuti. Inviando più volte i vari messaggi collegati e aprendo (con un doppio clic) l’Object Text si ottiene un risultato simile a questo:

Da notare che i Message box sulla destra non contengono testi da memorizzare ma comandi da eseguire: “cr” è un ritorno di carrello, “clear” cancella il testo memorizzato, “write” lo scrive su disco e “read” legge un file di testo dal disco. Un altro modo per memorizzare e inviare i messaggi è quello di utilizzare un Pop-up menu Object (qui collegato ad un oggetto sequencer che, quando è collegato con i relativi oggetti MIDI, può leggere, scrivere, memorizzare ed eseguire eventi MIDI): facendo clic sopra l’oggetto si apre un menu che contiene i vari messaggi da inviare. I messaggi possono essere, naturalmente, modificati a piacere. E’ possibile selezionare le voci di un Pop-up menu anche inviandogli un numero intero compreso tra 0 e (numerodellevoci-1). Ad ogni numero corrisponde una voce del menu. Abbiamo ora abbastanza elementi per fare un esempio un po’ più complesso. Aprite il patch “sentenziatore”:

Qui abbiamo un bang button che invia il suo bang ad un oggetto chiamato bangbang; quest’ultimo ha un numero di outlet pari al suo argomento (in questo caso 6) e invia un bang da ciascun outlet. Il bang attiva un generatore random che emette numeri tra 0 e 8, questi numeri sono gli indirizzi delle voci contenuti in 5 diversi Pop-up menu2 , il cui contenuto viene inviato all’Object Text per formare una frase. Alla fine della frase c’è il comando “cr” che ci manda a capo per ricevere la prossima frase.
Per chi non avesse un Macintosh riportiamo alcune frasi ottenute dal patch:
un pollo incollò pudicamente un ginocchio ad un ragazzino permaloso una ragazza bagnò maliziosamente il vestito a un tecnico del suono un pollo spezzò intenzionalmente i capelli a un povero diavolo un'entità misteriosa baciò maliziosamente la casa a una vestale un pollo mostrò con voluttà il naso a un tecnico del suono un cane tirò nervosamente il naso a un povero diavolo una fattucchiera rubò con voluttà un occhio a una vestale un cane baciò svogliatamente il naso a una top model un uomo morse coscienziosamente i capelli ad un ragazzino permaloso
Per quanto assolutamente futile, l’esempio ci lascia intuire come sia possibile costruire partiture per Csound; ci arriveremo tra poco. Anche le liste sono importanti in ambiente Max (apri patch objects-4):

Una lista è un insieme di elementi (numeri interi, floating, caratteri alfanumerici) considerata come un’entità unica. Ci sono oggetti che assemblano elementi semplici in liste, come pack e altri oggetti che dividono la lista in elementi semplici, come unpack. Gli argomenti di pack e unpack determinano rispettivamente il numero di inlet e outlet, nonché il tipo di elemento semplice (intero, floating, alfanumerico etc.) Un oggetto che utilizza le liste è il Multislider (un insieme di più slider che possono essere modificati contemporaneamente) che emette liste contenenti le posizioni dei suoi slider. Altri oggetti molto utili sono quelli che svolgono funzioni matematiche, vediamone alcuni con qualche esempio (patch objects-5):

In altro a sinistra abbiamo oggetti semplici che svolgono le quattro operazioni e l’operazione modulo (Object %). A destra c’è un Object molto flessibile: expr. Con expr è possibile scrivere espressioni con una sintassi simile al C, inserendo variabili (contrassegnate dal simbolo $) che diventano inlet dell’oggetto: in pratica se l’espressione contiene ad esempio 3 simboli $, l’Object box avrà 3 inlet. Il simbolo $ è seguito da una i o una f che specifica se il numero è integer o floating point, e da un numero che specifica qual è il suo inlet di riferimento (1 è l’inlet più a sinistra, 2 è l’inlet alla destra del primo e così via). Nel primo esempio (sqrt($i1) * $i2), la radice quadrata (funzione sqrt) del numero che entra dall’inlet di sinistra ($i1) viene moltiplicata (operatore *) per il numero che entra dall’inlet di destra ($i2). Il secondo esempio fa la conversione della nota MIDI in Hertz. Da notare qui un’altra caratteristica del Number box: la possibilità di visualizzare i numeri interi come note MIDI (qui il Do centrale che equivale al numero 60) E’ arrivato il momento di un altro esempio un po’ più complesso: un interpolatore di liste (apri interpolazioni)

In questo esempio usiamo l’Object vexpr che funziona come expr ma accetta liste oltre che singoli numeri (le liste in questo caso gli arrivano dal Multislider). Il risultato è un’interpolazione lineare del contenuto dei due Multislider in alto. Muovendo il cursore si stabilisce l’influenza che ciascuno dei due Multislider ha sul risultato finale. Nel nostro caso vediamo che il Multislider in basso è circa a metà strada tra la prima lista di valori e la seconda. Qualcuno si starà chiedendo come fa Max a comunicare con le apparecchiature MIDI; naturalmente ci sono molti Object che svolgono questa funzione (apri patch objects-6):

Gli Object notein, ctlin, bendin, pgmin, ricevono rispettivamente i messaggi di nota, controller, pitchbend e program change da uno strumento MIDI collegato al computer. Per ognuno di questi oggetti c’è un oggetto “out” corrispondente. Con l’Object “Hz->Midi” (un subpatch creato dall’autore di questo capitolo) si può fare un esperimento interessante: rendere microtonale un qualunque strumento MIDI, cioè dargli la possibilità di suonare note a una frequenza qualsiasi e non solo a quelle della scala temperata. L’Object “Hz->Midi” accetta in input un valore di frequenza in Hertz e restituisce la nota MIDI e un valore in cents da aggiungere alla nota per ottenere la frequenza in input. Con expr si possono trasformare i cents in un valore di pitchbend. La nota suonata verrà quindi alterata dal pitchbend per ottenere la frequenza desiderata. Se collegate uno strumento MIDI al computer e regolate nel patch la giusta ampiezza di pitchbend, lo strumento potrà emettere, con un certo grado di approssimazione, note a qualunque frequenza, anche non temperata.
2 In ogni menù sono contenuti i diversi pezzi della frase, che combinandosi danno origine a sentenze sempre diverse (nella figura vediamoche la frase formata è "una ricca ereditiera incollò maliziosamente un occhio a una top model").

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