Skip to content

erlsci/midi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

midi

Batteries-included Erlang MIDI.

Blocked: currently waiting on

  • midiio 0.1.0 release (NIF for minimidio)
  • midilib 0.6.0 refactor

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

                       midi
             (one batteries-included API)
                        │
            ┌───────────┴────────────┐
         midiio                    midilib
  (transport: raw bytes      (codec + Standard MIDI
   ⇄ OS ports; a NIF)         Files; pure Erlang)
         │
     minimidio.h
  (vendored C library;
   the OS MIDI backends)

Read top-down as "is built on": midi combines midiio (I/O) and midilib (codec) behind one API; midiio wraps the vendored minimidio.h; midilib is independent, pure Erlang. midiio is codec-free and does not depend on midilib.

Library Layer Native build?
midilib message codec + Standard MIDI File read/write no (pure Erlang)
midiio realtime device I/O (NIF over minimidio) yes
midi the whole enchilada: codec + I/O behind one API yes (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

About

Batteries-included Erlang MIDI: realtime device I/O (midiio) wired to message and file codecs (midilib) behind one API

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages