CLMを試してみる — #:g1

Posted 2011-03-07 10:47:00 GMT

CLMは音響を色々操作できるパッケージだそうで以前から一度試してみたかったのですが、なんとなく面倒臭さそうだなと思っていて手を付けずにいました。ふと、気まぐれにサイトからソースをダウンロードしてみたところ、中に.asdファイルがあり、想像していたより簡単に導入できそうなので試してみました。
CLMのソースが微妙にCLの作法に則ってない様子でインストールでも妙な躓き方をしますが、とりあえずは導入できたので手順をメモ。
環境は、SBCL 1.0.46、ASDF2、Ubuntu 10.10 64bitです。

ソースを入手

https://ccrma.stanford.edu/software/snd/snd/clm.html
からCLM-4のソースを入手します。
適当なASDFでロードできるところに展開します。

音響系ライブラリの準備

ALSAを使うので開発ライブラリをインストールしておきます。
$ sudo apt-get install libasound2-dev
また、シェルの実行にcshが使われるのでcshもインストールしておく必要があるかもしれません。自分はソースの方を書き換えました。

ロード

どうやら現状ではライブラリをロードした環境(パッケージ)に色々撒き散らすようなので専用のパッケージを作成して、その中に読み込みます。
(defpackage :clm-user
  (:use :cl))

(in-package :clm-user)

;; ソースのディレクトリを指定 (setq clm-directory ".../clm-4/")

(asdf:load-system :clm)

という感じでロードされます。
色々こけたりするかもしれませんが、適当に手で直したりします。

音を鳴らしてみる

〜.insファイルというのが音源が定義されたもののようで、サンプルとしてヴァイオリンが付いてくるのでマニュアルの通りコンパイルしてみます。
(compile-file ".../clm-4/v.ins")
(load ".../clm-4/v.fasl")

適当にいじってみる

使い方は良く分かりませんが、ランダムに音を鳴らす位のことはすぐできました。
WITH-SOUNDマクロで囲んでやると式を評価して音声ファイルを書き出し、音を鳴らしてくれるようです。
;; R2D2的なもの
(with-sound ()
  (dotimes (start 400)
    (let ((r (expt (expt 2 1/12) (random 48))))
      (fm-violin (* start 1/8)
                 1/4
                 (* 110 r)
                 1/10)
      (fm-violin (/ start 8)
                 1/8
                 (* 110
                    (aref #(11/2 13/4 3/4 9/4) (random 4))
                    r)
                 1/10)
      (fm-violin (+ (/ start 8) 1/16)
                 1/8
                 (* 110
                    (aref #(2 3/2 5/2 7/4) (random 4))
                    r)
                 1/10))))
;; マザーコンピュータ的なもの
(with-sound ()
  (dotimes (start 400)
    (let ((r (expt (expt 2 1/12) (random 48))))
      (fm-violin (/ start 8)
                 1/8
                 (* 220 r)
                 1/10)
      ;;
      (fm-violin (+ (* start 1/8) 1/32)
                 1/32
                 (* 440 r)
                 1/10)
      ;;
      (fm-violin (/ start 8)
                 1/8
                 (* 110 (elt #(11/4 3/2 3/4 9/4) (random 4)) r)
                 1/10)
      ;;
      (fm-violin (+ (/ start 8) 1/16)
                 1/8
                 (* 110 (elt #(2 3/2 5/2 7/4) (random 4)) r)
                 1/10)
      ;;
      (fm-violin (/ start 8)
                 1/8
                 (/ 880 r)
                 1/10))))
7平均律や、19平均律など簡単に試してみることができそうです。

その他、CLM情報

Luke Gorrie氏がECLM 2005でSLIMEのデモでCLMを取り上げたことがあったようでいくつか関連の記事/資料をみつけました。
-(http://bc.tech.coop/blog/050501.html)
-ECLM 2005

まとめ

SchemeのImpromptuのようにリアルタイムで操作できるものなのかは、調べ切れていないので分からないのですが、自動作曲的なことに使ったり自分用のソルフェージュのプログラムを書いて音感の訓練をしてみたりは手軽にできそうです。

comments powered by Disqus