Naast de ontvangst van MIDI events kunnen MIDI events ook verzonden worden om externe hardware synthesizers, keyboards en andere apparaten te manipuleren. Sonic Pi levert een volledige set van functies om diverse MIDI berichten te versturen, zoals:
midi_note_on
midi_note_off
midi_cc
midi_pitch_bend
midi_clock_tick
Er zijn vele andere ondersteunde MIDI berichten - bekijk de API documentatie voor alle functies die starten met midi_
.
Om een MIDI bericht naar een extern apparaat te versturen, moet deze eerst zijn verbonden. Bekijk de subsectie ‘Verbinden van een MIDI Controller’ in sectie 11.1 voor meer details. Merk op dat wanneer USB wordt gebruikt, het verbinden naar een apparaat waar data toe wordt verzonden (anders dan ontvangen) dezelfde procedure is. Indien gebruik wordt gemaakt van DIN connectoren moet verbonden worden met de ‘MIDI out’ poort van de computer. Hiervoor moet je MIDI apparaat in het voorkeuren paneel zichtbaar zijn.
De vele midi_*
functies werken zoals play
, sample
en synth
op de manier dat ze een bericht sturen via de huidige (logische) tijd. Om bijvoorbeeld calls uit te delen naar midi_*
functies kan sleep
worden gebruikt, zoals gedaan via play
. Laten we hiernaar kijken:
midi_note_on :e3, 50
Dit zal een MIDI noot versturen naar het verbonden MIDI apparaat met velocity 50. (Merk op dat Sonic Pi automatisch noten converteert in de vorm :e3
naar de equivalente MIDI nummers zoals, in dit geval, 52.)
Indien je verbonden MIDI apparaat een synthesizer betreft, zou je een noot moeten kunnen horen. Om dit uit te schakelen kan midi_note_off
worden gebruikt:
midi_note_off :e3
Sonic Pi zal standaard alle MIDI berichten naar alle aangesloten apparaten op alle MIDI kanalen versturen. Dit is om het eenvoudig te maken om één aangesloten apparaat te werken, zonder dat er instellingen hoeven worden aangepast. Maar, soms verwerkt een MIDI apparaat een MIDI kanaal op een afwijkende manier (wellicht krijgt elke noot zijn eigen kanaal) en wellicht wil je meerdere MIDI apparaten tegelijk aansluiten. In zulke meer ingewikkelde opstellingen, wil je specifieker kunnen aangeven welke berichten naar welk apparaat en kanaal gaan.
We kunnen aangeven naar welk apparaat gestuurd gaat worden door de port:
optie mee te geven. Gebruik de apparaat naam zoals in de voorkeuren staat:
midi_note_on :e3, port: "moog_minitaur"
We kunnen ook aangeven via welk kanaal gestuurd gaat worden met de channel:
optie (gebruik een waarde tussen 1-16):
midi_note_on :e3, channel: 3
Natuurlijk kunnen we ze ook beide tegelijk meegeven om naar een specifiek apparaat op een specifiek kanaal te sturen:
midi_note_on :e3, port: "moog_minitaur", channel: 5
En als laatste, wat ook leuk is om te doen, is om de audio-uitgang van je MIDI synthesizer aan te sluiten op een van de audio-ingangen (line-in) van je audio-apparaat.Op deze manier kun je synthesizer bedienen via de midi_*
functies en ook het geluid van je synthesizer daarna weer bewerken via live_audio
en effecten:
with_fx :reverb, room: 1 do
live_audio :moog
end
live_loop :moog_trigger do
midi (octs :e1, 3).tick, sustain: 0.1
sleep 0.125
end
(De functie midi
is beschikbaar als een handige notatie om zowel “note aan” als “note uit” events te sturen in één commando. Bekijk de midi
documentatie voor meer informatie).