TidalCycles # |*| |+|などの演算子の解説 パターンの結合

動画

コード

d1 $ sometimesBy "0.2 0.1 0 0.5" ((# coarse "<16 32>").(# bpf 500))
$ jux (iter "2 <1 4>".rev)$ hurry "<0.5 2> 3 1*3 <1 -2>" $ iter "<4 3>"
$ chunk 2 (hurry "4 0.5 -0.9 -4" .
(|*| room "0.8 0.1*10 0.5!3").(# sz "<0.9 0.1 0 0.3>"))
$ s "Kick:1 Hihat:5 Snare:5 Chord:19 Vocal:1 SFX"
# cut "<1 1 1 0>" |+ n "<0 1 2 3>" # speed (range 0.2 0.7 rand)
# pan (rand) # shape 0.5

hush

このコードではTidalCyclesデフォルト音源以外の音源を使用していますので、そのままコピペしても再生できませんのでご注意ください。

#と|+|と|*|の解説 演算子

概要

この解説は、このuserbaseのページを参考に作っています。

#や|+|などは、演算子と呼びます。

演算子を使って、パターンの「構造(structure)」と「値(value)」を結合することができます。

これを理解するにあたり、パターンの構造」と「値」は分けて考える必要があります。

パターンの構造とは、d1 $ sound “bd hh sn hh” を再生すると、1サイクルの中でbd,hh,sn,hhの順番で、合計4回音が出ます。このタイミングのことをパターン構造と呼びます。

値とは、# gain 1.2 の”1.2″や、# speed 2  の”2″の数字のことです。

まず、この2つを区別して考えます。

演算子の種類

演算子は、以下の引用画像のような種類があります。

出典:https://tidalcycles.org/index.php/Combining_pattern_structure

ちなみに、#は、この表の |> と全く同じです。

この表の見方は、以下です。

Function:演算子の機能。「値(value)」をどう計算するか決める。

加算する、除算する、掛け算する、割り算する、あまりを取る、左の値にする、右の値にする、がある。

Both,Left,Right:「構造(structure)」をどちら側から取るか、を決める。Leftは、左側のパターン構造が有効、Rightは、右側のパターン構造が有効、Bothは、両方のパターン構造を合算。

#と|>

まずは、使い慣れている#について説明します。

先程、#は|>と同じと記載しました。

|> (#)は、表を見ると、”Right values”つまり「右の値」を有効にし、「左のパターン構造」を有効にします。

d1 $ s "sine sine" # speed "1"

d1 $ s "sine sine" # speed "1 2 3 4"

例えば1行目について、#は右の「値」つまりspeedの値は「1」となります。

また|>は左のパターン構造が有効なので、”sine sine”のパターン構造が有効になります。

2行目では、# speed “1 2 3 4″のようにパターン構造を指定しても、#はパターン構造を左から取るので、再生されるパターン構造は変わりません。(つまり、”sine sine”というパターン構造で再生される。)

ただ、右の値が有効なので、1回目のsineはspeed 1、2回目のsineはspeed 3で再生されます。

また、以下のように、#を|>に変えても、再生される音は変わりません。

d1 $ s "sine sine" |> speed "1"

d1 $ s "sine sine" |> speed "1 2 3 4"

>| 右のパターン構造を有効にする

では、 |> を >| に変えるとどうなるでしょうか。

|> は左側のパターン構造が有効ですが、>|は右側のパターン構造が有効になります。

以下の例を実行してみてください。

d1 $ s "sine sine" >| speed "1"

d1 $ s "sine sine" >| speed "1 2 3 4"

1行目はsineが1サイクルに1回だけ再生、2行目はsineが4回再生されます。

つまり、”sine sine”という左側のパターン構造ではなく、”1″や”1 2 3 4″という右側のパターン構造が有効になった、ということです。

このように演算子を活用して構造と値を変えることができるので、以下のように、sやsound以外でパターン構造を組むことが可能になります。

例
d1 $ s "sine" >| speed "1 2*5 <3 5*4> 4*2"

パターン構造の合算(Both)

では、|>でも>|でもなく、|>|とするとどうなるでしょうか。

この場合、左右のパターン構造を合算したパターン構造になります。

例えば以下のコードを再生します。

d1 $ s "sine sine" |>| speed "1 2 3"

右の値をとりつつ、左右の構造を合算した構造になるので、最終的に以下のような構造になります。

    |  1  |  1  |   --Left structure "sine sine"
|>| | 1 | 2 | 3 |   --Right structure "1 2 3"
=   | 1 |2|2| 3 |   --Both structure

結果的に再生される音は、以下と同じになりますね。

d1 $ s "sine [sine sine] sine" # speed "1 [2 2] 3"

|+| 加算

では、今度は|+| , + , |+ , +|について見てみます。

これらの演算子は、「値」を加算、つまり足し算します。

もちろん、先程のように|+や+|や|+|と記載することで、パターン構造も指定できます。

以下のコードを考えてみます。

d1 $ s "sine" |+| speed "1 2" |+| speed "2"

|+|は、表より、値の加算を表しますので、以下のようになります。

d1 $ s "sine" |+| speed "1 2" |+| speed "2"

    |  1  |  2  | 
|+| |     2     | 
=   |  3  |  4  |  -- Both structure

同様に、|+は、以下になります。

d1 $ s "sine" |+| speed "1 2" |+ speed "2"

    |  1  |  2  | 
|+  |     2     | 
=   |  3  |  4  |   --Left structure

同様に、+|は以下になります。

d1 $ s "sine" |+| speed "1 2" +| speed "2"

    |  1  |  2  | 
+|  |     2     | 
=   |     3     |   --Right structure

その他の演算子

他にも、|*|や|/|や|%|がありますが、上記の加算と同じように、*は掛け算、/は割り算、%は割り算の余り、を値に対して計算します。

右側と左側のどちらのパターン構造を有効にするかは、”|” の位置によって決まります。

参考

ここから先の記事は、実際の動作確認してみた記録を残していますので、読み飛ばしても構いません。

初期値

d1 $ s “sn”だけでspeedを特に指定しない場合、speedの初期値は1か0が入っている?と最初は推測していました。

しかし、以下コードの挙動を確認したところ、speedはデフォルトで1や0が入力されているのではなく、|+| speedや|-| speed を定義した時点で入力した値が反映されることがわかりました。

d1 $ s "sn" |+| speed "0 1*2 2 3"

d1 $ s "sn" |-| speed "0 1*2 2 3"

d1 $ s "sn" |*| speed "0 1*2 2 3"

d1 $ s "sine" |/| speed "0 1*2 2 3"

そのため、|+| speed “1”と定義したときに初めてspeedに”1″が反映されるということです。

everyを使った場合

everyなどを使い、soundより前に#を使ったときはどうなるでしょうか。

以下コードを実行してみてください。

d1
$ every 1 (# speed "2")
$ sound "bd hh sn sine"

2のスピードで”bd hh sn sine”のパターンが再生されます。

このとき、#は、「右の値」を有効にし、「左のパターン構造」を有効にします。

右の値、つまりspeed “2”が適用されます。

ただこのとき、左のパターン構造とはなにか、という話になりますが、ここでの左のパターン構造は、”bd hh sn sine”になるようです。

この仕様の詳細はuserbaseの資料からは読み解けませんでしたので、機会があれば追記します。

コメントを残す

CAPTCHA