MIDI Out

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:

  1. Note on - midi_note_on
  2. Note off - midi_note_off
  3. Control change - midi_cc
  4. Pitch bend - midi_pitch_bend
  5. Clock ticks - midi_clock_tick

Ci sono inoltre molti altri messaggi MIDI supportati - Controlla la documentazione API per tutte le altre funzioni che cominciano per midi_.

Collegamento di un dispositivo 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.

Invio degli eventi MIDI

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

Selezionare un dispositivo MIDI

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

MIDI Studio

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).