我正在寻找一个易于编程的库,用于从clojure函数中不经常播放声音(通知等)。
编辑:像这样
(use 'my.sound.lib')
(play-file "filename")
(beep-loudly)
(bark-like-a-dog)
...
答案 0 :(得分:8)
好的,现在问题包括API愿望清单......; - )
您可以在JVM上使用JLayer进行MP3播放。在Ubuntu上它被打包为libjlayer-java。在Java here中有一个简单的使用示例。 Clojure包装器:
(defn play-file [filename & opts]
(let [fis (java.io.FileInputStream. filename)
bis (java.io.BufferedInputStream. fis)
player (javazoom.jl.player.Player. bis)]
(if-let [synchronously (first opts)]
(doto player
(.play)
(.close))
(.start (Thread. #(doto player (.play) (.close)))))))
如果您更愿意在当前线程上播放,请使用(play-file "/path/to/file.mp3")
在单独的线程(play-file "/path/to/file.mp3" true)
中播放mp3播放。根据自己的喜好调整。提供你自己的大声嘟嘟声和吠叫狗mp3。 ; - )
对于负载蜂鸣声等,您也可以使用MIDI ...如果您选择尝试,这个blog entry可能会有所帮助。
此外,我原来回答中的链接可能对您的调整仍有帮助:Java Sound Resources: Links。
答案 1 :(得分:1)
自2010年以来,至少出现了三个用于音频播放,操作,可视化和保存的库。
基于Java Sound API构建的通用音频库。具有最少量的依赖项,但该项目看起来很放弃。
project.clj
中的引用(播放MP3文件需要第二个):
[org.clojars.beppu/clj-audio "0.3.0"]
[com.googlecode.soundlibs/mp3spi "1.9.5.4"]
用法示例:
(require '[clj-audio.core :refer :all])
;; Play an MP3 file
(-> (->stream "bell.mp3")
decode
play)
;; Playing synthesized sounds is an experimental feature for the library
更多详情:https://github.com/beppu/clj-audio
简单易用的选择。有很多依赖。
project.clj
中的参考:
[org.craigandera/dynne "0.4.1"]
用法示例:
(require '[dynne.sampled-sound :refer :all])
;; Play an MP3 file
(play (read-sound "bell.mp3"))
;; Play a synthesized sound
(play (sinusoid 1.0 440))
更多详情:https://github.com/candera/dynne
依赖于SuperCollider综合引擎的高级选项。我想只是播放通知会有点过分,但为了完整起见,我在这里提到它。