一个适合播放声音的clojure友好库

时间:2010-01-19 20:14:39

标签: clojure audio

我正在寻找一个易于编程的库,用于从clojure函数中不经常播放声音(通知等)。

编辑:像这样

(use 'my.sound.lib') 
(play-file "filename")
(beep-loudly)
(bark-like-a-dog)
...

2 个答案:

答案 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年以来,至少出现了三个用于音频播放,操作,可视化和保存的库。

CLJ-音频

基于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

Dynne

简单易用的选择。有很多依赖。

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综合引擎的高级选项。我想只是播放通知会有点过分,但为了完整起见,我在这里提到它。

更多详情:https://github.com/overtone/overtone