In aggiunta alla ricezione degli eventi MIDI, possiamo anche inviare eventi MIDI per controllare synth esterni, tastiere e altri dispositivi. Sonic Pi fornisce un set completo di funzioni per mandare vari eventi MIDI come ad esempio:
midi_note_on
midi_note_off
midi_cc
midi_pitch_bend
midi_clock_tick
Ci sono inoltre molti altri messaggi MIDI supportati - Controlla la documentazione API per tutte le altre funzioni che cominciano per midi_
.
Per poter inviare messaggi MIDI a un dispositivo esterno, dobbiamo prima averlo collegato. Controlla la sotto-sezione “Collegamento di un Controller MIDI” nella sezione 11.1 per ulteriori dettagli. Nota che se stai usando la porta USB, il collegamento di un dispositivo per l’invio (e la ricezione) segue la stessa procedura. Tuttavia, se stai usando il classico connettore DIN, assicurati di aver collegato il dispositivo alla porta MIDI Out del tuo computer. Dovresti vedere il tuo dispositivo MIDI elencato nel pannello preferenze.
Le molte funzioni midi_*
funzionano esattamente come play,
sample e
synth, mandando un messaggio al tempo (logico) corrente. Per esempio, per distribuire chiamate alla funzione
midi_* dovrai usare
sleep come hai fatto per
play`. Diamo un’occhiata:
midi_note_on :e3, 50
Questo invierà un evento MIDI note on al dispositivo MIDI connesso con velocity 50. (Nota che Sonic Pi convertirà le note dal formato :e3
al loro numero MIDI corrispondente come ad esempio 52 in questo caso.)
Se il dispositivo collegato è un sintetizzatore, dovresti sentirlo suonare una nota. Per disabilitarla, usa midi_note_off
:
midi_note_off :e3
Come impostazione predefinita, Sonic Pi manda ogni messaggio MIDI a tutti i dispositivi connessi su tutti i canali MIDI. Questo è per rendere semplice lavorare con un singolo dispositivo connesso senza dover configurare nulla. Tuttavia, talvolta un dispositivo MIDI gestirà i canali MIDI in un modo particolare (magari ogni nota ha un canale separato) e magari avresti bisogno di collegare più di un dispositivo contemporaneamente. In allestimenti più complessi, potresti voler essere più selettivo riguardo a quale dispositivo MIDI riceve quale messaggio attraverso quale canale.
Possiamo specificare a quale dispositivo inviare usando l’opzione port:
, usando il nome dispositivo come è mostrato nelle preferenze:
midi_note_on :e3, port: "moog_minitaur"
Possiamo anche specificare in quale canale inviare usando l’opzione channel:
(usando un valore compreso nell’intervallo 1-16):
midi_note_on :e3, channel: 3
Naturalmente possiamo specificare entrambe le cose contemporaneamente, per un dispositivo specifico su un canale specifico:
midi_note_on :e3, port: "moog_minitaur", channel: 5
Infine, una cosa veramente divertente da fare è collegare l’uscita audio del tuo sintetizzatore MIDI a uno degli ingressi della tua scheda audio. Puoi a quel punto controllare il tuo sintetizzatore usando le funzioni midi_*
e allo stesso tempo manipolare l’audio usando live_audio
ed effetti:
with_fx :reverb, room: 1 do
live_audio :moog
end
live_loop :moog_trigger do
use_real_time
midi (octs :e1, 3).tick, sustain: 0.1
sleep 0.125
end
(La funzione midi
è disponibile con una comoda scorciatoia per mandare sia eventi note on che note off con un comando singolo. (Controlla questa documentazione per ulteriori informazioni).