midi

Batteries-included Erlang MIDI.

midi is the front door to the erlsci MIDI family. It wires realtime device I/O (midiio) to message and file codecs (midilib) behind one ergonomic API, so the same {midi, ...} message terms flow through live playback and Standard MIDI File reading/writing.

Outbound, you send message terms and midi encodes them to the wire for you; inbound, raw bytes from a device arrive already decoded into terms. You depend on one library and get the whole stack:

midi:send(Device, midimsg:note_on(...)) %% term ─► midibin:encode ─► midiio (out)
%% midiio (in) ─► midibin:decode ─► {midi, ...}

Where it sits

minimidio.h ─► midiio (transport: raw bytes ⇄ OS ports) midilib (codec + .mid files, pure Erlang)
└────────────────┬────────────────────┘
midi (one batteries-included API)
LibraryLayerNative build?
midilibmessage codec + Standard MIDI File read/writeno (pure Erlang)
midiiorealtime device I/O (NIF over minimidio)yes
midithe whole enchilada: codec + I/O behind one APIyes (via midiio)

Need just file/codec work with no native build? Depend on midilib alone. Need raw realtime bytes and your own representation? Depend on midiio alone. Want everything? Depend on midi.

Status

Early placeholder — 0.0.1. The unified API is under active development and will change. Published to Hex to reserve the name.

Build

$ rebar3 compile