Here's a simple translation of my java production code (tested on OSX/
Vista/XP, java 1.5 & 6)
The gotcha is to forget the line listener and never dispose the
resources.
When I first tried without it, it worked perfectly on OS X but
stacked sound threads upon sound threads on XP.
This very same (java) code has been tested with: .wav. .aiff, .aif.
and .au and works fine :-)
So here's my clojure attempt:
(ns sound-tests
(:import
(javax.sound.sampled AudioInputStream
AudioSystem
Clip
LineEvent
LineListener
LineUnavailableException
UnsupportedAudioFileException)
(javax.sound.sampled.LineEvent.Type)
(java.io IOException)
(java.net URL)))
(defn simple-play
[url]
(let [stream (AudioSystem/getAudioInputStream url)
clip (AudioSystem/getClip)]
(.addLineListener clip
(proxy[LineListener] []
(update [event]
(when (and event
(= (.getType event)
(. javax.sound.sampled.LineEvent$Type
STOP)))
(.close clip)
(.close stream)))))
(try
(.open clip stream)
(.start clip)
(catch Exception e nil))))
(simple-play (URL. "file:///Users/verec/Tools/workspace/BetfairV6_new/
resources/com/mac/verec/betfair/sounds/tinkalink2.wav"))
--
JFB
On Jul 28, 2:00 am, Rayne <[email protected]> wrote:
> I've googled around, and found several ways to do this in Java, but
> I've not been successful in translating the less-complex examples. I'm
> wondering, how would an experienced Clojurian go about doing this in
> Clojure?
>
> All I'm trying to do is play a simple .wav sound file once.
>
> I'll appreciate any examples!
>
> -Anthony
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---