undermidi
An LFE MIDI Port Server
Dependencies & Setup
This application assumes that the following are on your system:
git- GNU
make - A modern install of Erlang (v20+)
- rebar3 (Erlang build tool)
- Golang
This project's rebar.config.script will set the required Go environment
variables.
Build & Run
Build the required Go MIDI server and compile the LFE:
$ make clean && make
Start up the LFE REPL:
$ rebar3 lfe repl
Start the app:
lfe> (undermidi:start)
Depending upon the configured log level, you may see a fair amount of output, including the Go MIDI server being started.
API
lfe> (undermidi:ping)
pong
Play the example MIDI code (requires the first MIDI device on your system, index 0, to be connected to a MIDI device, hardware or software, listening on channel 1):
lfe> (undermidi:example)
ok
Macros
The midi macros is provided as a typing convenience for generating MIDI messages:
lfe> (include-lib "undermidi/include/macros.lfe")
|-- loaded include: macros --|
lfe> (midi (midimsg:device 0)
(midimsg:channel 0))
#(midi
#(batch
(#(device 0)
#(channel 0))))
The send macro from the same include saves typing when sending many messages to the Go MIDI server. Additionally, macros for MIDI notes are provided via another include:
lfe> (include-lib "undermidi/include/notes.lfe")
|-- loaded include: notes --|
lfe> (set volume 40)
lfe> (progn
(send (midimsg:device 0)
(midimsg:channel 0))
(send (midimsg:note-on (Bb1) volume))
(timer:sleep 2000)
(send (midimsg:note-off (Bb1))))