Skip to content

Instantly share code, notes, and snippets.

@mds2
Created February 28, 2015 07:43
Show Gist options
  • Select an option

  • Save mds2/343ff9f1e70a42ea5cfa to your computer and use it in GitHub Desktop.

Select an option

Save mds2/343ff9f1e70a42ea5cfa to your computer and use it in GitHub Desktop.
Slightly more flexible networked event-triggered sound
(ns sound-sample-server (:import
(java.net InetAddress
DatagramPacket
DatagramSocket)))
(use 'overtone.core)
(boot-server)
(defn make-udp-trigger [sound-file port extra-args]
(let [sample-buf (load-sample sound-file)
get-attr (fn [keyword-key default-val] (if (extra-args keyword-key)
(extra-args keyword-key)
default-val))
play-sample (fn []
(sample-player sample-buf
:vol (get-attr :vol 1)
:rate (get-attr :rate 1)
:loop? (get-attr :loop? 0)))]
(.start
(Thread.
(fn []
(let [udp-server (ref nil)]
(do
(dosync (ref-set udp-server (DatagramSocket. port)))
(while true (do
(let [orig-packet (new DatagramPacket
(byte-array 1024) 1024)]
(.receive @udp-server orig-packet)
(play-sample)
(println (new String (.getData orig-packet)
"UTF-8")))))
)))))
sample-buf))
; example (make-udp-trigger "sound_effect.wav" 6666)
; example (make-udp-trigger "fifths_melody.wav" 6668)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment