Sommario:

(quasi) Universal MIDI SysEx CC Programmer (e Sequencer): 7 passaggi (con immagini)
(quasi) Universal MIDI SysEx CC Programmer (e Sequencer): 7 passaggi (con immagini)

Video: (quasi) Universal MIDI SysEx CC Programmer (e Sequencer): 7 passaggi (con immagini)

Video: (quasi) Universal MIDI SysEx CC Programmer (e Sequencer): 7 passaggi (con immagini)
Video: Corso di Programmazione MIDI - Lezione 1: la nascita del MIDI, le connessioni, il nework 2024, Dicembre
Anonim
(quasi) Programmatore Universal MIDI SysEx CC (e Sequencer…)
(quasi) Programmatore Universal MIDI SysEx CC (e Sequencer…)
(quasi) Programmatore Universal MIDI SysEx CC (e Sequencer…)
(quasi) Programmatore Universal MIDI SysEx CC (e Sequencer…)

A metà degli anni ottanta i produttori di sintetizzatori hanno iniziato un processo "meno è meglio" che ha portato ai sintetizzatori barebone. Ciò ha consentito la riduzione dei costi da parte del produttore, ma ha reso il processo di riparazione noioso se non impossibile per l'utente finale.

I produttori stessi e le aziende terze hanno realizzato box opzionali pieni di manopole e/o slider per permetterti di "suonare" effettivamente con i toni dei tuoi synth, ma questi sono stupidamente troppo cari al giorno d'oggi e, come sempre, siamo costretti a trovare da soli soluzioni economiche;)

Questo progetto è nato dalla mia esigenza di programmare facilmente le patch su alcuni dei miei ultimi synth acquistati: un Roland Alpha Juno 2 e JX8P. È iniziato come un semplice controller SysEx, poi è cresciuto su di me ed è diventato qualcosa di più complesso, con altri sintetizzatori supportati in arrivo (Korg DW8000, Oberheim Matrix 6/6R, SCI MAX) e un sequencer integrato.

In questo tutorial ti mostrerò come realizzare il tuo controller: uno strumento economico che emula quelle scatole di controllo dei parametri ad alto prezzo… e altro ancora (continua a leggere per i dettagli…).

Passaggio 1: cos'è esattamente questa cosa (e cosa non lo è…)

Che cos'è esattamente questa cosa (e cosa non è…)
Che cos'è esattamente questa cosa (e cosa non è…)
Che cos'è esattamente questa cosa (e cosa non è…)
Che cos'è esattamente questa cosa (e cosa non è…)
Che cos'è esattamente questa cosa (e cosa non è…)
Che cos'è esattamente questa cosa (e cosa non è…)

Il controller MIDI SysEx e Control Change qui è essenzialmente un controller MIDI a 16 manopole (potenziometri) e 4 pulsanti. Lo sketch predefinito gestisce tre "pagine", per un totale di 48 parametri di tono synth.

Ho reso il controller compatibile con i messaggi MIDI di control change (un tipo di messaggio MIDI semplice e "globale" ampiamente utilizzato dai produttori di synth soprattutto dagli anni '90) e i messaggi SysEx (un altro tipo di messaggio MIDI, molto meno generale e fortemente specifico del synth usato negli anni '80).

In particolare, il titolare del trattamento di default è compatibile con:

- Roland Alpha Giunone (1/2)

- Roland JX8P

- Korg DW8000

- Oberheim Matrix 6/6R (firmware > 2.14)

- Circuiti sequenziali MAX/SixTrak.

Puoi eventualmente abilitare il controller per agire su qualsiasi synth in grado di ricevere messaggi di MIDI control change (CC), ma è disabilitato per impostazione predefinita.

Essendo la natura open source del progetto, è molto facile supportare qualsiasi altro synth di tua scelta (vedi il passaggio del codice per i dettagli).

Il layout dei parametri di tono con tutti quei numeri potrebbe inizialmente creare confusione, ma non è "casuale" come potrebbe sembrare: segue l'ordine della tabella di implementazione MIDI del produttore. Questa è stata una scelta progettuale per mantenere il codice semplice e "universale".

In questa pagina puoi scaricare le foto con il "layout" 4x4 che ho realizzato per Alpha-Junos, JX8P, DW8000, Matrix 6 e MAX/SixTrak: i parametri blu sono quelli che puoi modificare a pagina 1, quelli neri a pagina 2 e arancione quelli di pagina 3.

Anche se il controller non ha uno schermo, giocare con i sintetizzatori che mostrano quale parametro viene sintonizzato in tempo reale rende il processo di creazione di una patch una gioia. Il JX8P e Matrix 6, ad esempio, ne sono capaci; l'Alpha Juno, invece, non ti mostra il parametro che viene modificato e rende le cose un po' più difficili (ma creare patch fantastiche è sicuramente fattibile e più facile rispetto all'utilizzo dell'interfaccia knobless incorporata); DW8000 ha solo display numerici, ma puoi vedere i tuoi tweakin in tempo reale, quindi si posiziona in mezzo a questo.

E quei pulsanti lì?

Bene, il primo (in alto a sinistra nel mio layout) è per la navigazione della pagina: salta alla pagina del parametro successivo ad ogni pressione del pulsante. I LED indicheranno in quale pagina ti trovi.

Il secondo quando viene premuto invia la patch su cui stavi lavorando al synth (immaginalo: hai creato la patch della tua vita, poi hai toccato un pulsante di programma sulla superficie del synth e la patch specifica per il pulsante è stata caricata … tutto il tuo lavoro è andato !). Con questo pulsante è possibile inviare tutti i valori che il programmatore aveva memorizzato durante l'ultimo processo di patching. Questo processo di richiamo della patch non funziona se si preme nuovamente il randomizzatore (il processo di randomizzazione sovrascrive tutti i parametri in memoria) ed è efficace solo sui parametri modificati almeno una volta. L'ultima patch non viene conservata in memoria dopo lo spegnimento.

Il terzo è per una funzione secondaria: il randomizzatore/patcher! Ruotare completamente in senso antiorario le manopole su cui si desidera che agiscano sul parametro per bloccare al valore minimo (es. LFO dell'oscillatore, inviluppo dell'oscillatore, ecc.) o ruotare completamente in senso orario per massimizzare il valore (es. volume del mix dell'oscillatore, volume del VCA, ecc.) e premere il pulsante per avviare il processo di randomizzazione per tutti gli altri parametri.

Il quarto pulsante serve per attivare un easter egg (una specie di…) che ho inserito nel codice dopo aver notato che il layout era perfetto per… un sequencer MIDI a 16 passi! Esatto: premi il quarto pulsante (pulsante MODE), il controller entrerà in "modalità sequencer" e ti sarà permesso di attivare le note in modo simile a quello che facevano i vecchi sequencer analogici. Bello eh!

Premere di nuovo il pulsante MODE per tornare alla modalità controller/patcher.

E quei LED?

Ci sono 4 LED in corrispondenza di ogni pulsante (a destra di ogni pulsante nel mio layout); questi LED hanno molteplici usi:

1) ti dicono in quale pagina di parametri ti trovi (il led in alto è acceso quando sei nella pagina 1, il led in basso è acceso quando è attiva la pagina 2, il led 3 è acceso… lo hai capito tu). Siamo limitati a 3 pagine ATM, ma il codice può essere facilmente regolato per gestire più pagine;

2) il secondo LED indica la pagina dei parametri 2 E è acceso quando il microcontrollore sta inviando la patch precedente (richiamo della patch);

3) il terzo LED indica la pagina 3 dei parametri E è acceso durante il processo di randomizzazione.

Il quarto LED non fa nulla in modalità controller MIDI e viene utilizzato per il cambio MODE globale.

Tutte queste funzioni vengono trasmesse come messaggi MIDI, quindi per essere efficace, il tuo synth deve essere in grado/abilitato a ricevere e interpretare questo tipo di messaggi

Passaggio 2: il sequencer di 16 passaggi "nascosto"

Il
Il

Come detto, durante il test del controller mi sono reso conto che sarebbe stato bello far funzionare una sequenza di note in modo da poter modificare i parametri del synth e avere un'idea migliore dell'effetto finale sul tono. Ho un sequencer software (mi piace così tanto seq24!), ma questo hardware è un sequencer a 16 passi quasi PERFETTO! Quindi era solo una questione di codice per implementarlo.

È possibile passare dalla modalità controller alla modalità sequencer premendo il pulsante #4 (pulsante MODE).

