alsa rawmidi example added by evhan on Tue Aug 7 14:23:39 2012
(module alsa-rawmidi (play-midi)
(import scheme chicken foreign)
(use srfi-4 srfi-18 lazy-ffi)
#~"libasound.so"
(define note-on #x90)
(define note-off #x80)
(define 0<=n<=127
(lambda (n) (min 127 (max 0 n))))
(define play-midi
(let ((connection #f))
(let-location ((connection-ptr c-pointer))
(#~snd_rawmidi_open pointer: #f (location connection-ptr) "virtual" 0)
(set! connection connection-ptr))
(on-exit
(lambda ()
(#~snd_rawmidi_close connection)))
(lambda (channel pitch volume duration)
(#~snd_rawmidi_write
connection
(u8vector
(bitwise-ior channel note-on)
(0<=n<=127 pitch)
(0<=n<=127 volume))
3)
(thread-start!
(lambda ()
(thread-sleep! duration)
(#~snd_rawmidi_write
connection
(u8vector
(bitwise-ior channel note-off)
(0<=n<=127 pitch)
(0<=n<=127 volume))
3)))))))