Clojureで音楽を奏でる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Overtoneで音楽を奏でよう

Overtoneとは、Clojureで音を作って音楽を鳴らすことができるシンセサイザーです。(プログラマブルシンセサイザーというらしい)
SuperColliderというプログラマブルシンセサイザーをClojureでラップしているのが、このOvertoneだそうです。

環境構築方法

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.5
  • Clojure : 1.5.1
  • Leiningen : 2.1.2

Overtoneを使ってみる

まずはleiningenでプロジェクトを作成します。

% lein new music
% cd music

 

次に依存するライブラリをmusic/project.cljに記述しましょう。

(defproject music "0.1.0-SNAPSHOT"
  :description "use overtone"
  :dependencies [[org.clojure/clojure "1.5.1"]
                 [overtone "0.8.1"]])

project.cljを記述したらlein depsで依存ライブラリを取得しておきます。

% lein deps

プロジェクトの設定ができたら、次はreplを起動して内部SuperColliderサーバへ接続します。
overtone.liveをロードすれば、Overtoneへの接続ができます。また、外部でovertoneサーバを起動して接続することもできるみたいです。

% lein repl
user=> (use 'overtone.live)
・
・
--> Connecting to internal SuperCollider server...
--> Connection established

    _____                 __
   / __  /_  _____  _____/ /_____  ____  ___
  / / / / | / / _ \/ ___/ __/ __ \/ __ \/ _ \
 / /_/ /| |/ /  __/ /  / /_/ /_/ / / / /  __/
 \____/ |___/\___/_/   \__/\____/_/ /_/\___/

   Collaborative Programmable Music. v0.8

user=>

Getting Startedに従って進めてみましょう。下記のようにすると220hzの鋸歯状波(きょしじょうは)が鳴ります。
※音がなるので注意
なお、止めるにはkill関数を使用します。

user=> (definst foo [] (saw 220))
#<instrument: foo>
user=> (foo) ;音がなります
#<synth-node[loading]: user/foo 34> ;ここで表示されてる数値をkillすれば止まる
user=> (kill 34) ;これで音が止まる
nil

また、Overtoneではいろいろな楽器の音を出すことができます。ためしに、ピアノの音を出してみましょう。
下記コードを実行すると、ドレミファソラシドがピアノ音でなります。

user=> (use 'overtone.inst.piano)
user=>(map #(do 
         (Thread/sleep 500) 
         (piano %)) (scale :c4 :major)) 

なお、 ここにチートシートがあるので、参考にしてください。

まとめ

今回は、Clojure用プログラマブルシンセサイザーを紹介しました。
この動画を見ると、けっこういろんなことができることがわかります。