Mentre in modalità sequencer i pulsanti funzionano in modo diverso e i LED ti danno nuove informazioni:

- il primo pulsante (tasto SHIFT) quando viene premuto permette di modificare il tempo, la lunghezza delle note, i canali e l'ottava; il valore del tempo è dato dalla posizione del primo potenziometro, la lunghezza della nota è calcolata dalla posizione del secondo potenziometro, i canali MIDI dalla posizione del terzo e quarto potenziometro e l'ottava (-1 o fino a +2) dal quinto potenziometro. È possibile controllare il tempo da 40 BPM (ruotare il potenziometro n. 1 completamente in senso antiorario tenendo premuto il pulsante n. 1) a quasi 240 BPM (ruotare il potenziometro n. 1 completamente in senso orario tenendo premuto il pulsante n. 1). È possibile impostare la lunghezza delle note su semiminime, semiminime, ottavi, sedicesimi ruotando il potenziometro n. 2 tenendo premuto il pulsante SHIFT. È possibile impostare i canali MIDI (canale primario e canale secondario) da 1 a 16. L'intervallo delle note di base (da C2 a F#4) può essere abbassato di un'ottava o aumentato di una o due ottave.

Per impostazione predefinita, il tempo è impostato su 120 BPM e la lunghezza delle note su semiminime.

- il secondo pulsante avvia e interrompe la sequenza delle note. Come detto, se cambi modalità premendo il pulsante #4 (MODE) durante l'esecuzione della sequenza, entrerai in modalità controller ma la sequenza continuerà a essere eseguita.

- il terzo pulsante è PANICO! Premendolo tutte le note verranno spente.

- il quarto è usato per alternare tra le modalità globali (pather o sequencer) quando il pulsante #1 non è premuto, o tra le modalità di sequenza (vedi in seguito) quando si preme #1.

In modalità sequencer, se si preme il pulsante di selezione della modalità mentre si tiene premuto il pulsante n. 1 (SHIFT) è possibile alternare tra 3 diverse modalità di sequenza:

Sequenza mono da 1 a 16 passi

Sequenza poli 2 - 16 step: vengono attivate anche le note un'ottava più basse di quelle definite dai potenziometri (questo drena 2 voci per battuta)

Sequenza poli 3 - 8 passi, doppio canale: due sequenze parallele di 8 passi vengono inviate a due canali diversi (CH1 e CH2 di default); impostando lo stesso valore di canale sia sul canale primario che su quello secondario si possono avere due sequenze parallele di 8 step suonate dallo stesso sintetizzatore (polifonico).

Informazioni sui LED: non appena si entra in modalità sequencer, tutte e quattro le luci si accendono. Quando si avvia la sequenza, i LED seguiranno la sequenza (o le sequenze). Ho posizionato un LED ogni quattro potenziometri ed è abbastanza buono per me. Sarebbe semplice modificare lo schizzo per gestire 16 LED, uno per ogni passo tu.

Lo step sequencer miss dispone che qualcuno potrebbe trovare necessario: MIDI sync IN, step hold (puoi solo spegnere uno step), CV out.

Ho implementato clock OUT, ma è in qualche modo bacato. Ho provato due approcci per questo (uno con e uno senza interruzioni del timer), ma entrambi erano imperfetti (o un fallimento totale). Il clock MIDI deve essere rigorosamente perfetto per funzionare a lungo termine. Un segnale di clock viene comunque inviato e puoi disabilitarlo direttamente sullo sketch (vedi più avanti per i dettagli).

Nota che questo step sequencer è MIDI, o digitale se preferisci, quindi per funzionare deve essere collegato ad un synth abilitato a ricevere e interpretare questo tipo di messaggi

Passaggio 3: hardware necessario e costruzione

Hardware necessario e costruzione
Hardware necessario e costruzione
Hardware necessario e costruzione
Hardware necessario e costruzione
Hardware necessario e costruzione
Hardware necessario e costruzione
Hardware necessario e costruzione
Hardware necessario e costruzione

Dopo tutte queste parole, divertiamoci un po'!

Stiamo seguendo il metodo comune di Arduino. Ho usato un Arduino MEGA a causa dell'elevata quantità di ingressi analogici (vogliamo una scatola piena di manopole nodose, no?!:)).

