Zusätzlich zum Empfangen von MIDI-Ereignissen können wir auch MIDI-Ereignisse aussenden, um externe Hardware-Synths, Keyboards und andere Geräte zu triggern und zu steuern. Sonic Pi bietet einen vollständigen Satz von Funktionen zum Senden verschiedener MIDI-Signale wie z. B:
midi_note_on
midi_note_off
midi_cc
midi_pitch_bend
midi_clock_tick
Es gibt noch eine Menge weiterer MIDI-Signale, die unterstützt werden – sieh dir in der API-Dokumentation alle weiteren Funktionen an, die mit midi_
beginnen.
Um ein MIDI-Signal an ein externes Gerät zu senden, muss es zunächst angeschlossen sein. Für weitere Details sieh dir den Unterabschnitt ‘Anschließen eines MIDI-Controllers’ in Abschnitt 11.1 an. Beachte, dass, wenn du dich über USB mit einem Gerät verbindest, an das du sendest (anstatt zu empfangen) die Prozedur jeweils die gleiche ist. Wenn du jedoch die klassischen DIN-Anschlüsse verwendest, stelle sicher, dass du es mit dem MIDI-Ausgang deines Computers verbindest. Du solltest dein MIDI-Gerät in den Einstellungen sehen.
Die vielen midi_*
-Funktionen arbeiten ebenso wie play
, sample
und synth
, indem sie ein Signal zur aktuellen (logischen) Zeit schicken . Um zum Beispiel Aufrufe an die midi_*
-Funktionen zu verteilen, musst du sleep
in der gleichen Weise benutzen wie du es bei play
getan hast. Lass uns das ansehen:
midi_note_on :e3, 50
Dies sendet ein MIDI-Note-on-Ereignis an das angeschlossene MIDI-Gerät mit Anschlagstärke 50. (Beachte, dass Sonic Pi Noten in der Form von :e3
automatisch in ihre entsprechenden MIDI-Nummern konvertiert, wie z. B. 52 in diesem Fall.)
Wenn dein MIDI-Gerät ein Synthesizer ist, solltest du hören können, wie er eine Note spielt. Um dies zu deaktivieren verwende midi_note_off
:
midi_note_off :e3
Standardmäßig wird Sonic Pi jedes MIDI-Signal an alle angeschlossenen Geräte auf allen MIDI-Kanälen senden. Auf diese Art ist es leicht mit einem einzelnen verbundenen Gerät zu arbeiten, ohne zuvor etwas einstellen zu müssen. Allerdings kann es sein, dass ein MIDI-Gerät MIDI-Kanäle auf spezielle Art handhabt (möglicherweise hat jede Note einen eigenen Kanal) - und außerdem möchtest vielleicht mehr als ein MIDI-Gerät zur gleichen Zeit anschließen. Und bei etwas komplizierteren Setups, möchtest du wahrscheinlich genauer bestimmen, welches Gerät welche(s) Signal(e) erhält, und auf welchem Kanal.
Wir können festlegen an welches Gerät wir senden, indem wir die port:
-Option verwenden, in der wir den Gerätenamen verwenden, wie er in den Einstellungen angezeigt wird:
midi_note_on :e3, port: "moog_minitaur"
Wir können ebenfalls angeben, an welchen Kanal gesendet werden soll, indem wir die Option channel:
(mit einem Wert im Bereich 1-16) verwenden:
midi_note_on :e3, channel: 3
Natürlich können wir auch beides zugleich festlegen, um an ein bestimmtes Gerät auf einen bestimmten Kanal zu senden:
midi_note_on :e3, port: "moog_minitaur", channel: 5
Und schließlich ist es eine wirklich spannende Sache, den Audio-Ausgang deines MIDI-Synthesizers mit einem der Audio-Eingänge deiner Soundkarte zu verbinden. So kannst du deinen Synthesizer mit den midi_*
Funktionen steuern und gleichzeitig die erzeugten Klänge mit live_audio
und Effekten verändern:
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
(Die midi
-Funktion ist eine handliche Kurzform, um note on
- und note off
-Ereignisse mit einem einzigen Befehl zu senden. Für weitere Informationen wirf einen Blick in ihre Dokumentation).