Clojureでmidiを再生してみた。
Clojureでmidiを再生するブログエントリを見つけたので、やってみました。
javax.sound.のラッパー?、clojure-soundを使います。
参考元はこちら↓
まず、Leiningenでプロジェクトを作成。
lein new clojure-sound
project.cljにclojure-soundを追加
:dependencies [[org.clojure/clojure "1.10.3"]
+ [org.uncomplicate/clojure-sound "0.1.0"]]
nsのrequireにcoreとmidiを追加。
:require で、(2段までだが)ネストして書けるらしい。初めて知ったかも。
(ns clojure-sound.core
+ (:require [uncomplicate.clojure-sound
+ [core :refer :all]
+ [midi :refer :all]]
+ [uncomplicate.commons.core :refer [close!]]
+ [clojure.java.io :as io]))
適当なmidiファイルを用意。プロジェクトフォルダ/resourcesにコピー。
(def gym (sequence (clojure.java.io/resource "gymnopedies.mid")))
=>{:ticks 114240, :id 545108160}
今回は、以下のサイトからジムノペディiを使わせてもらいました。
シーケンサーを作成して、open!でオープン、sequence!でシーケンサーにシーケンス(楽譜)をセット、start!で再生。
(def sqcr (sequencer))
(open! sqcr)
(sequence! sqcr gym)
(start! sqcr)
ジムノペディが流れました!
曲を途中で止めるなら、stop!でシーケンサーを停止。
終了時は、close! でシーケンサーを閉じる。
(stop! sqcr)
(close! sqcr)
マクロの勉強にwith-open みたいなマクロを作ってみるのも良いかも?
ディスカッション
コメント一覧
まだ、コメントがありません