In particolare, Arduino MEGA può gestire 16 ingressi analogici (con qualche ritocco hardware, cioè con il muxing, puoi aumentarlo ma qui non stiamo andando su questa strada), quindi invieremo i 48 messaggi MIDI tramite 16 potenziometri. Ciascun potenziometro controllerà quindi tre parametri, uno per ogni "pagina"; le pagine sono selezionate da un pulsante di commutazione.

Elenco hardware:

- 1x Arduino MEGA

- 16 potenziometri lineari a giro singolo da 10 K ohm

- 16 manopole per pentole

- 4x pulsanti momentanei

- 4 LED

- 6 resistenze da 220 ohm

- 1x connettore MIDI

- 1x scatola progetti in ABS

Un po' di cavo, filo di saldatura e sei - otto ore di tempo libero.

Ho usato una perfboard e dei pin header per realizzare una sorta di shield su cui ho saldato le resistenze e diretto i cavi. Questo ha il vantaggio di permetterti di estrarre il tuo Arduino e usarlo per altri progetti (a un certo punto tutti esauriamo le schede Arduino!). Non è comunque obbligatorio e un altro buon approccio potrebbe essere quello di dissaldare i pinheader e i cavi di saldatura di Arduino MEGA direttamente sul posto.

Ho usato resistenze da 200 ohm al posto delle resistenze da 220 ohm e funzionano comunque perfettamente; Scommetto che anche i resistori da 150 ohm funzionerebbero alla grande (sia per la comunicazione MIDI che per i LED).

