TidalCycles で遊ぶ 1

TidalCycles メモ <導入編> でこれ以上超不親切でニッチになれるかってくらい最悪な導入方法を紹介しました。なので、導入を考えている方は、正直別の方法なり自分で見つけて入れた方が精神衛生上いいと思います。公式でも述べているとおり、素直に Atom を使ってやってみるのが一番早いと思う。

さて、ただ、暇つぶしにいろんな音を流しありふれる感性のまま、のもいいのですが、もうちょっと形式的に進めたい。仮説と検証を繰り返して、高尚なふりしてクセナキスみたいな事したい。全然いいと思わないけど。

という事で、最低限、sine 波から初めて、そこから音楽理論まがいな事を独自に探索して行こうと思う。まず、440Hz の波を再生したい。TidalCycles (以下 TC) からそのままできるものかもしれない?(出なければ Super Dirt?、間違いなく Super Collider(以下 SC) ではできるんだろうけど) ドキュメントをみるとが億劫なので、作っちゃう。ここで音の長さが疑問になるが、とりあえず 120 bpm で四つ打ちを想定して、それすなわち 500ms.

無料の Audacity を落としてきて、 new project して、 new stereo track 足して、 Generate > Tone > 440Hz500ms する。それを wav 形式で Export 。それさえもめんどくさい場合は下記。

これで、SC 起動して、 File > Open user support directory その中の downloaded-quarks の中の Dirt Samples の中に適当にディレクトリを作り(僕は exp とした。)、できたさっきの 440.wav ファイルをいれる。SC 再起動して、やっと TC から流せます。

この流れで、何も純粋な波でなくても、自分の屁の音など色々サンプリングした音を入れておけば、使えます。

setcps (120/60/4)

-- 440Hz (A)
d1 $ sound "exp"

1,2,3,4ってリズムをとってみるとちゃんと、1の間だけ音がなります。

十二平均律ではそれぞれの周波数の比率は \(1 : \sqrt[1/12]2\) なので、Bがほしければ全音なので、2つぶん。 let は haskell でグローバル変数の定義らしく、普通のプログラムでは出てこないらしいが、REPL 環境なので使います。

let s = 2 ** (2 / 12)

-- B
d1 $ sound "exp" # speed s

これで、ピッチが変えれるようになった。(speed を操作しているので、数字を上げていけばどんどん短くなってしまいます。)

逆に低くしたければ、

-- 0.5
let s = (1 / 2) ** (12 / 12)

で回りくどいけど、1オクターブ下の音でかつ、倍ながい。

12 で割らなくてもいいし、指数をすごい低くしたり、高くしたりすると、もうすでにミニマル音楽になります。