Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jimm/crystal_port_midi
Crystal C bindings for the PortMIDI cross-platform MIDI I/O library
https://github.com/jimm/crystal_port_midi
Last synced: 9 days ago
JSON representation
Crystal C bindings for the PortMIDI cross-platform MIDI I/O library
- Host: GitHub
- URL: https://github.com/jimm/crystal_port_midi
- Owner: jimm
- License: mit
- Created: 2019-04-15T19:07:29.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2024-05-08T19:37:26.000Z (6 months ago)
- Last Synced: 2024-08-01T17:36:12.209Z (3 months ago)
- Language: Crystal
- Homepage:
- Size: 32.2 KB
- Stars: 6
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-crystal - port_midi - Crystal C bindings for the PortMIDI cross-platform MIDI I/O library (Misc)
- awesome-crystal - port_midi - Crystal C bindings for the PortMIDI cross-platform MIDI I/O library (Misc)
README
# port_midi
`port_midi` is a wrapper around the cross-platform
[PortMidi](http://portmedia.sourceforge.net/portmidi/) MIDI I/O library.The low-level wrapper around PortMidi is in the lib `LibPortMIDI`.
The module `PortMIDI` contains a few helper functions that are useful when
converting between MIDI data and PortMidi messages. It also contains the
function `PortMIDI#list_all_devices` which prints out all of the input and
output devices available to PortMidi.At a higher level of abstraction, `InputStream` and `OutputStream` represent
the two kinds of streams that do reading and writing of MIDI data.Finally, a `SimpleMIDIDevice` wraps one input stream and one output stream.
## Installation
1. 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.
2. Add the dependency to your `shard.yml`:
```yaml
dependencies:
port_midi:
github: jimm/crystal_port_midi
```
3. Run `shards install`## Usage
```crystal
require "port_midi"PortMIDI.init
```See the `examples` directory for a few sample applications that use
`port_midi` and the `InputStream`, `OutputStream`, and `SimpleMIDIDevice`
classes.To build the examples, run `shards build`.
## Development and Testing
To run the tests, run `crystal spec`.
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
running `/usr/bin/yes
| crystal spec`, but I can't work around the call to `exit`.## Documentation
To generate the docs, run `crystal docs`.
## Contributing
1. [Fork the repo](https://github.com/jimm/port_midi/fork)
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request## Contributors
- [Jim Menard](https://github.com/jimm) - creator and maintainer