Muri Invisibili
Performance audiovisiva per l'Auditorium San Fedele di Milano.
Quando
Maggio 2025
Dove
Auditorium San Fedele, Milano
Ruolo
Video e regia, patch Max, partitura MIDI
Strumenti
Max/MSP, Jitter, Ableton Live 12, OSC, Syphon
Il sistema è in due parti. Una sessione Ableton Live contiene la musica e, sulla stessa timeline, la partitura che comanda l'immagine. Una patch Max/MSP genera il video in tempo reale leggendo quella partitura. Le due macchine comunicano via MIDI e OSC, e non condividono nient'altro: nessun file video, nessun montaggio.
Il video qui sotto è il render uscito da questo sistema. È quello che è stato proiettato in sala.
Il video
Non c'è nessun filmato dentro. Ogni fotogramma è disegnato da una GPU a 1920×1080 e 60 fotogrammi al secondo, ed è composto da tre soli oggetti geometrici: una nuvola di punti, un reticolo di linee, e un secondo reticolo disegnato in lines_adjacency. Sono tutti bianchi, su nero, con opacità fra 0,06 e 0,30: l'immagine non ha superfici piene, è fatta di accumulo.
Le forme vengono da un alfabeto cuneiforme costruito per il progetto. La patch legge le matrici preparate in preproduzione, le deforma, e le fa passare per una catena di cinque stadi: scorrimento, sfocatura, rumore, un incrocio fra due immagini, e una vignettatura. Poi l'immagine esce via Syphon.
Come è stato prodotto questo file. Il video è il render del sistema, catturato senza audio. L'audio è un bounce separato della sessione Ableton, montato in sincrono in DaVinci Resolve: le due tracce stanno insieme esattamente come stavano nel sistema che le ha generate. In sala è stato proiettato dentro l'insieme di altri lavori fatti da altri gruppi di studenti.
La cronologia. Il pezzo è diviso in blocchi da dodici cue MIDI. Ogni riga è un punto in cui la partitura cambia stato, e si verifica scorrendo il video. La luminanza è la media misurata sui fotogrammi del blocco, da 0 a 255.
| Tempo | Cue | Cosa cambia | Luminanza |
|---|---|---|---|
| 0:00 | apertura, quasi al buio | 7,5 | |
| 0:26,9 | start | parte la dissolvenza in ingresso, 5 secondi | 6,1 |
| 0:30,1 | lines ×4 | quattro rampe da 13 secondi sul reticolo | 10,2 |
| 0:53,7 | switchcar node | una rampa di 24 secondi entra sul rumore e sui punti | 23,4 |
| 1:20,1 | loc slide4 transition switcher | quattro cue in mezzo secondo: cambia tutto | 18,1 |
| 1:47,4 | cross | il blocco più luminoso: 82 lampeggiate in 23 secondi | 61,8 |
| 2:10,9 | pausa | 70,0 | |
| 2:14,3 | negativo | l'immagine torna scura | 17,7 |
| 2:41,1 | caos | risale | 27,4 |
| 3:08,0 | alterno | 19,3 | |
| 3:34,6 | ordine cross | l'ordine spegne: la luminanza crolla | 5,2 |
| 4:01,7 | fine | nero per gli ultimi sedici secondi | 0,7 |
Come funziona

Ableton manda, Max riceve e disegna. Sono due macchine separate, e nessuna delle due apre un file dell'altra.
Dal lato Ableton, la partitura di controllo vive sulla stessa timeline della musica. Non suona: esiste solo per pilotare, ed esce su una porta MIDI virtuale.
Dal lato Max, ogni nota che arriva porta due informazioni insieme. Quale canale accendere, e per quanto tempo: sono l'altezza e la velocity, lette separatamente.
In parallelo corre un secondo canale, e non manda note. Un device dentro Ableton apre quattordici connessioni UDP e ci manda valori continui: i parametri che non si accendono e si spengono, ma scorrono. Le manopole che li generano non le gira nessuno durante il pezzo, le muovono le automazioni.
Nessun file in comune, nessun timecode. Le due macchine restano insieme perché partono insieme.
Il controller

Tre tracce: una suona, una comanda, una manda parametri. La sessione gira a 143 BPM.
La traccia audio è la musica: una clip sola, 171 battute. Il nome della traccia porta i cognomi della squadra.
La traccia della partitura non produce nessun suono. Contiene una clip chiamata TO MAX, da battuta 17 a battuta 161, con 2411 note su 32 tasti, e la sua catena dei device è vuota. L'uscita MIDI non va a uno strumento: va a una porta virtuale chiamata to Max 1, canale 1, e da lì entra in Max.
Nel piano roll si vede a colpo d'occhio che non è musica. Il grosso delle note sta sotto il do più grave della tastiera, in una fascia dove nessuno scrive melodie: non sono altezze, sono indirizzi.
L'altezza è un indirizzo, la velocity è una durata. La nota 24 accende kick, la 27 hihat, la 30 caos, la 96 fine.
La velocity non passa come valore: sceglie fra ventidue messaggi numerici. Sono durate in millisecondi, calcolate a 143 BPM.
| Millisecondi | In movimenti | Valore musicale |
|---|---|---|
| 210 | 0,50 | un ottavo |
| 288 | 0,69 | una terzina di quarti |
| 314 | 0,75 | un ottavo puntato |
| 420 | 1,00 | un movimento |
| 630 | 1,50 | un movimento puntato |
| 838 | 2,00 | due movimenti |
| 3356 | 8,00 | due battute |
| 5034 | 12,00 | tre battute |
Max non sa a che tempo va Ableton. Le durate sono precalcolate qui e scelte da lì.
Trentuno tasti su trentadue hanno una velocity fissa, trenta a 100 e uno a 80: sono impulsi, conta solo che siano arrivati. L'unico che varia è il 61, la sfocatura, con sessanta note di valore crescente.
La terza traccia non manda note, manda numeri. Porta udp_control, un Max MIDI Effect con nove manopole: apre quattordici connessioni UDP verso 127.0.0.1 e ci scrive i valori delle manopole. Cinque di loro sono mosse da automazioni sulla timeline.
La patch
Milleduecentocinque oggetti, 821 al livello principale. Gli altri 384 stanno dentro sette sottopatcher e dentro i patcher interni degli oggetti gen.
È costruita come un bus di messaggi, non a fili. Ci sono 182 oggetti receive contro 60 send: ogni canale viene emesso una volta e ascoltato in media da tre punti diversi. È il motivo per cui una patch di questa taglia resta leggibile, ed è anche il motivo per cui nella mappa si vede tanto spazio vuoto: la maggior parte dei collegamenti non è disegnata, viaggia per nome.
Da dove viene l'immagine. Le forme sono caricate da due jit.matrixset, uno da diecimila posizioni: sono le matrici cuneiformi preparate in preproduzione. Tre generatori di rumore alimentano le deformazioni. Il contesto grafico gira a 60 fotogrammi al secondo e 1920×1080, ed è il motivo per cui il video esce già in quel formato senza essere riformattato dopo.
Dove va. Cinque stadi in cascata: scorrimento, sfocatura, rumore, incrocio, vignettatura, poi l'uscita Syphon. Ogni stadio ha i suoi canali attaccati: slide4 sullo scorrimento, transition sulla sfocatura, ordine cross caos bnoise sul rumore, e snare negativo hihat pausa sull'incrocio finale. Le due dissolvenze del pezzo, in apertura e in chiusura, partono da qui.
Le scelte
Sei cose che non sono ovvie, e perché sono così.
- Gli shader sono scritti, non scelti
- Cinque blocchi di codice dentro la patch, non filtri presi da un elenco. Quello del rumore porta una correzione per un difetto delle schede grafiche: senza, il rumore fa bande invece che grana.
- La sfocatura non cambia la luminosità
- I suoi pesi sommano a uno, quindi l'immagine ci passa attraverso senza schiarirsi. Ed è separabile: la stessa funzione fa la passata orizzontale e quella verticale.
- Una nota accende una rampa, non un effetto
- I cue strutturali sono note singole, ma quello che avviano dura fino a ventiquattro secondi. Il tempo lungo lo tiene Max, non Ableton, ed è il motivo per cui un arco di quattro minuti sta in una manciata di note.
- La scena ruota senza mai ripetersi
- L'angolo si estrae senza rimettere: nessuno dei quattro torna prima che siano usciti tutti. Con un sorteggio normale lo stesso angolo capiterebbe due volte di fila, e su uno schermo grande si nota.
- Due posizioni di proiezione, non una
- Il pannello tiene due preset di finestra, per due configurazioni di sala.
- Un modulo scritto a parte
- Mescola due immagini su una soglia, con un margine attorno per ammorbidire il taglio. Si chiama
torregrossa.maxpat.
Crediti
SAE Milano, modulo Installazioni multimediali, docente Riccardo Giovinetto. Corso: Sound and Video Programming for Electronic Performance.
Alessandro Sala · Federico Torregrossa