Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Ruby MIDI message objects
Ruby
branch: master
Failed to load latest commit information.
examples shorter load path
lib bump gem version
test test channel value change
Gemfile specific gem versions
LICENSE dates
README.md add link
Rakefile easier to index tests

README.md

MIDI Message

midi

Ruby MIDI message objects

Features

Install

gem install midi-message

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

gem "midi-message"

Usage

require "midi-message"

Basic Messages

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

MIDIMessage::NoteOn.new(0, 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

#<MIDIMessage::NoteOn:0x9c1c240
   @channel=0,
   @data=[64, 64],
   @name="E4",
   @note=64,
   @status=[9, 0],
   @velocity=64,
   @verbose_name="Note On: E4">

SysEx Messages

As with any kind of message, you can begin with raw data

MIDIMessage::SystemExclusive.new(0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7)

Or in a more object oriented way

synth = SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)

SystemExclusive::Command.new([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

#<MIDIMessage::SystemExclusive::Command:0x9c1e57c
   @address=[64, 0, 127],
   @checksum=[65],
   @data=[0],
   @node=
    #<MIDIMessage::SystemExclusive::Node:0x9c1e5a4
     @device_id=16,
     @manufacturer_id=65,
     @model_id=66>>

Parsing

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

Documentation

Author

License

Apache 2.0, See the file LICENSE

Copyright (c) 2011-2015 Ari Russo

Something went wrong with that request. Please try again.