OvertoneをEmacsで演奏してみる
EmacsでOvertoneの演奏環境構築は以下の記事を参照ください
この記事ではOvertoneのGithub WikiにあるSwingのチュートリアルをEmacs Live上でやってみます。
また、前回の記事で作成したClojureプロジェクトを引き続き使っていきます。
事前準備
Emacs Liveを立ち上げる
$ emacs
演奏内容を記載するファイルを開く
任意のcljファイルに演奏内容を記載していきます
ここではとりあえずsrc/hogehoge/core.clj
に記載します
C-x C-f src/hogehoge/core.clj
REPLを立ち上げ
以下のコマンドでREPLを立ち上げます
M-x cider-jack-in
(前回はホスト名やポート番号を指定していたが、この方法だとREPLの立ち上げからやってくれるらしい)
演奏内容の記述
実際に演奏内容を書き連ねていきます
使用するパッケージを記述
namespaseにOvertoneを使用することを明記します
(ns hogehoge.core (:use [overtone.live]))
ハイハット
ハイハットの音をシミュレートする関数を書いていきます
(definst c-hat [amp 0.8 t 0.04] (let [env (env-gen (perc 0.001 t) 1 1 0 1 FREE) noise (white-noise) sqr (* (env-gen (perc 0.01 0.04)) (pulse 880 0.2)) filt (bpf (+ sqr noise) 9000 0.5)] (* amp env filt))) (definst o-hat [amp 0.8 t 0.5] (let [env (env-gen (perc 0.001 t) 1 1 0 1 FREE) noise (white-noise) sqr (* (env-gen (perc 0.01 0.04)) (pulse 880 0.2)) filt (bpf (+ sqr noise) 9000 0.5)] (* amp env filt)))
(ホワイトノイズでハイハットの音を作っているんですね。 こういう音作りも楽しそう。)
関数を書き終わったらカーソルを末尾に置いて、以下のコマンドでREPLに読み込ませることができます (実際どうなっているのかはよくわからない。とりあえず、あとで記述する関数からこれらを呼び出す場合はやっておかないといけない)
C-x C-e
テンポ
(def metro (metronome 120))
Overtoneライブラリのmetronomeという関数を使ってテンポを表現します
演奏内容
Swingの演奏を表現する関数を記述します
(defn swinger [beat] (at (metro beat) (o-hat)) (at (metro (inc beat)) (c-hat)) (at (metro (+ 1.65 beat)) (c-hat)) (apply-at (metro (+ 2 beat)) #'swinger (+ 2 beat) []))
演奏する
演奏内容を表現した関数を呼び出します
(swinger (metro))
この関数末尾で以下のコマンドを実行するとSwingyな音が流れてきます (その前にこれまで書いてきた関数にも以下のコマンドを実行を忘れずに)
C-x C-e
演奏をやめる
演奏内容を表現する関数などを書き換えるなどいろいろ手段はあるかと思いますが、以下の関数で演奏をやめることができます
(stop)
以上。 ここまででClojureを書いてなんか音楽っぽいものを鳴らせるようになりました。