ELEMENTI DI PROGRAMMAZIONE MIDI (Appunti per le lezioni di HD Recording estratto da Sintesi del Suono Appunti e approfondimenti per i corsi di Music Technology ) Francesca Ortolani 5.1 Introduzione al protocollo MIDI Al Capitolo 2 abbiamo già introdotto dal punto di vista storico il protocollo MIDI (Musical Instrument Digital Interface). Riassumiamo brevemente quanto detto. Nel 1981 la Sequential Circuits (Smith/Wood) propone una versione del MIDI, un protocollo di comunicazione tra strumenti musicali, le cui specifiche vengono pubblicate l anno successivo, 1982, come Specification 1.0. Il MIDI viene presentato ufficialmente al pubblico nel 1983 e il primo synth dotato di porte MIDI fu proprio uno strumento della Sequential Circuits, il Prophet 600. Nei mesi a venire i vari produttori scelsero o meno di adattare i propri strumenti secondo le specifiche hardware e software pubblicate nel 1984 a seguito di un accordo tra produttori. Queste specifiche, che garantivano la compatibilità fra le macchine, da allora non subirono sostanziali modifiche e il protocollo MIDI che conosciamo oggi è praticamente lo stesso dai lontani primi anni 80. Grazie all esistenza di uno standard, l utente che compra una macchina che ne rispetti le specifiche è sicuro che tale dispositivo possa essere integrato in un sistema MIDI compatibile. L interfaccia MIDI consente la trasmissione seriale di bit alla velocità di 31250 bit/sec. Essendo la trasmissione asincrona, i messaggi MIDI saranno racchiusi fra 2 bit (start/end) che determineranno l inizio e la fine della sequenza trasmessa. START BIT = 0 STOP BIT = 1 Avendo tale velocità di trasmissione, per inviare un byte (= 8 bit) + bit start + bit end occorreranno 320 μsec (10/31250). Se si fosse scelta invece una trasmissione di tipo sincrono, ogni dispositivo slave, ovvero che viene pilotato da un master, avrebbe dovuto rispondere al master, che aveva inviato il messaggio, con un feedback di avvenuta ricezione. Essendo il sistema MIDI componibile da tanti dispositivi, tutti questi avrebbero inviato messaggi di feedback continuamente, occupando moltissima banda disponibile. I messaggi MIDI vengono trasmessi in gruppi di 8 bit (quindi ciascun gruppo assume valori possibili 8 tra 0 e 255, perché 2 = 256. Si ha che 256 possibilità non bastano a coprire la complessità del sistema MIDI, quindi a seconda della precisa disposizione dei bit in un messaggio, la macchina saprà interpretare diversi tipi di messaggi. 1
5.2 Interfaccia MIDI L interfaccia MIDI è composta da 3 porte (IN, OUT, THRU), attualmente realizzate con connettori femmina DIN o mini DIN a 5 poli. IN: riceve i dati in ingresso OUT: trasmette i dati in uscita THRU: trasmette in uscita una copia dei dati ricevuti in ingresso Al pin 5 del connettore avviene la connessione per il trasferimento dei dati MIDI in un unica direzione. Essendo quindi il collegamento simplex avrò bisogno di una porta IN e una porta OUT. Figura 5.1 Connettore DIN 5 poli. Utilizzato nelle porte MIDI. Figura 5.2 Porta MIDI IN e porta MIDI THRU Figura 5.3 Porta MIDI OUT 2
Figura 5.3: i dati provenienti da un bus UART vengono inviati al pin 5 dalla porta MIDI OUT. Collego quindi con un cavo (consigliato: non più di 15 mt per evitare riflessioni sulla linea) l uscita MIDI (OUT) di un dispositivo all ingresso MIDI (IN) di un altro. In questo modo un impulso di corrente scorre nel LED (D2) dell optoisolatore e lo accende eccitando il fototransistor (Q1) che trasferisce in uscita la tensione applicata in ingresso alla porta (che ritroviamo ai capi del diodo D1). Il segnale è inviato quindi al bus UART del dispositivo ricevente o alla sua porta MIDI THRU. Oggi le connessioni MIDI possono avvenire anche attraverso le moderne porte USB di tipo B (tipicamente). Figura 5.4 Estremità di un cavo USB tipo A/tipo B Master e Slave In un sistema MIDI alcuni strumenti si comportano come master e altri come slave: MASTER: strumenti che pilotano altri strumenti SLAVE: strumenti che vengono pilotati da altri strumenti cioè i master mandano comandi che gli slave eseguono. Nota: La trasmissione tra master e slave è efficace se questi si interfacciano sugli stessi canali. Esempio: Seleziono CH1 su MASTER e CH1 su SLAVE Il master comanda lo slave CH1 su MASTER e CH2 su SLAVE Il master non riesce a comandare lo slave Utilizzo di strumenti master e slave, esempi Esempio 1 Figura 5.5 A è master sia di B che di C 3
Esempio 2 Figura 5.6 A è master di B; B è master di C; A non è master di C. Gli strumenti master sono tutti quei dispositivi dotati di controller, come synth con tastiera muta (master keyboard) oppure controller rotativi, slider Gli strumenti slave sono ad esempio gli expander, i quali sono privi di controller o qualsiasi strumento dotato di una porta di ingresso MIDI che possa essere pilotato in remoto. Soft Thru Il computer può comportarsi sia come master che come slave e cambiare il proprio comportamento rapidamente. Per evitare che l utente debba ricablare continuamente le proprie macchine a seconda del comportamento desiderato, è stata introdotta la porta SOFT THRU. Il seguente esempio spiega il funzionamento di un sistema MIDI in cui sia presente una porta Soft Thru: Il Soft Thru funziona come THRU quando sto suonando la tastiera e voglio sentire quello che sto suonando tramite expander, invece funziona come OUT quando il computer riproduce ciò che è stato registrato e necessita dell expander, il quale è dotato di uscite audio, per avere un suono in uscita. Attenzione a non confondersi: in questo caso si parla di registrazione nel senso MIDI, ovvero memorizzo una sequenza di comandi (es. suona la nota...sul canale ). Figura 5.7 Esempio di utilizzo della porta SOFT THRU 4
5.3 Strumenti accessori in una rete MIDI MIDI Merge Box La Merge Box serve per collegare più master ad un singolo slave. Il lavoro di questa scatola è smistare i messaggi provenienti dai master in modo opportuno. MIDI Thru Box Figura 5.8 Utilizzo della Merge Box in un sistema MIDI La MIDI Thru Box indirizza i messaggi di un master verso diversi slave con un collegamento a stella. Questa scatola è utile per evitare errori di trasmissione quando nel proprio sistema MIDI sono presenti molti slave. La Thru Box permette anche di velocizzare la trasmissione. Figura 5.9 Utilizzo della Thru Box in un sistema MIDI 5
Interfacce MIDI multiporta Le interfacce multiporta si possono utilizzare per connettere il computer al sistema MIDI. Ogni porta viene gestita dal software separatamente. In questo modo ho una moltiplicazione dei canali a disposizione: 16 X n porte. Un utilizzo tipico di questi dispositivi è in un sistema in cui siano presenti strumenti multitimbrici che occupano un gran numero di canali. 5.4 Messaggi MIDI Entriamo nel vivo della programmazione MIDI. Su questo libro si daranno alcuni cenni che, tuttavia, saranno sufficienti per iniziare a lavorare con il protocollo MIDI. All interno di un messaggio MIDI esistono 2 tipi di byte MIDI: STATUS BYTE e DATA BYTE. Entrambi status byte e data byte sono composti da 8 bit (inviati tra altri 2 bit di start ed end), ma hanno funzioni diverse. Abbiamo già detto che con 8 bit possiamo codificare 256 valori diversi. I primi 128 (da 0 a 127) saranno per i DATA BYTE e i secondi 128 (da 128 a 255) per gli STATUS BYTE. Quindi gli STATUS BYTE inizieranno con 1 e i DATA BYTE con 0 (al paragrafo 5.7 si spiegherà come funziona il sistema binario). 1xxx xxx 0xxx xxx STATUS BYTE DATA BYTE (Si dice anche che il MIDI è un sistema a 7 bit reali, in quanto il primo di 8 è già determinato. ) Status byte e Data byte I due tipi di byte MIDI si distinguono per la loro diversa funzione all interno del messaggio: STATUS BYTE: specificano il tipo di messaggio (informazione qualitativa) DATA BYTE: specificano il valore associato a quel tipo di messaggio (informazione quantitativa) Un messaggio MIDI è così strutturato: STATUS DATA 1 DATA 2 Il secondo Data Byte può non essere sempre presente. Solitamente si hanno 2 Data Byte in un messaggio. Es. Messaggio di Note on : STATUS: comando Note On DATA 1: numero della nota DATA 2: valore velocity 6
5.4.1 Formato dello Status Byte In generale lo STATUS BYTE è formato in questo modo: 1xxx nnnn I primi 4 bit (1xxx) si riferiscono all istruzione principale. Il secondo gruppo di 4 bit (nnnn) rappresenta il numero di canale su cui indirizzare l istruzione contenuta nel primo gruppo (se si tratta di un messaggio di canale) oppure l istruzione di un messaggio di sistema. Nel MIDI ho a disposizione 16 canali, codificati nel gruppo nnnn con i valori da 0 a 15 (0000-1111). Per quanto riguarda il primo gruppo di bit, essendo il primo bit sempre 1, saranno gli altri tre, xxx, a determinare il tipo di messaggio. Ho quindi 3 2 = 8 possibili combinazioni per il messaggio. 5.4.2 Categorie di messaggi MIDI: messaggi di CANALE e di SISTEMA I messaggi possono essere di CANALE o di SISTEMA. Quelli di CANALE sono inviati ai singoli canali e riguardano l esecuzione musicale. Essi sono individuati dalle prime 7 combinazioni dei bit xxx del primo gruppo di 4 bit come visto al paragrafo precedente. Quelli di SISTEMA sono rivolti al sistema MIDI e sono individuati dall ultima combinazione ovvero 1111. Esempio: 1000 1010 = Note On sul canale 11 Attenzione a non sbagliarsi: 1010 in binario si traduce in 10 nel sistema decimale. All utente però i canali risultano cominciare dal numero 1 (non da 0), perciò si ha 10+1 = 11. BIN HEX MESSAGGIO 1000 nnnn 8nH NOTE OFF 1001 nnnn 9Nh NOTE ON 1010 nnnn AnH AFTERTOUCH POLIFONICO 1011 nnnn BnH CONTROL CHANGE 1100 nnnn CnH PROGRAM CHANGE 1101 nnnn DnH AFTERTOUCH DI CANALE 1110 nnnn EnH PITCH BEND 1111 nnnn FnH MESSAGGI DI SISTEMA Tabella 5.1 Possibili combinazioni 1xxx nnnn 7
STATUS DATA 1 DATA 2 8NH (NOTE OFF) NUMERO NOTA VELOCITY 9Nh (NOTE ON) NUMERO NOTA VELOCITY AnH (AFTERTOUCH POL.) NUMERO NOTA PRESSURE BnH (CONTROL CHANGE) NUMERO CONTROLLO VALORE CONTROLLO CnH (PROGRAM CHANGE) NUMERO PROGRAMMA - DnH (AFTERTOUCH CH.) PRESSURE - EnH (PITCH BEND) POSITION MSB POSITION LSB FnH (SYSTEM) Vedi dopo Tabella 5.2 Significato dello Status Byte e dei Data Byte 1 e 2 nelle 8 combinazioni I messaggi di canale e i messaggi di sistema si suddividono in sottocategorie: CHANNEL MESSAGES CHANNEL VOICE MSG (messaggi di VOCE) CHANNEL MODE MSG (messaggi di MODO) SYSTEM MESSAGES SYSTEM COMMON MSG REAL-TIME MSG SYSTEM EXCLUSIVE MSG Channel Messages Lo STATUS BYTE di un messaggio di CANALE è sempre 1xxx nnnn. Per quanto riguarda i 3 bit xxx solo le prime 7 di 8 combinazioni sono utilizzate per indicare questa categoria di messaggi. Quando il sistema riconosce dai primi 4 bit del messaggio che si tratta di un messaggio di canale, prende in esame il secondo nibble (4 bit = 1 nibble), che indica su quale canale è indirizzato il messaggio. Questi messaggi vengono generati tutte le volte che viene selezionato e variato un controllo o viene suonata una nota, etc Channel Voice Messages Questi messaggi sono generati durante l esecuzione del brano. Tra questi: NOTE ON/OFF, PITCH BEND, CONTROL CHANGE, PROGRAM CHANGE, AFTERTOUCH POLY e di CANALE. 8
NOTE OFF: messaggio che ordina ad uno slave di smettere di suonare una certa nota su un certo canale: STATUS DATA 1 DATA 2 8nH 1000 nnnn (Note Off) kkh 0kkk kkkk (Key Num) vvh 0vvv vvvv (Velocity) Un messaggio di NOTE OFF non interrompe il suono, ma solo il suo invio. Il release del suono comincia al giungere del NOTE OFF. Il numero di nota va da 0 a 127, coprendo un range di 128 note da C-2 a G8 (il DO centrale sarebbe C3. Le lettere indicano la dicitura anglosassone per le note). Si può trovare uno standard di manifattura diverso, ovvero che va da C-1 a G9 (in questo caso il DO centrale si trova in C4). Attenzione quindi se si utilizzano strumenti che usano standard diversi ad avere la giusta corrispondenza di ottava. Il costruttore fornirà all utente le informazioni comprendenti sia la posizione del DO centrale sia l effettivo range (TRUE VOICE) coperto dallo strumento (non necessariamente l intero range di 128 note). Attenzione! Non è detto che il suono relativo a C3 abbia frequenza inferiore a C5: dipende da come il timbro usato è associato alle note (vedi esempio tipico dei kit percussivi: ogni nota è una percussione diversa). Velocity La Velocity è la velocità con cui si preme/rilascia un tasto. È usata più frequentemente per controllare il volume della nota, in realtà la velocity può controllare tanti altri parametri come il cut off di un filtro, pitch, pan Si può impostare sullo slave quale parametro controllare. Non sempre tutti gli strumenti ricevono/trasmettono la velocity. Uno strumento che non la riceve ignorerà il data byte relativo alla velocity, considerando solo gli altri. Non sempre si trova un messaggio di NOTE OFF a seguire un messaggio di NOTE ON. È comune trovare piuttosto un messaggio di NOTE ON con VELOCITY = 0. Running Status Il MIDI supporta il running status, ovvero finché lo STATUS non cambia, si può evitare di inviarlo nuovamente, limitandosi a trasmettere solo i DATA, risparmiando tempo, memoria e banda. 9
NOTE ON: messaggio che ordina ad uno slave di suonare una certa nota su un certo canale: STATUS DATA 1 DATA 2 9nH 1001 nnnn (Note On) kkh 0kkk kkkk (Key Number) vvh 0vvv vvvv (Velocity) Le tastiere che non sono sensibili alla velocity trasmettono ogni nota con valore della velocity intermedio (64). NOTE ON con Vel = 0 NOTE OFF AFTERTOUCH POLIFONICO: controllo della pressione esercitata sui tasti in stato di ON (ovvero non si può rilasciare un tasto e poi usare l aftertouch). STATUS DATA 1 DATA 2 AnH 1010 nnnn (Poly Key Pressure) kkh 0kkk kkkk (Key Number) aah 0aaa aaaa (Pressure Aftertouch) L AFTERTOUCH controlla vari parametri e funzioni impostabili sullo slave: vibrato, tremolo, volume L aftertouch POLIFONICO fa sì che questo controllo sia distinto per ogni singolo tasto. Per fare ciò la tastiera necessita di un sensore per ogni tasto. Il DATA BYTE 2 si riferisce alla quantità di pressione esercitata sul tasto. AFTERTOUCH DI CANALE: vale quanto detto per quello polifonico, ma non necessita di un sensore per ogni singolo tasto, piuttosto di uno globale per l intera tastiera: STATUS DATA 1 DnH aah 1101 nnnn 0aaa aaaa (Channel (Pressure Pressure) Aftertouch) Questo messaggio invia la stessa informazione di pressione esercitata per tutto il canale (Nota: c è un solo DATA BYTE per la pressione). 10
PROGRAM CHANGE: messaggio che ordina ad uno slave di cambiare programma tra una serie di 128 preset: STATUS DATA 1 CnH pph 1100 nnnn 0ppp pppp (Program (Preset Change) Number) Questi preset cambiano a seconda del tipo di strumento. Originariamente per programma si intendeva solo un certo timbro di un certo synth. Oggi invece si intende una generica configurazione di funzione, che può essere anche un effetto su un DSP, i livelli di un mixer, lo split di una master keyboard Dato che 128 è un numero limitato, sono stati introdotti i BANCHI selezionabili tramite BANK SELECT e comprendenti fino a 128 preset. PITCH BEND: messaggio che ordina ad uno slave di alterare il pitch in modo continuo (glissato) per simulare l effetto bending (es. come sulla chitarra): STATUS DATA 1 DATA 2 EnH 1110 nnnn (Pitch Bender Change) mmh 0mmm mmmm (Bender Position MSB) llh 0lll llll (Bender Position LSB) Il messaggio di PITCH BEND può essere inviato tramite joystick o rotella (wheel) bidirezionale con ritorno a molla. Il PITCH BEND (o PITCH BENDER CHANGE) indica in pratica la posizione del controller del pitch (rotella, joystick). Il range frequenziale dipende dallo strumento slave e da come esso è impostato (il vincolo meccanico della rotella non conta). Solitamente di default troviamo un range di ±2 semitoni, ma possiamo impostare fino a ±24 semitoni (il range è aggiustabile tramite un controller RPN leggi di seguito). I DATA BYTE sono due: POSITION MSB e POSITION LSB. Avendone due si fornisce al pitch bender una risoluzione migliore (14 bit invece di 7). In questo modo l effetto sarà più continuo e meno a scatti. Con 14 bit possiamo discretizzare 14 2 = 16384livelli di pitch. 11
CONTROL CHANGE: messaggio che ordina ad uno slave di cambiare controllo: STATUS DATA 1 DATA 2 BnH 1011 nnnn (Control Change) cch 0ccc cccc (Control Number) pph 0ppp pppp (Control Position) Siccome bisogna stabilire sia QUALE controllo sia QUANTO controllo si deve applicare, il CONTROL CHANGE utilizza anche il primo DATA BYTE per trasmettere un informazione qualitativa (funzione che invece sarebbe tipica di uno STATUS BYTE). Il secondo DATA BYTE invece svolge la sua tipica funzione quantitativa. Nel 1985 la MMA (MIDI Manufactures Association) ha definito una tabella che assegna in modo univoco un numero a ciascun controller. I controller si suddividono in CONTROLLI CONTINUI e CONTROLLER AD INTERRUTTORE. Un CONTROLLER CONTINUO può assumere ciascun valore di 128 inviabili nel DATA BYTE 2. I CONTROLLER AD INTERRUTTORE sono OFF da 0 a 63 e ON da 64 a 127. Per quanto riguarda il primo DATA BYTE, i controller: 0 63 sono continui 64 95 sono ad interruttore (ad eccezione di 70-74, 91-95 che sono continui a 7 bit) 96 101 sono riservati alla trasmissione dei messaggi di MODO. I controller continui da 0 a 63 sono a 14 bit. Questo vuol dire che serviranno due DATA BYTE per fornire l informazione quantitativa. Per questo i controller continui sono ripetuti due volte: 0 31 MSB (Most Significant Byte) 32 63 LSB (Least Significant Byte) Channel Mode Messages Questi messaggi riguardano il controllo generale di un dispositivo e non dei singoli parametri: in pratica definiscono la risposta dello strumento ai VOICE MESSAGES. I messaggi di MODO sono richiamati da uno STATU BYTE di Control Change e dai DATA BYTE che si riferiscono ai controller da 120 (78) a 127 (7F). Tra questi messaggi troviamo: ALL SOUND OFF, RESET ALL CONTROLLERS 12
ALL SOUND OFF: messaggio che silenzia tutte le note che suonano, che erano state attivate con NOTE ON, ma non ancora rimosse con NOTE OFF: STATUS DATA 1 DATA 2 BnH 1011 nnnn (Control Change) 78H 01111000 (All Sound Off) 00H 0000 0000 (ignorato) Precisamente questo messaggio non silenzia in assoluto TUTTE le note: quelle in ingresso MIDI IN (es. da tastiera) continuano a suonare. ALL NOTES OFF: messaggio che silenzia TUTTE le note in assoluto (anche MIDI IN!!): STATUS DATA 1 DATA 2 BnH 1011 nnnn (Control Change) 7BH 01111011 (Reset) 00H 0000 0000 (ignorato) Questo messaggio è una specie di Panic Button : funziona soprattutto per sbloccare le note che non smettono di suovare. LOCAL CONTROL: messaggio che attiva/disattiva la tastiera localmente, facendo in modo che i parametri del synth siano controllati attraverso MIDI IN da uno strumento esterno: STATUS DATA 1 DATA 2 BnH 1011 nnnn (Control Change) 7AH 01111010 (Local Ctrl) OFF: 00H 0000 0000 ON: 80H 10000000 (Attenzione! Il DATA BYTE ON inizia con 1!!) OMNI MODE OFF: (All Notes Off) in questo modo il dispositivo risponderà solo ai messaggi VOICE su un numero limitato di canali, di solito uno solo (Base Channel): STATUS DATA 1 DATA 2 BnH 1011 nnnn (Control Change) 7CH 01111101 (Omni Mode Off) 00H 0000 0000 (ignorato) 13
OMNI MODE ON: (All Notes On) in questo modo, senza riguardo di quale canale riceva il messaggio, lo strumento risponderà comunque al messaggio (ovvero risponde a tutti e 16 i canali): STATUS DATA 1 DATA 2 BnH 1011 nnnn (Control Change) 7DH 01111100 (Omni Mode On) 00H 0000 0000 (ignorato) MONO MODE ON: (Poly Off) in questo modo si comunica ad uno slave di selezionare il modo MONO. Il DATA BYTE 2 indica su quali canali devono essere ricevute/trasmesse le voci monofoniche: STATUS DATA 1 DATA 2 BnH 1011 nnnn (Control Change) 7EH 01111110 (Mono Mode) mmh 0000 mmmm (Channel Allocation) Dato il canale N saranno interessati al MONO i canali N+M-1 (<16). Se il valore del DATA BYTE 2 è 0, allora MONO sarà allocato su tutti i canali. POLY MODE ON: (Mono Off) in questo modo si comunica ad uno slave di attivare il POLYMODE. Lo strumento risponde polifonicamente alle informazioni MIDI: STATUS DATA 1 DATA 2 BnH 1011 nnnn (Control Change) 7FH 01111111 (Poly Mode On) 00H 0000 0000 (ignorato) System Messages Questi messaggi sono ricevuti da tutto il sistema MIDI, ovvero da tutti gli strumenti collegati, e non contengono informazioni di canale. 14
SYSTEM COMMON MSG SYSTEM MESSAGES SYSTEM REAL TIME MSG SYSTEM EXCLUSIVE MSG Il formato per questi messaggi è il seguente: 1111 xxxx (ho quindi 4 2 = 16 diversi messaggi possibili) System Exclusive Messages Questi messaggi sono usati per mandare informazioni specifiche ad un certo modello di strumento o classe compatibile, servono per comunicare con la macchina, per fare il backup della memoria, per impostare dei parametri Si usano poco, soprattutto si usano per macchine hardware. I Virtual Instruments di solito non li ricevono. Sono formati quasi sempre da 4 sezioni: - START F0 - ID Può indicare l identificativo della macchina - DATA Può indicare un parametro da modificare e un valore - END F7 Esistono 4 tipi di Sys-Ex: 1. Commercial: usato per tutte le macchine messe in commercio. - ID: Manufacturer ID 00 7C xx case storiche (41 Roland, 47 Akai ) 00 xx xx altre case (00 00 7E Alesis, 00 0106 Presonus ) Device ID Identificativo della macchina (nel caso ci fossero macchine uguali in un sistema, l utente può impostare questo parametro per distinguerle). Default 00 (Roland 01) Model ID Identificativo del modello (es. Roland A-37) 15
2. Non Commercial: usato per macchine MIDI che non vengono messe in commercio. - ID: 7D Universal Non Commercial. 3. Universal Non-Real Time: usato per i messaggi che non necessitano di una risposta immediata. - ID: ID 7E Universal Non-Real Time. Channel Number 00 7F (7F = GLOBAL) Sub ID Varie funzioni. 4. Universal Real Time: usato per i messaggi in tempo reale (vedi SincronizzazioneMIDI Time Code). - ID: ID 7F Universal Real Time. Channel Number 00 7F (7F = GLOBAL) Sub ID Varie funzioni. System Common Messages I System Common sono messaggi che riguardano il timecode, l accordatura degli oscillatori, la selezione di una song, tra questi: QUARTER FRAME, SONG POSITION, SONG SELECT, TUNE REQUEST. System Real Time Messages Questi messaggi sono formati dal solo STATUS BYTE. Possono essere inviati in qualsiasi momento, anche tra byte di altri messaggi interrompendo il flusso in corso. Si tratta di una serie di vari messaggi di sincronizzazione delle macchine: CLOCK START, CONTINUE, STOP, ACTIVE SENSING, SYSTEM RESET. Es. CLOCK Il CLOCK è un segnale di sincronismo tra diversi dispositivi ed è inviato almeno 24 volte ogni nota da 1/4. Per questo si chiama anche PPQN (Pulse per Quarter Note) oppure CPQN (Clock per Quarter Note). Il PPQN è la risoluzione di timing (temporizzazione) di un sequencer MIDI e indica il numero di divisioni in cui una nota da 1/4 è stata suddivisa relazionandosi quindi direttamente con la capacità del sequencer di rappresentare fini variazioni ritmiche. I vecchi synth arrivavano a 96 PPQN; ora si arriva anche a 768 PPQN. 16
Trucco: con un PPQN basso, raddoppiando il tempo di una song e suonando a metà tempo si avrà un effettivo raddoppio della risoluzione. Vedi di seguito Sincronizzazione per approfondimenti. 17
Elementi di Programmazione MIDI Francesca Ortolani Figura 5.10 Tabella riassuntiva dei Messaggi System Exclusive [P. Guaccero] 18
SINCRONIZZAZIONE L importanza della sincronizzazione è di fare in modo che due macchine che intendiamo far lavorare insieme, suonino a tempo, ovvero siano d accordo per quanto riguarda il tempo, la posizione del cursore nella song e ciò che è correlato a tutto questo. Quando si parla di sincronizzazione ci sono sempre un MASTER e uno SLAVE. Il master di regola è sempre la macchina più lenta (es. macchina analogica è master su macchina digitale). Questo perché lo slave deve rispondere ai comandi del master. Se il master è troppo veloce, più veloce dello slave, quest ultimo non riesce a rispondere a tutti i comandi. MIDI CLOCK La sincronizzazione MIDI CLOCK è basata sul tempo musicale (invece il MIDI Time Code è basata su SMPTE: hh:mm:ss:ff). Il MIDI Clock non è universale, ma si può utilizzare solo su macchine dotate di un sequencer, ovvero che ragionano in termini musicali. Tutti i messaggi che riguardano la sincronizzazione sono messaggi di sistema. Funzioni principali: - Start/Stop (Start equivale a Locate 0) - Scorrimento Sincrono (serve per far andare di pari passo master e slave) - Locate 1. Start/Stop sono gestite da 3 messaggi di sistema real time (1 solo byte): START FAH 11111010 impone play/rec dall inizio della song. CONTINUE FBH 11111011 impone di riprendere il play/rec dall ultimo stop. STOP FCH 11111100 impone l interruzione di play/rec. 2. Scorrimento sincrono è gestita da 1 messaggio di sistema real time (1 solo byte): TIMING CLOCK F8H 11111000 Viene inviato 24 volte ogni nota da ¼ (risoluzione MIDI base), per cui si parla di Clock Per Quarter Note (o Pulse Per Quarter Note). Osserva che 24 è divisibile per 2, 3, 4, 8, quindi il 24 si presta bene alle devisioni in terzine. Con questa suddivisione si arriva ad una risoluzione fino alla terzina di sessantaquattresimi (con il Time Code la sincronizzazione è ancora più precisa). Se ho ad esempio 60bpm -> 60*24 = 1440 msg/min. 3. Locate è gestita da un messaggio di sistema comune: SONG POSITION POINTER STATUS F2H + DATA LSB hhh + DATA MSB mmh Permette di associare un indirizzo assoluto ad ogni beat della sequenza. Posiziona lo slave nel punto dove si posiziona il master. L unità di misura del Song Position Pointer è il sedicesimo: 1/16 musicale. Il master dice allo slave quanti sedicesimi sono passati dall inizio della song. Con 14 bits di risoluzione, se ho battute da 4/4, ottengo dallo start 16384 sedicesimi in totale e quindi 1024 battute a disposizione per una song. Esempio pratico in Cubase: Utilizzando una sincronizzazione MIDI Clock, Cubase può essere solo master, mentre con il Time Code è anche slave. Nel menù Transport, trovo la voce Sync Setup. Selezionandola si apre una finestra per la gestione della sincronizzazione. Posso aprire la stessa cliccando con CTRL su Sync sulla Transport Bar. Nella finestra trovo il riquadro MIDI Clock Destinations, dove selezione a quali uscite deve essere inviato il MIDI Clock: MIDI Clock Follows Project Position: si utilizza quando voglio che lo slave segua il master nel caso 19
Always Send Start Message: Send MIDI Clock in Stop Mode voglia fare un loop, un locate, un salto, altrimenti lo slave continuerebbe per la sua strada. Nota che alcuni dispositivi reagiscono al cambiamento di posizione brutalmente. si utilizza con macchine che non conoscono il messaggio CONTINUE. Selezionando questa opzione il master invia soltanto Start e ignora Continue. è utile per i sistemi che ad esempio hanno un arpeggiatore che continua ad arpeggiare anche se la macchina è in stop. MIDI TIME CODE SMPTE Si esprime in hh:mm:ss:ff:bb Ogni frame ci sono 80 subframe. Frames per second CINEMA PAL - SECAM NTSC B/N NTSC COLOR 24 fps 25 fps 30 fps 29,97 fps = 30 drop frame Spiegazioni Sono sufficienti 24 fotogrammi al secondo per dare l illusione a chi guarda lo schermo che l immagine sia continua. Questo dipende dalla persistenza dell immagine sulla retina dell occhio. 24 fotogrammi al secondo è oltre il limite di percezione della retina. Il drop frame deriva dalle correzioni effettuate sulla sottoportante del chroma affinché le armoniche superiori del chroma non interferiscano con l audio che si trova più sù in frequenza. La sottoportante del chroma è stata quindi abbassata, di conseguenza il frame rate. Le frequenze di semiquadro 50 e 60 sfps hanno lo stesso valore delle rispettive frequenze di rete (Europa, USA), perché una volta era difficile fare degli oscillatori per la frequenza di quadro (o semiquadro) stabili a lungo termine. Dato che la frequenza di rete è stabile poiché generata da macchine elettriche (alternatori) di grande inerzia meccanica, allora si è deciso di agganciare gli oscillatori alla frequenza di rete. Master e Slave devono avere la stessa risoluzione in frame impostata. Nota che per il MTC 29,97 e 30d non sono distinguibili. Esistono 3 tipi di TIME CODE: LTC (Longitudinal Time Code) È un segnale digitale codificato come Manchester Bifase che si può registrare anche su nastro sotto forma di onda quadra modulata. In pratica il timecode si trova sotto forma di segnale audio. VITC (Vertical Interval Time Code) Viene scritto fra i fotogrammi del video in un paio di linee non visibili durante il ritorno di quadro verticale. Quando visibile si mostra come dei quadratini bianchi su sfondo nero. MTC (MIDI Time Code) Il segnale viene codificato in messaggi MIDI e trasmesso su cavi MIDI. ADAT SYNC Utilizzato solo con l ASIO Positioning Protocol. 20
MTC Quarter Frame È un messaggio chiamato in questo modo perché viene inviato 4 volte ogni frame. Nel MTC la funzione START è accorpata con lo SCORRIMENTO SINCRONO. È un messaggio di SISTEMA comune: STATUS BYTE (F1) + 1 DATA BYTE. Il primo nibble del Data Byte serve a indicare l informazione qualitativa. Nota che siccome è un DATA BYTE deve cominciare per 0, quindi il valore massimo sarebbe 7. Si utilizza una Configurazione LSNibble + MSNibble. L ultima combinazione del primo nibble dice inoltre che si tratta di un codice SMPTE. Il MTC non utilizza i sub frame. QUARTER FRAME STATUS BYTE F1H System Common Status Byte (= QUARTER FRAME) DATA BYTE 0nnn dddd (0nnn = tipo di messaggio; dddd = campo per i dati di tempo) 0nnn = tipo di messaggio 0 = frames LSnibble 1 = frames MSnibble 2 = seconds LSnibble 3 = seconds MSnibble 4 = minutes LSnibble 5 = minutes MSnibble 6 = hours LSnibble 7 = hours MSnibble La trasmissione di una word di messaggio SMPTE richiede l invio di 8 messaggi Quarter Frame numerati progressivamente, uno per ogni quarto di frame. Quindi lo slave ricostruisce il timecode con un ritardo di 2 frame (4 messaggi + 4 messaggi = 8 totale). Sarebbe anche meglio che il clock sia comune al master e allo slave e meglio ancora se fornito da un dispositivo dedicato a questo scopo. Altro problema sono le latenze diverse delle varie schede utilizzate. MTC Full Frame È un SYS-EX Real Time, comincia quindi per F0 e finisce con F7. Si è scelto questo tipo di messaggio perché servono tanti byte per comunicare le informazioni con precedenza assoluta. È una specie di autolocator e consente a tutte le macchine del sistema di posizionarsi in un determinato punto della sequenza con la precisione del frame. START F0 ID Universal RealTime 7F Channel Number 7F Sub-ID Long Form MTC 01 01 (MTC Full Frame) hh+fps (type) xx mm xx ss xx ff xx END F7 Esempio pratico: impostazione su Cubase del Timecode Menù Transport -> Synchronization Setup (oppure sulla Transport Bar SYNC+Click). Cubase per il Timecode può essere sia master che slave. 21
Cubase Master Timecode source: Internal Timecode MIDI TimeCode Destination: Scegliere porta MIDI Cubase Slave Timecode source: MIDI TimeCode Source: MIDI TimeCode Scegliere sorgente per il Timecode Se il Timecode arriva da una macchina analogica: opzioni su Machine Control Master. Application: Lock Frames: Drop out Frames: Inhibit Restart ms: MIDI TimeCode Follows Project Time: imposta numero di frame su slave da bloccare prima che lo slave parta. imposta numero di frame che lo slave deve aspettare prima di sganciarsi (se per N frame lo slave non riceve il timecode si sgancia). Nota che il timecode su una macchina analogica ad esempio crea problemi in quanto è un segnale audio che deve essere convertito in forma di messaggi MIDI. si può inibire il restart per un certo numero di ms. è selezionabile anche per Timecode come visto per MIDI Clock e funziona ugualmente male. OFFSET Su Cubase è proprio riferito allo START della sessione (vedi Project Setup). L Offset è il punto in cui si aggancia lo slave. Tasto SYNC Se utilizzo Cubase come slave devo attivare il tasto SYNC sulla Transport Bar (solo nel caso SLAVE). Compare la scritta Idle (in attesa). Non appena arriva il segnale compare la scritta Lock xx. MIDI MACHINE CONTROL (MMC) Il MMC è una parte del protocollo MIDI che serve per controllare i comandi di trasporto, ad esempio, di un registratore a nastro (che deve quindi avere un interfaccia MIDI a questo punto). Esempio pratico in Cubase: Cubase può comportarsi sia da Master che da Slave per il MMC ed ha una barra di trasporto dedicata al MMC. Ricordarsi di premere ONLINE su questa barra, altrimenti non funziona. Colleghiamo Cubase ad un registratore esterno: si vede che il Midi Machine Control da solo non funziona. Praticamente ho bisogno di un segnale di MTC proveniente dal registratore verso cubase. Cubase (MASTER) MMC Registratore (SLAVE) Registratore (MASTER) MTC Cubase (SLAVE) Quindi, si noti che, anche se sembra che sia Cubase a controllare la macchina, in realtà Cubase è agganciato al trasporto della macchina, ovvero al suo Timecode. Anche per questo Cubase ha l MMC Master a parte. Cubase può anche armare/disarmare le tracce sullo slave (vedi impostazioni Master su Synchronization Setup -> MMC). 22
5.5 Controlli Controlli Continui (tra parentesi il numero nel sistema esadecimale) 0 (00) BANK SELECT MSB e 32 (20) BANK SELECT LSB:: Questo controller richiama un banco. I banchi contengono fino a 128 programmi. I valori MSB e LSB saranno forniti dal costruttore. 0 (00) Banchi sopra al #129 32 (20) Banchi da #1 a #128 1 (01) MODULATION WHEEL: controlla le modulazioni, Vibrato, Tremolo, a seconda di come è programmato lo slave ed è inviato da una rotella UNIDIREZIONALE e senza ritorno a molla o da un joystick. 2 (02) BREATH CONTROLLER: introdotto dalla Yamaha, è mandato da un controller che rileva la pressione del fiato. In questo modo si cerca di simulare la sensazione data da uno strumento a fiato. I parametri più controllati con BREATH sono Volume e Pitch. 3 (03) UNDEFINED: Non ancora definito. Disponibile per applicazioni future. 4 (04) FOOT CONTROLLER: è inviato da controller a pedale. La sua funzione dipende da come è programmato lo slave (può essere la stessa di un Modulation Wheel o Breath). 5 (05) PORTAMENTO TIME: regola il tempo di portamento, ovvero il tempo di variazione in frequenza continua fra due note (glissato). Nota: il portamento avviene quando l evento della seconda nota è stato effettivamente letto. Vedi PORTAMENTO CONTROLLER per impostare la nota di sorgente. 6 (06) DATA ENTRY: cambia il valore dei parametri delle funzioni di strumenti esterni (expander, synth, computer ), attivate tramite un messaggio RPN, NRPN. Si può trovare sotto forma di fader, slider, manopola. 7 (07) MAIN VOLUME: regola il volume principale del canale. È poco comune trovare strumenti che lo trasmettono, mentre quasi tutti invece lo ricevono. 23
8 (08) BALANCE: controlla il bilanciamento di un segnale STEREO. 0 = LEFT 64 = CENTER 127 = RIGHT 10 (0A) PAN: regola il posizionamento di un segnale MONO. 0 = LEFT 64 = CENTER 127 = RIGHT 11 (0B) EXPRESSION: impostato il MAIN VOLUME range, EXPRESSION regola il volume all interno del range impostto. 16 19 (10 13) GENERAL PURPOSE: sono controller definiti dai costruttori e descritti nei manuali operativi degli strumenti. Controlli Continui a 7 bit 84 (54) PORTAMENTO CONTROLLER: fornisce le informazioni aggiuntive a realizzare il portamento (Vedi controller 5). Indica da quale nota la nota successiva deve fare il glissato. 70 74 (46 4A) SOUND CONTROLLERS: modificano i parametri del suono. Sound Variation: Sound Timbre: controlla qualsiasi parametro associato allo strumento che genera il suono. Es. se il dispositivo usa dei campioni, questo controller può modificare ad esempio la sample rate. controlla il filtro VCF dello strumento. Sound Release/Attack: regola il tempo di release/attack controllando il VCA dello strumento. Sound Brightness: controlla la frequenza di cut off del filtro VCF dello strumento. 91 95 (5B 5F) EFFECTS DEPTH: controllano i processori di segnale e gli effetti, definendo la quantità di effetto da applicare (TREMOLO, CHORUS, CELESTE, PHASER, EXTERNAL FX). 24
Controlli ad Interruttore 64 (40) SUSTAIN - DAMPER PEDAL: se attivato, prolunga i suoni anche dopo il rilascio del tasto. 65 (41) PORTAMENTO: ON/OFF portamento. 66 (42) SOSTENUTO: ON/OFF sustain. 67 (43) SOFT PEDAL: Simula l effetto della sordina di un pianoforte. 68 (44) LEGATO FOOTSWITCH: ON/OFF legato. Se attivo, le note vengono suonate legate (non staccate). In pratica viene modificato in automatico (attenuato) l attacco delle note. 69 (45) HOLD 2: duplica il tempo di rilascio delle note suonte. A differenza di SUSTAIN, che allunga il tempo di rilascio permanentemente. Controlli per Dati 96 97 (60 61) DATA INCREMENT/DECREMENT: incrementa/decrementa il valore di un parametro asociatio a NRPN/RPN. 98 99 (62 63) NRPN: (LSB/MSB) indica un parametro che un dispositivo MIDI pemette di controllare tramite DATA ENTRY/INCREMENT/DECREMENT. Siccome ogni dispositivo può definire un particolare NRPN, è possibile che due macchine diverse interpretino lo stesso numero in due modi diversi, creando un conflitto. Un buon dispositivo dovrebbe poter permettere di disabilitare la ricezione di NRPN. Questi parametri non sono registrati da MMA, ma liberamente definiti dal costruttore. Funzionano come gli RPN. 100 101 (64 65) RPN: (LSB/MSB) indica un parametro che un dispositivo MIDI permette di controllare tramite DATA ENTRY/INCREMENT/DECREMENT. La MMA assegna RPN a specifiche funzioni. Applicazioni ed esempi Con i CC RPN mi servono 1 STATUS BYTE + 2 DATA BYTE per indicare quale controllo voglio selezionare. Per impostare la quantità di controllo mi serve il CC DATA ENTRY. 25
Come detto, gli RPN sono MSB e LSB: 101 (64H) 100 (65H). Le funzione gestite con RPN sono: Pitch Bend Range, Channel Fine Tuning (accordatura fine), Channel Coarse Tuning (accordatura grezza, per semitoni) 1. La combinazione dei DATA BYTE 2 dell RPN MSB e LSB determina la funzione (ricorda, il DATA BYTE 1 determina il tipo di CC, MSB o LSB). Pitch Bend Range Channel Fine Tuning MSB 00H LSB 00H MSB 00H LSB 01H Channel Coarse Tuning MSB 00H LSB 02H RPN NULL MSB 7FH LSB 7FH Nota che, una volta inviato un RPN, basta inviare solo DATA ENTRY. RPN NULL serve se per caso vengono inviati DATA ENTRY indesiderati. Questo RPN annulla quindi l azione dei DATA ENTRY successivi. Per quanto riguarda il CC DATA ENTRY MSB (LSB si usa raramente) è il DATA BYTE 2 che determina la quantità di controllo. Pitch Bend Range 00H = no pitch bend 01H = ±1 semitono Etc. Channel Fine Tuning 40H = accordatura standard (064) (max ±1 semitono) 00H = -1 semitono (000) 7FH = +1 semitono (127) Channel Coarse Tuning 40H = accordatura standard (064) (max ±48 semitoni) L escursione è di 4 ottave ±48 semitoni (da 16 a 112 in decimale) Aggiungo/Diminuisco = ±semitono 1 Channel Fine Tuning e Channel Coarse Tuning possono ancora trovarsi con il loro vecchio nome Master Fine Tuning e Master Coarse Tuning 26
Figura 5.11 Tabella riassuntiva dei CC RPN [P. Guaccero] 27
5.6 Tavole Riassuntive TAVOLA DEI MESSAGGI MIDI MESSAGGI DI CANALE MESSAGGIO STATUS BYTE PRIMO DATA BYTE SECONDO DATA BYTE NOTE OFF 8n Numero di Nota Velocity NOTE ON 9n Numero di Nota Velocity AFTERTOUCH An Numero di Nota Quantità di Pressione POLIFONICO CONTROL CHANGE Bn Numero di Controllo Valore del Controllo PROGRAM CHANGE Cn Numero di Programma - AFTERTOUCH DI Dn Quantità di Pressione - CANALE PITCH BEND En LSB MSB MESSAGGI DI SISTEMA Messaggi Comuni al Sistema MESSAGGIO STATUS BYTE PRIMO DATA BYTE SECONDO DATA BYTE SYSTEM EXCLUSIVE F0 Codice Fabbricante??? F1 SONG POSITION F2 LSB MSB POINTER SONG SELECT F3 Numero della Song F4, F5 TUNE REQUEST F6 END OF EXCLUSIVE F7 Messaggi in Tempo Reale MESSAGGIO STATUS BYTE PRIMO DATA BYTE SECONDO DATA BYTE TIMING CLOCK F8 F9 START FA CONTINUE FB STOP FC FD ACTIVE SENSING FE SYSTEM RESET FF 28
TAVOLA DEI CONTROLLI MIDI CONTROLLI CONTINUI DEC HEX CONTROLLER 0 00 Bank Select MSB (Banks above #129) 1 01 Modulation Wheel or Lever 2 02 Breath Controller 3 03 Undefined 4 04 Foot Controller 5 05 Portamento Time 6 06 Data Entry MSB 7 07 Main Volume 8 08 Balance (0 = left, 64 = center, 127 = right) 9 09 Undefined 10 0A Pan (0 = left, 64 = center, 127 = right) 11 0B Expression (0 = lower volume, 64 = same, 127 = higher) 12-15 0C-0F Undefined 16-19 10-13 General Purpose Controllers (# s 1-4) 20-31 14-1F Undefined 32 20 Bank Select LSB (Banks #1 - #128) 33-63 21-3F LSB for controllers 1-31 CONTROLLI AD INTERRUTTORE DEC HEX CONTROLLER 64 40 Damper Pedal (Sustain) 65 41 Portamento 66 42 Sostenuto 67 43 Soft Pedal 68 44 Legato Footswitch (0-3F = Normal, 40-7F = Legato) 69 45 Hold 2 70 46 Sound Controller #1(Sound Variation) 71 47 Sound Controller #2 (Timbre/Harmonic Intensity) 72 48 Sound Controller #3(Release Time) 73 49 Sound Controller #4(Attack Time) 74 4A Sound Controller #5 (Brightness) 75-79 4B-4F Undefined 29
80-83 50-53 General Purpose Controllers (# s 5-8) 84 54 Portamento Controller (PTC) (n = channel, v = source note) 91 5B Effects Depth #1 (External Effects Depth) 92 5C Effects Depth #2 (Tremolo Depth) 93 5D Effects Depth #3 (Chorus Depth) 94 5E Effects Depth #4 (Celeste Detune - Depth ) 95 5F Effects Depth #5 (Phaser Depth) CONTROLLI PER DATI DEC HEX CONTROLLER 96 60 Data Increment 97 61 Data Increment 98 62 Non-Registered Parameter Number LSB 99 63 Non-Registered Parameter Number MSB 100 64 Registered Parameter Number LSB 101 65 Registered Parameter Number MSB 102-119 66-77 Undefined MESSAGGI DEL MODO DI CANALE DEC HEX CONTROLLER 120 78 All Sound Off 121 79 Reset All Controllers 122 7A Local Control 123 7B All Notes Off 124 7C Omni Mode Off 125 7D Omni Mode On 126 7E Mono Mode On (Poly Off) 127 7F Poly Mode On (Mono Off) 30
5.7 Sistemi numerici Sistema Binario (BIN) BASE 2 : {0, 1} nel sistema binario posso avere solo le due cifre 0 e 1. 0 1 2 3 4 5 6 7 2 2 2 2 2 2 2 2 1 2 4 8 16 32 64 128 potenze di 2. Esempio 1: 1 1 0 1 = 13 2 2 2 2 3 2 1 0 8 4 0 1 Esempio 2: 0 1 1 1 1 0 1 0 = 122 2 2 2 2 2 2 2 2 7 6 5 4 3 2 1 0 0 64 32 16 8 0 2 0 Posso procedere anche al contrario, partendo da una cifra decimale: 99 = 01100011 Sistema Esadecimale (HEX) BASE 16 : {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} significato: A = 10, F = 15 0 1 2 16 = 1, 16 = 16, 16 = 256 Esempio 1: 69H = 105 6 16 + 9 1 Esempio 2: A0H = 10 16 + 0 1 = 160 Esempio 3: BEH = 11 16 + 14 1 = 190 Posso procedere anche al contrario, partendo da una cifra decimale. Voglio rappresentare il numero decimale 234 in esadecimale: Eseguo la divisione 234 16. Come risultato otterrò un quoziente Q e un resto R. In questo caso si ha Q = 14, R = 10, perciò in definitiva si avrà per 234 QRH = EAH. Conversione di un byte da BIN a HEX e poi a DEC (esempio): 31
Per prima cosa divido il byte in 2 nibble da trattare separatamente. Fatto questo ricavo il valore in esadecimale dei singoli nibble e procedo in questo modo: 1011 1100 11 12 B C BCH = 11 16 + 12 1 = 188 Posso procedere al contrario, partendo dal numero decimale. Ad esempio per il numero 133: 133 = 8 5 H 1000 0101 32