Skip to content

Instantly share code, notes, and snippets.

@jvoorhis
Created December 6, 2008 21:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jvoorhis/32973 to your computer and use it in GitHub Desktop.
Save jvoorhis/32973 to your computer and use it in GitHub Desktop.
; mmj: http://www.humatic.de/htools/mmj.htm
; rlwrap java -cp /usr/local/lib/clojure/clojure.jar:/usr/local/lib/mmj/mmj.jar -Djava.library.path=/usr/local/lib/mmj:/usr/lib/java clojure.lang.Repl
(ns org.jvoorhis.midi
(:import (de.humatic.mmj MidiSystem)))
(def out (MidiSystem/openMidiOutput 0))
(defn make-note-on [c p v]
(let [msg (make-array (Byte/TYPE) 3)]
(aset-byte msg 0 (bit-or 0x90 c))
(aset-byte msg 1 p)
(aset-byte msg 2 v)
msg))
(defn make-note-off [c p]
(let [msg (make-array (Byte/TYPE) 3)]
(aset-byte msg 0 (bit-or 0x90 c))
(aset-byte msg 1 p)
(aset-byte msg 2 0)
msg))
(defn play [p d v]
(.sendMidi out (make-note-on 1 p v))
(Thread/sleep (* d 1000))
(.sendMidi out (make-note-off 1 p)))
(doseq p [60 64 67 72] (play p 0.5 64)) ; CMaj arpeggio
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment