Here's an example where MicroMIDI sends some MIDI messages to an output. (see an example here which explains selecting an output...)
require "micromidi"
@o = UniMIDI::Output.use(:first)
MIDI.using(@o) do
note "C"
off
cc 5, 120
play "C3", 0.5
end
Running this code sends the following to @o:
* note C2 (2 is the default octave)
* note-off for C2, since that was the last note sent
* sets controller number 5 to 120
* note C3, waits half of a second and then note-off for C3
By default, any time you call a method that returns a MIDI message object, it's automatically sent to any outputs that are passed in. You can toggle this feature by calling
output false
or
output true
You can also prevent only a single command from sending output by setting the output option:
note "c", :output => false
Sticky Values
If you work with MIDI often, you may have noticed that there was no mention of MIDI channel or velocity in the last example. Most of the time, sending a note-on or note-off message requires those values. In addition, for the first message I didn't specify what octave the note C should be.
In MicroMIDI, channel, velocity and octave are sticky values. When you open a MicroMIDI block, those values default to 0, 100 and 2 respectively. These sticky values will be used by any commands that need them. You can also pass a channel or velocity value to a command, temporarily overriding the sticky value. Providing the octave to a note ala
note "c4" will override the sticky octave.
Here's an example where the sticky values are used, changed and overriden.
MIDI.using(@o) do
channel 1
note "C4"
off
octave 5
velocity 60
note "E", :channel => 2
off
channel 3
note "C3"
off
end
What winds up being sent to @o is:
* note C4 (channel 1, vel 100)
* note-off C4 (channel 1, vel 100)
* note E5 (channel 2, vel 60)
* note-off E5 (channel 2, vel 60)
* note C3 (channel 3, vel 60)
* note-off C3 (channel 3, vel 60)
http://github.com/arirusso/micromidi
Next: MIDI Thru and Processing with MicroMIDI