Tidalcyclesで、よくあるドラムを作りたいときの方法を考えました。方法は他にもたくさんありますが、ヒントになりそうなアイデアを紹介します。
Contents
基本:素直に作る
例1:素直に作る
d1
$ s "bd sn hc [sn bd]"
d1
$ s "[bd bd] [sn hc] [hc bd] [sn hc hc bd]"
d1
$ s "[bd*2,hc*2] [sn:2 hc*<2 3>] [[hc|bd|ht*2] hc] [<sn:2 hc*4> hc:2 hc bd]"
一番基本的な作り方です。作るにあたり、<>や[ ]などの記号の意味を理解したほうが意図通りにパターンを作れます。詳細はTidalcycles userbaseを見てください。ここでは簡単に解説しています。
" " これで囲まれた範囲を「パターン」と呼びます。
[ ] まとまりを作ります
[bd,hc] bdとhcを同時に再生します。
<bd sn> 1サイクル目はbdだけ再生、2サイクル目はsnだけ再生、3サイクル目はbdを再生…と交互に再生します
bd*2 bdを2回再生します
: サンプルを指定します。sn:2 とすると、snフォルダの3番目のwavファイルが再生されます
つまづきがちなポイントは、[bd,hc] と[bd hc]の違いですかね。[bd,hc]は同時再生です。
ここはひたすら慣れるしかないので、いろんなパターンを試してみてください。
stackとユークリッドシーケンスを使う
例2:stackとユークリッドシーケンスを使う
d1
$ stack[
s "sn:2(2,4,1)",
s "hc(16,16)",
s "bd(<5 7>,16)"
]
「stack」「ユークリッドシーケンス」という2つの言葉がでてきました。
stack
stackは、複数のパターンを同時に再生できます。
$ stack[
pattern A,
pattern B,
pattern C
]
この場合、pattern AとBとCが同時に再生されます。patternというのは、sound “bd hc sn hc” とかの” ” で囲った部分のことですね。ポイントは、pattern Cのあとには , (カンマ)をつけないことです。カンマを付けるとエラーになります。
別の記事でも書きましたが、[ ]で囲って、要素を , (カンマ)で区切ることを、「リスト化する」と言っています。stackはリスト化する、とおぼえておくと、後々リスト化が出てきたときに便利です。
stackを使うメリットは、「stackした複数のパターン全体に対してFunctionを適用できる」という点です。全部のパターンにリバーブをかける、といった使い方ができます。
逆に忘れがちなメリットが、stackの中でも、「それぞれのパターンに対して別のFunctionを適用できる」という点です。例は以下です。
d1
$ stack[
fast 2 $ s "bd(3,8)",
s "sn(2,4,1)" # speed 2,
every 4 (# room 0.9) $ s "hc(15,16)"
] # shape 0.5
この例では、bd(3,8)にはfast 2を、sn(2,4,1)には# speed 2を、hc(15,16)にはevery 4 (# room 0.9)を適用しています。さらに、全体に#shape 0.5を適用しています。
このとき、$ が必要な場所がわかりにくいですが、「各パターンの最初の$だけ省略できる」と覚えればよさそうです。
ユークリッドシーケンス
ユークリッドシーケンスとは、噛み砕いて言うと、「数字を2つか3つ指定するだけで複雑なパターンを生成できるアルゴリズム」です。どういうアルゴリズムなのか、はここでは説明しません。(というかできない)
イメージは以下です。
bd(3,8) →「パターンを8等分したうちの3回だけbdが鳴る」
bd(3,8,1) →「パターンを8等分したうちの3回だけbdが鳴る、ただ1つ分後ろにずれる」
じゃあその3回は8等分したうちのどこで鳴るの?と思いますが、ざっくり、8等分の中で偏りなくバランス良く配置される、というイメージがつかめれば十分だと思います。
bd(3,8)は、”bd ~ ~ bd ~ ~ bd ~” となります。”bd ~ bd bd ~ ~ ~ ~”とはなりません。ちなみに、bd(3,8,1)は、”~ bd ~ ~ bd ~ ~ bd” となります。 2021/4/7追記:bd(3,8,1)は、”~ ~ bd ~ ~ bd ~ bd”となります。
ユークリッドシーケンスの何がいいかというと、記述がコンパクトになることです。例えば、bd(3,8)を別の方法で書くと、”bd ~ ~ bd ~ ~ bd ~”と書く必要があり、大変です。
ユークリッドシーケンスを理解するポイントは、以下です。
- bd(x,y,z)とするとき、最初はzは使わないで、bd(x,y)とかから試す 例:bd(3,8)
- yは4か8か16に固定して、xの値を色々試してみる 例:bd(4,8)とかbd(5,8)とかbd(7,8)
さらに、ユークリッドシーケンスの数字部分には、<>や[ , ]が使えるので、さらに複雑なパターンが作れます。
例えば bd(<5 7>,16,[0,2]) みたいに記述できます。
stackを使わずにユークリッドシーケンスを使う
例3:stackを使わずにユークリッドシーケンスを使う
d1
$ s "[bd(3,16,[0,2]),sn:2(2,4,1),hc(15,16,2)]"
さきほど、[ , ]を使うと同時に音が鳴る、と言いましたが、その応用です。1行で記述できるのがメリットです。
この記述だと行数は少なくて済む反面、「hcだけ# gain 1.5にして音量を上げたい」といったことはできません。
sliceを使う
例4:sliceを使う
d1
$ slice 8 "{0 <1 0> 2 3 4 5*2 <6 8> <7 3 ~>}%16" $ s "breaks125" # cut 1
sliceは、ドラムが録音された1小節〜数小節のwavを例えば8分割して、分割したスライスを並び替えることができます。sliceを使うメリットは、以下があります。
- スライス前のドラムのリズムのグルーヴ感が残って面白いリズムになること
- オリジナルサンプルを使うことで個性がでること
- 予測不能なフレーズができること
Hiphopやbreakbeatsでは多用する手法ですし、便利なので私もよく使います。
ポイントは、sliceはドラムループのwavでやるのが基本、という点です。上記例では、Tidalcyclesにデフォルトで入っているbreaks125という1小節のドラムループのwavを使用しています。
例えばsliceで”bd”をスライスしようとしても、”bd”のフォルダには単発のキックのwavしか入っていないので、sliceしてもうまく行かない場合が多いです。
nを使う
例5:nを使う
d1
$ n "0 3 3 1 [4,0] 3 5 1 0 3 3 [2|3|5] [4,0] 3 5 <3 3 3 0>" # s "house"
サンプルの一つのフォルダに複数のドラムサンプル(キック、スネア、ハイハット)を登録して、それをnで指定する方法です。
上記の例では、Tidalcyclesのデフォルト音源の”house”というフォルダのサンプルを使用しています。”house”にはkickやsnareやhihat、シンセなどの音が保存されているので、nで番号を指定するだけで上記のようなドラムパターンを作ることができます。
これをオリジナルのサンプルでやると楽しいです。例えば、drumsというフォルダを作り、その中に00_kick.wav 01_snare.wav 02_hihat.wav といったサンプルを保存すると、nが0のときはkickが再生され、nが1のときはsnareが再生され、nが2のときはhihatが再生されます。
私の場合、ざっくり以下のように1つのフォルダにwavを保存して運用しています。こういうルールを決めておけば、nを使ってパターンを作りたい場合に便利です。
n | 音色 |
0 | bass drum |
1 | snare |
2 | hihat close |
3 | hihat open |
4 | bass drum 2 |
5 | snare 2 or clap |
6 | high tom or perc |
7 | low tom or perc 2 |
8 | clash cymbal |
9 | bass |
drumsというフォルダを作る場所は、以下で確認できます。(mac)
SuperColliderのメニューから、File > Open user support directory > downloaded-quarks > Dirt-Samples
このDirt-samplesというフォルダの中に、bdとかsnといったフォルダがあると思います。ここに、tidalcyclesのデフォルトのサンプルが保管されています。この並びの中に、フォルダを新規作成してください。
fitを使う
例6:fitを使う
d1 $ s (fit 0 ["bd","sn:2","hc"] "{0 ~ 2 2 1 2 2*3 2 0 0 2 ~ 1 2 2 <2 0>}%16")
パターンを変数に入れてみる例
do
let pat1 = "{0 ~ 2 2 1 2 2*3 2 0 0 2 ~ 1 2 2 <2 0>}%16"
d1
$ s (fit 0 ["bd","sn:2","hc"] pat1)
fitを使えば、複数の音色を組み合わせてパターンを作れます。fitのメリットは、数字でパターンを組めるので見やすいという点にあります。音色を差し替えたいときも”bd”の中身だけ変えればいいので簡単です。
また、パターンを変数pat1に入れた例も記載しています。これをすると、pat2,pat3とかも事前に用意しておけば、パターンを簡単に入れ替えることができます。
irandでnをランダムにする
例7:irandでnをランダムにする
d1
$ s "house*16" # n (irand 7)
n でirandを使うと、nが0から6までの中でランダムに選択されるので、ランダムな音色で再生されます。ランダムなので規則正しいドラムにはなりませんが、Tidalcyclesらしいカオスな雰囲気になります。パーカッシブな音を複数登録しておくと面白いです。
chooseでsoundをランダムに選択する
例8:chooseでsoundをランダムに選択する
d1
$ gain"1*16" # s (choose["bd","sn","hc"])
s (choose[ , ])とすることで、soundをランダムに選択されるようにしています。これも「irandでnをランダムにする」と似た感じになります。
まとめ
初心者は、とにかく<>や[ ]や*の意味を理解して使いこなせるようになることをおすすめします。これができるだけでも、十分Tidalcyclesで面白いパターンが作れます。
慣れてきたら他のやり方に挑戦しつつ、オリジナルのサンプルを使用することでクオリティが一気に上がると思います。
個人的に最近ハマっている手法は、「nを使う」と「sliceを使う」です。どちらもオリジナルのサンプルを使用することでかなり楽しめます。