port_midi is a wrapper around the cross-platform
PortMidi MIDI I/O library.
The low-level wrapper around PortMidi is in the lib
PortMIDI contains a few helper functions that are useful when
converting between MIDI data and PortMidi messages. It also contains the
PortMIDI#list_all_devices which prints out all of the input and
output devices available to PortMidi.
At a higher level of abstraction,
the two kinds of streams that do reading and writing of MIDI data.
SimpleMIDIDevice wraps one input stream and one output stream.
- Install the PortMidi library. If you are on MacOS and you use Homebrew,
you can run
brew install portmidi. Otherwise, download the PortMidi source from http://portmedia.sourceforge.net/portmidi/ and compile it.
- Add the dependency to your
dependencies: port_midi: github: jimm/crystal_port_midi
require "port_midi" PortMIDI.initialize
examples directory for a few sample applications that use
port_midi and the
To build the examples, run
Development and Testing
To run the tests, run
When running tests on Travis CI or CircleCI, we limit ourselves to tests
that do not return PortMidi errors. That is because the installation of
libportmidi available to Travis through
apt-get is compiled with the
PM_CHECK_ERRORS flag enabled. When an error such as an invalid device ID
happens, the flag causes the PortMidi code to display a message, prompt the
user to hit ENTER, and exit immediately. I can work around the prompt by
/usr/bin/yes | crystal spec, but I can't work around the call to
To generate the docs, run
- Fork the repo
- Create your feature branch (
git checkout -b my-new-feature)
- Commit your changes (
git commit -am 'Add some feature')
- Push to the branch (
git push origin my-new-feature)
- Create a new Pull Request
- Jim Menard - creator and maintainer