Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Ruby MIDI message objects
Latest commit 293101d @arirusso version bump
Failed to load latest commit information.
examples shorter load path
lib version bump
test test Status.find
Gemfile specific gem versions
LICENSE dates add link
Rakefile easier to index tests

MIDI Message


Ruby MIDI message objects



gem install midi-message

Or if you're using Bundler, add this to your Gemfile

gem "midi-message"


require "midi-message"

Basic Messages

There are a few ways to create a new MIDI message. Here are some examples, 64, 64)

MIDIMessage::NoteOn["E4"].new(0, 100)

MIDIMessage.with(:channel => 0, :velocity => 100) { note_on("E4") }

Those expressions all evaluate to the same object

   @data=[64, 64],
   @status=[9, 0],
   @verbose_name="Note On: E4">

SysEx Messages

As with any kind of message, you can begin with raw data, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7)

Or in a more object oriented way

synth =, :model_id => 0x42, :device_id => 0x10)[0x40, 0x7F, 0x00], 0x00, :node => synth)

A Node represents a device that you're sending a message to (eg. your Yamaha DX7 is a Node). Sysex messages can either be a Command or Request

You can use the Node to instantiate a message

synth.command([0x40, 0x7F, 0x00], 0x00)

One way or another, you will wind up with a pair of objects like this

   @address=[64, 0, 127],


The parse method will take any valid message data and return the object representation

MIDIMessage.parse(0x90, 0x40, 0x40)

  #<MIDIMessage::NoteOn:0x9c1c240 ..>

MIDIMessage.parse(0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7)

  #<MIDIMessage::SystemExclusive::Command:0x9c1e57c ..>

Check out nibbler for more advanced parsing




Apache 2.0, See the file LICENSE

Copyright (c) 2011-2015 Ari Russo

Something went wrong with that request. Please try again.