Per modellare la scatola, ho prima applicato della carta adesiva sulla superficie della scatola, misurato dove devono essere praticati i fori (avevo 3 cm da un foro all'altro per far entrare tutti i vasi) fatto i fori guida e poi allargato a destra misura per far passare il filo delle pentole o dei bottoni con un mini trapano. Ho impiegato più o meno 2 ore per finire la scatola. Ho realizzato anche dei piccoli buchi e ho incollato i LED.

Ho anche praticato un foro per il connettore MIDI OUT e un altro per il connettore di alimentazione arduino (ho usato direttamente il connettore di alimentazione USB integrato e ho bloccato saldamente l'arduino MEGA in posizione).

ATTENZIONE: indossa SEMPRE protezioni per occhi e mani durante la foratura, qualunque sia il materiale su cui stai lavorando (plastica, legno, metalli, compositi… non importa: sei a rischio sia rispetto agli elettroutensili che ai trucioli di materiale eroso/cotto dall'utensile in movimento).

Quindi, ho posizionato tutti i vasi e i pulsanti e ho saldato i componenti come da foto allegata. Un modo efficace per ridurre il peso dell'oggetto finale (e la lunghezza dei cavi) è collegare a margherita tutti i potenziometri sia sulla linea 5V che sulla linea GND.

E prima che qualcuno chieda: lo so, quella scatola che ho usato è brutta! Ma era gratis e niente batte gratis:)

Passaggio 4: cablaggio

Cablaggio
Cablaggio

Il cablaggio è facile come collegare un potenziometro (x16), un pulsante (x4) e un LED (x4) a una scheda microcontrollore Arduino. Tutte le basi di Arduino sono trattate qui:)

In allegato c'è il cablaggio. Notare che:

- Vengono utilizzati tutti i pin analogici (da A0 ad A15), uno per ogni potenziometro;

- vengono utilizzati 4 pin digitali (ingressi) (da D51, D49, D47, D45), uno per ogni pulsante;

- altri 4 pin digitali (uscite) sono utilizzati per i LED (D43, D41, D39, D37);

- La connessione MIDI out è molto semplice e richiede due resistori da 220 ohm (ma funzioneranno fino a 150 ohm)

- I pulsanti non richiedono resistori di pulldown poiché lo sketch attiva i resistori di pullup interni di Arduino.

- Ogni LED richiede una resistenza di limitazione della corrente (200-220 ohm vanno bene per i LED verdi).

Ho usato i pin digitali elencati per comodità, ma non sono pin "speciali" (non stiamo usando la capacità pwm di alcuni pin qui o qualche altra caratteristica specifica del pin): puoi impostare i tuoi pin digitali preferiti, ma ricordati di modificare il codice di conseguenza oi tuoi pulsanti/LED non funzioneranno!

Si prega di notare che la connessione MIDI OUT nell'immagine è vista FRONTALE (non vista posteriore).

Passaggio 5: Software - Alcuni collegamenti alla teoria

Non spiegherò l'intera teoria alla base dei messaggi System Exclusive o Control Change perché ci sono molti buoni articoli là fuori ed è sciocco riscrivere ciò che è già stato scritto.

Solo alcuni collegamenti rapidi per l'implementazione di Roland SysEx:

- https://erha.se/~ronny/juno2/Roland%20Juno%20MIDI%2… (INGLESE)

- https://www.2writers.com/eddie/tutsysex.htm (INGLESE)

- https://www.chromakinetics.com/handsonic/rolSysEx.h… (INGLESE)

- https://www.audiocentralmagazine.com/system-exclusi… (ITALIANO)

e qualche link per il MIDI in generale:

-

-

Passaggio 6: Software - lo schizzo

In allegato c'è lo schizzo che dovresti caricare sul tuo Arduino Mega.

Ho cercato di mantenere il programmatore il più "universale" possibile, il che significa che ho cercato di ridurre pezzi di codice specifici del synth. Ho cercato di mantenere il codice il più semplice possibile. L'aggiunta dello step sequencer ha reso le cose più complesse e il codice più disordinato, comunque per me ne è valsa la pena. Mantenere il codice "universale" è il motivo per cui il layout del controller è così "casuale": segue l'ordine dei parametri dell'implementazione MIDI del produttore del sintetizzatore definito nel manuale. Potrebbe essere fonte di confusione all'inizio, ma ti ci abituerai molto velocemente.

Il codice/schizzo/firmware di default supporta "solo" 48 parametri (tre pagine di 16 manopole ciascuna) quindi potrebbe non essere possibile controllare tutti i messaggi MIDI supportati dal vostro synth (pensate ad un Access Virus o Novation Supernova: accettano più o meno 110 parametri conformi MIDI). Puoi facilmente modificare lo schizzo per supportare più messaggi, se necessario.

Attualmente sono supportati i messaggi SysEx compatibili con Roland Alpha-Juno, JX8P, Korg DW8000 e Oberheim Matrix 6. Ho lasciato il codice per i messaggi compatibili con Juno 106 nel caso ne avessi bisogno.

Per Matrix 6, ho dovuto selezionare i parametri da controllare. Ho lasciato fuori la terza busta, la seconda rampa e qualcos'altro. La matrice non può comunque essere controllata via MIDI, quindi è anche fuori. È necessario il firmware aggiornato (ver. 2.14 o superiore) e impostare il parametro "Master -> Sysex Enable" su "3".

Il clock out è in qualche modo difettoso (l'orologio deve essere rigoroso per funzionare come dovrebbe e probabilmente i due approcci che ho adottato non sono efficaci). Per impostazione predefinita è disabilitato.

Il codice include commenti, quindi non è necessario aggiungere ulteriori commenti qui.

Come sempre: ricorda che non sono un programmatore nella vita reale e sicuramente ci sono modi migliori per codificare ciò di cui abbiamo bisogno qui. Se sei un programmatore e hai suggerimenti, sei il benvenuto! Vi prego di inviarmi qualsiasi variazione che possa aumentare l'efficienza/efficacia del codice e la includerò nello sketch principale (citando ovviamente il Contributor!).

Imparo sempre qualcosa di nuovo leggendo il codice di un buon programmatore;)

Passaggio 7: progetti correlati

Per quanto ne so, non c'è un controller di parametri MIDI e un sequencer là fuori (forse il vecchio Behringer BCR2000 con un firmware modificato?)

comunque, se non sei incline a realizzare un box come questo ma sei molto interessato a soluzioni economiche per controllare i parametri del tuo synth da remoto, prendi in considerazione queste altre alternative:

- Editor MIDI CTRL: questo è un brillante programma open source gratuito in esecuzione su win/Linux/mac che può trasformare il tuo PC in un controller completo per synth SysEx

- Convertitore CC "junosex" di David Konsumer: questo progetto richiede un lavoro hardware minore da parte tua e l'idea è fantastica - un convertitore CC a SysEx basato su arduino che ti consente di utilizzare un comune controller MIDI non SysEx (ad esempio una tastiera master AKAI MPK) per parlare con il tuo synth pronto per SysEx

Consigliato: