Minilab


Durante il primo semestre del corso di laurea magistrale al Politecnico di Milano, ho seguito un corso chiamato ACTAM. L’obiettivo era quello di costruire letteralmente qualsiasi cosa si volesse, ma usando le basi di programmazione web apprese nel corso.

Io avevo da poco lasciato Sanremo (leggi qui) per andare a Milano. Avevo ancora in mente il setup con cui suonavo con gli Spettri, per cui ho deciso di costruire un singolo modulo configurabile che sintetizzasse i vari moduli di terze parti che usavo durante i concerti.

Nel seguito del testo spiegherò tutto per filo e per segno, ma se ti andasse puoi provare (da PC) il modulo a questo link o guardare il video demo su youtube.


Configurazione hardware

Per utilizzare tutte le funzionalità del progetto è necessario disporre della seguente configurazione hardware:

  • Arturia MiniLab MKII –> un piccolo controller MIDI privo di funzioni interne, ma dotato di numerosi parametri mappabili, ideale per la sperimentazione. È possibile caricare il preset dedicato tramite l’app Arturia MIDI Control Center, disponibile qui.
  • Pedale Sustain –> qualunque pedale sustain standard.
  • Adattatore per pedale di controllo –> converte il segnale analogico in MIDI (ad esempio questo modello).
  • Pedale di controllo / volume –> qualsiasi modello compatibile.
Hardware setup

Funzionalità

Il codice implementa un sintetizzatore software che permette di combinare strumenti e effetti in tempo reale. L’interfaccia consente di selezionare e configurare i vari strumenti, gestire il keyboard split, controllare parametri audio tramite le manopole, e salvare i propri preset su Firebase.

Di seguito trovi una legenda dell’interfaccia del sistema, seguita dalla descrizione delle varie voci.

Keyboard Legend

Main Display

Da qui si selezionano gli strumenti attivi: Arpeggiator, Synth1 e Synth2 (rispettivamente per la parte sinistra e destra della tastiera, se divisa). Per ciascuno si possono modificare oscillatore, modalità mono o polifonica, comandi MIDI attivi e ottava. È anche possibile associare i primi due knob a preset personalizzati, così da cambiare configurazione in modo rapido durante l’esecuzione.

Keyboard Split

Permette di dividere la tastiera in due sezioni indipendenti, assegnando strumenti diversi a sinistra e a destra. L’arpeggiatore può essere incluso o escluso dalla divisione.

Knobs Section

Le manopole consentono di modificare i parametri del suono in tempo reale: guadagni generali, volumi separati per strumenti e drum, cutoff dei filtri LPF e HPF, tempo e volume del delay, e parametri dell’arpeggiatore. Ogni knob può essere mappato sul pedale di controllo, con modalità diretta, inversa o disattivata, per un controllo dinamico dell’esecuzione.

Login

Dalla sezione Login è possibile autenticarsi via email o in modo anonimo. L’area DB interaction permette di salvare, caricare o eliminare i propri preset direttamente dal cloud.

Pitch Wheel

Pur non avendo un indicatore visivo, il pitch wheel consente di modificare la frequenza degli oscillatori durante l’esecuzione, ottenendo effetti molto espressivi se combinato con filtri e delay.

Keyboard Legend

Struttura del codice

Il progetto è scritto interamente in JavaScript e utilizza solo la libreria Firebase per la gestione del database. La parte audio è interamente basata sulla Web Audio API, che consente di generare, filtrare e visualizzare il suono in tempo reale.

Code structure

Scrivo di seguito una breve descrizione delle classi:

  • Main: è la classe centrale che coordina i vari moduli e gestisce la connessione con Firebase. Inizializza controller, autenticazione e database, occupandosi del caricamento e della sincronizzazione dei preset utente.
  • MidiController: traduce i messaggi provenienti dal controller MIDI e dal pedale in comandi comprensibili per il sistema e gestisce eventi come Note On/Off, Pitch Bend, Control Change, … .
  • TouchController: gestisce l’interazione tattile e i click del mouse sull’interfaccia: tasti, pad e controlli visivi vengono tradotti in comandi che il controller elabora in tempo reale.
  • Controller: funziona da ponte tra input, logica e interfaccia.
  • View: si occupa di tutto ciò che riguarda la GUI del sistema, gestendo l’aggiornamento dinamico dei controlli, le animazioni dei knob, … .
  • Model: gestisce preset, configurazioni degli strumenti, eventi MIDI, arpeggiatore e pad drum. È qui che vengono aggiornati i parametri audio e salvate le scelte dell’utente.
  • AudioModel: rappresenta il motore audio dell’app. Gestisce oscillatori, filtri, delay, suoni di percussione e analisi dell’ampiezza per la visualizzazione. Tutti i suoni vengono generati sinteticamente tramite la Web Audio API.

Per info più approfondite, vai su GitHub.


Catena Audio

L’intera catena audio è gestita dalla classe AudioModel e segue lo schema riportato di seguito, che illustra la sequenza di filtri, delay, oscillatori e nodi di guadagno:

Audio chain

Database e autenticazione

Il sistema si appoggia a Firebase per la gestione dei preset. E’ possibile accedere anonimamente al sistema, ma in tal caso si avranno a disposizione solo i preset di default e non sarà possibile salvarne di nuovi. Per svolgere questa seconda opzione, bisogna effettuare l’accesso tramite email e password. Le regole di accesso vengono gestite direttamente su Firebase per prevenire usi non autorizzati.

Firebase overview

Possibili miglioramenti

Avevo previsto la possibilità di scegliere il controller MIDI direttamente da un menu a tendina così da permettere la configurazione guidata e il salvataggio automatico della mappatura su Firebase, ma non ho avuto abbastanza tempo pre esame, e anche quello post esame scarseggia. Per tale motivo, il progetto è attualmente in pausa.

In futuro, quando l’università sarà terminata, i pianeti si allineeranno e avrò tempo e voglia di farlo, terminerò l’opera.

Per adesso, buon divertimento (sempre che abbiate una MiniLab MKII)!


Angelo Antona, 12 Ottobre 2025