Skip to content

arirusso/nibbler

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nibbler

nibbler

Parse MIDI Messages

Install

gem install midi-nibbler

or using Bundler, add this to your Gemfile

gem 'midi-nibbler'

Usage

require 'nibbler'

nibbler = Nibbler.new

Enter a MIDI message represented as numeric bytes

nibbler.parse(0x90, 0x40, 0x64)

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

Enter a message byte by byte

nibbler.parse(0x90)
  => []

nibbler.parse(0x40)
  => []

nibbler.parse(0x64)
  => [#<MIDIMessage::NoteOn:0x98c9818
       @channel=0,
       @data=[64, 100],
       @name="C3",
       @note=64,
       @status=[9, 0],
       @velocity=100,
       @verbose_name="Note On: C3">]

There's also a method to parse a string

nibbler.parse_s('904064')
  => [#<MIDIMessage::NoteOn:0x98c9818 ...>]

Use string bytes

nibbler.parse_s('90', '40', '64')
  => [#<MIDIMessage::NoteOn:0x98c9818 ...>]

Use running status

nibbler.parse(0x40, 100)
  => [#<MIDIMessage::NoteOn:0x98c9818 ...>]

Look at the messages we've parsed so far

nibbler.messages
  => [#<MIDIMessage::NoteOn:0x98c9804 ...>
      #<MIDIMessage::NoteOn:0x98c9811 ...>]

Add an incomplete message

nibbler.parse_s('90')
nibbler.parse_s('40')

See progress

nibbler.buffer
  => [0x90, 0x40]

Pass in a timestamp

```ruby
nibbler.parse(0x90, 0x40, 0x40, timestamp: Time.now.to_i)
  => [#<MIDIMessage::NoteOn:0x92f4564 ..>]
nibbler.events
  => #<struct Nibbler::Session::Event
  report=
   #<struct Nibbler::Parser::Report
    messages=
     [#<MIDIMessage::NoteOn:0x000000010484b9f8..>],
    other=[],
    processed=[144, 64, 64]>,
  timestamp=1658626536>]

Nibbler defaults to generate midi-message objects, but it's also possible to use midilib

Nibbler.new(message_lib: :midilib)

nibbler.parse(0x90, 0x40, 0x40)
  => [
    #<MIDI::NoteOn:0x0000000102ed7558
      @channel=0,
      @delta_time=0,
      @note=64,
      @status=144,
      @time_from_start=0,
      @velocity=64>
    ]

Also see

  • midi-eye, a MIDI event listener based on nibbler

Author

License

Apache 2.0, See the file LICENSE

Copyright (c) 2011-2022 Ari Russo

About

Ruby MIDI message parser

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages