ファンクション/関数(Function)の使い方

ファンクションの使い方は、利用したいリズムパターンに、関数名と引数(必要な場合)を入れ、リズムに変化を加えます。基本的に$の後に関数名、引数とコードを記載します。$は( )括弧の省略形なので、$の代わりに( )括弧で囲んでも同様に利用できます。$の利点は、( )括弧のように関数を閉じる必要がなく、ライブコーディングの際に、括弧の閉じ忘れなどのミスがなくなるので便利です。

ーーーーー
Index/目次
● Concatenation/連結
catfastcatrun
● Accumulation/累積
overlay<>stack
iteriter’
● Alteration/変化
stripe
● Conditions/条件
everywhenmod
sometimes (sometimes family)sometimesBy
someCyclessomeCyclesBy
struct
● TIME/時間
fastfastGap
off
revjux
● Sampling/サンプリング
chop
● Randomness/ランダム
randirandperlin

ーーーーー

● Concatenation/連結

cat

< Description >
cat は、サイクルパターンを連結し、リスト化します。ひとまとまりになることで、それらの複数のパターンに一括でエフェクトやその他ファンクションを適用する事がきます。
使用には、[ ]で囲み、パターンを連結の際、, カンマを忘れないようにしてください。また 最後のsoundの後 , カンマは必要なく、入れるとエラーになるので注意してください。
また、catはこの後記載している fastcat と合わせて slowcat とも呼ばれます。

< Examples >

d1
  $ whenmod 4 3 (rev)
  $ cat [ 
  sound "kick:2*4", 
  sound "bd hh*3"
  ]
  # room "0.3" # size "0.7"
  # speed "2 1 [2 3]"

この例では、cat2つのsoundパターンを繋げて、ひとまとまりにし、whenmod(ファンクション)やroom、speed(エフェクト)などのを一括で適用させています。

▲目次に戻る

fastcat

< Description >
fastcat は、上記のcatと同じように動作しますが、すべてのパターンを1つのサイクル内に入れ込みます。

< Examples >

d1
  $ whenmod 4 3 (rev)
  $ fastcat [ 
  sound "kick:2*4", 
  sound "bd hh*3"
  ]
  # room "0.3" # size "0.7"
  # speed "2 1 [2 3]"

この例では、fastcat で2つのsoundパターンを繋げて1サイクル内に圧縮、ひとまとまりにし、whenmod(ファンクション)やroom、speed(エフェクト)などのを一括で適用させています。

▲目次に戻る

run

< Description >
run は、与えられた値(n)の 0〜n-1 までの数値を順番に返します。主にサンプルフォルダ内の音源データを順番に実行するために利用されます。

< Examples >

d1 $ n (run 8) # sound "cpu"

1サイクル内で、cpuフォルダの 0〜n-1 までを順番に実行します。

▲目次に戻る

ーーーーー
● Accumulation/累積

【 Superposition/重ね合わせ 】

overlay

< Description >
overlay
は、2つのパターンを組み合わせ、重ねます。
使用には $ overlay ” ” ” “ 、または (overlay ” ” ” “) と括弧で囲みます。

< Examples >

d1 $ sound (overlay "kick*2 sn:2" "cp*4")

上記例は、overlay で “kick2 sn:2”“cp4” の2つを重ね合わせています。
下記のコードと同様のリズムです。

d1 $ sound "[kick*2 sn:2, cp*4]"

▲目次に戻る

<>

< Description >
<>
は、前述のoverlayと同じ内容を演算子で表記する方法です。

< Examples >

d1 $ sound ("kick*2 sn:2" <> "cp*4")

<> は、いわゆる左右への矢印、両方を適応する意味です。ライブコーディングにてoverlayと記載するよりも簡易表記できます。

▲目次に戻る

stack

< Description >
stack は、複数のパターンをリスト化し、それらを重ねることによって新しいパターンを生成します。分かりやすく言えば、複数のsound” “を重ねて一つのパターンにできます。ひとまとまりになることで、それらの複数のパターンに一括でエフェクトやその他ファンクションを適用する事がきます。
使用には[ ]で囲み、サウンドを重ねる際、, カンマを忘れないようにしてください。また 最後のsoundの後 , カンマは必要なく、入れるとエラーになるので注意してください。

< Examples >

d1
  $ whenmod 4 3 (rev)
  $ stack [ 
  sound "kick:2*4", 
  sound "~ [cp hc] ~ hh", 
  sound "bass" +| n "{2 [2 2] [4 5 7] 2 [4 5 7]}%4"
  ]
  # room "0.3" # size "0.7"
  # speed "2 1 [2 3]"

stack3つのsoundパターンを重ねて、ひとまとまりにし、whenmod(ファンクション)やroom、speed(エフェクト)などのを一括で適用させています。

▲目次に戻る

【 Building iterations/イテレーション 】

iter

< Description >
iter は、関数に与えられた引数でパターンを分割し、1サイクル再生する度にサイクル開始地点を後ろにひとつシフトしながら再生していきます。

< Examples >

d1 $ iter 4 $ sound "kick hh sn cp"

上記の例では “bd hh sn cp” を4分割、下記のように後ろにシフトしながら再生します。

kick hh sn cp
hh sn cp kick
sn cp kick hh
cp kick hh sn

▲目次に戻る

iter’

< Description >
iter’ は、iterと同じように分割シフトしますが、iterとは逆、前ににひとつシフトしながら再生していきます。

< Examples >

d1 $ iter' 4 $ sound "kick hh sn cp"

上記の例では “bd hh sn cp” を4分割、下記のように前にシフトしながら再生します。

kick hh sn cp
cp kick hh sn
sn cp kick hh
hh sn cp kick

▲目次に戻る

ーーーーー
● Alteration/変化

【 Repetitions/繰り返し 】

stripe

< Description >
stripe は、ランダムな速度でパターンを繰り返します。パラメータはパターンに入れるサイクルの数を指定します。stripe 2の場合、1回のパターン内で、ランダムな速度で2回サイクルを回します。各サイクルはランダムな速度で再生されますが、合計時間は同じになります。はじめの1回が0.75なら2回目は0.25となります。

< Examples >

d1 $ stripe 2 $ sound "[kick hc] ~ [sn bd] ~"

d2 $ n "4" # sound "clap"

“[kick hc] ~ [sn bd] ~” がランダムな速度で2回聞こえるのがわかります。d2 の clapを1回入れると分かりやすいです。

▲目次に戻る

ーーーーー
● Conditions/条件

【 Every and the others/every と その他 】

every

< Description >
every は、他の関数を条件付きで適用することができる関数です。everyの後に「関数を適用する頻度」「適用する関数」「適用するパターン」3つを入力します。「適用する関数」はエフェクトも含みます、その場合エフェクト前に # をつけ括弧で囲みます。

< Examples >

d1 $ every 3 rev $ n "0 1 [~ 2] 3" # sound "arpy"

3回に1回 “0 1 [~ 2] 3” が反転します。

d1 $ every 3 (fast 2) $ n "0 1 [~ 2] 3" # sound "arpy"

(fast 2) のように「適用する関数」に引数がある場合は ( ) 括弧をつける必要があります。括弧の代わりに$は利用できません。$を利用してしまうと続く パターンの $ n が続くので every関数は多くのパラメータを渡されたとエラーを返してしまいます。

▲目次に戻る

whenmod

< Description >
whenmodは、everyと同様、条件付き適用する関数ですが、二つのパラメータを利用します。
これは,現在のループ回数を第1パラメータで割った余りが第2パラメータより大きいか等しい場合に,そのパターンに関数を適用するという条件です。「適用する関数」はエフェクトも含みます。

< Examples >

d1 $ whenmod 5 2 (fast 2) $ sound "kick sd [kick hc] sd"

この例では、初めの2回は通常後の3回に fast 2 が適応されます。

▲目次に戻る

【 The “sometimes” family/sometimes のいろいろ 】

sometimes

< Description >
sometimesは、パターン内音源に50%程度の確率で関数をランダムに適用する機能です。sometimesの後に、「適用する関数」「適用するパターン」2つの入力を必要とします。「適用する関数」はエフェクトも含みます、その場合エフェクト前に # をつけ括弧で囲みます。

< Examples >

d1 $ sometimes (# room 0.5) $ sound "kick sd [kick hc] sd"

room エフェクトが50%程度の確率でランダムに適応されます。

< sometimes family >
sometimes と同様に、さまざまな確率でランダム適応させるファンクションファミリーがあります。
いわゆる、sometimes family です。下記に一覧としてまとめています。

・always / 100%
・almostAlways / 90%
・often / 75%
・sometimes / 50%
・rarely / 25%
・almostNever / 10%
・never / 0%

▲目次に戻る

sometimesBy

< Description >
sometimesBy は、先ほどのsometimes familyの確率を数値で指定する事ができます。

< Examples >

d1 $ sometimesBy 0.5 (# room 0.5) $ sound "kick sd [kick hc] sd"

この例は、sometimesの例と同様に50%の確率で roomエフェクトを適応させます。

sometimes famiryを sometimesByに置き換えると下記の通りになります。

・always / sometimesBy 1
・almostAlways / sometimesBy 0.9
・often / sometimesBy 0.75
・sometimes / sometimesBy 0.5
・rarely / sometimesBy 0.25
・almostNever / sometimesBy 0.1
・never / sometimesBy 0

▲目次に戻る

someCycles

< Description >
someCycles は、sometimesと似ていますが、パターン内音源に適用するのではなく、サイクル全体に適用します。

< Examples >

d1 $ someCycles (# room 0.5) $ sound "kick sd [kick hc] sd"

この例では、サイクル全体にroomが適応されるか、されないかということになります。

▲目次に戻る

someCyclesBy

< Description >
someCyclesBy は、sometimesByと同様に数値で指定できます。

< Examples >

d1 $ someCyclesBy 0.25 (# room 0.5) $ sound "kick sd [kick hc] sd"

25%の確率で サイクル全体に room が適応されます。

▲目次に戻る

【 Boolean conditions/ブーリアン条件 】

struct

< Description >
struct は、与えられたパターンにリズミカルな「ブーリアン」構造を配置します。ブーリアンとは真理値の「真 = true」「偽 = false」という2値をとるデータ型で、t または f にて仕様します。

< Examples >

d1 $ struct ("t ~ t*2 ~") $ sound "cp"

d1 $ sound "cp ~ cp*2 ~"

上記の二つは同じリズムになります。また、f を利用すると f は silence なります。

d1 $ struct ("t f t*2 f") $ sound "cp"

休符の代わりに f にて表記します。

▲目次に戻る

ーーーーー
● TIME/時間

fast

< Description >
fast は音の速さを変えるファンクションです。引数に応じた速度で変化します。
下記コードの場合、2は2倍速、0.5は半分の速さ(遅くなる)ます。引数の値が2つ以上の場合は、 ” ” で囲みます。

< Examples >

d1 $ fast 2 $ n "0 2 0 3" # sound "kick"

fast 2 は2倍の速さになり、 “0 2 0 3” が1サイクルに2回流れることになります。

d1 $ fast 0.5 $ n "0 2 [3 5] [4 7]" # sound "cpu"

fast 0.5 は半分の速さになり、 “0 2 0 3” が 1回流れるのに2サイクル必要になります。

d1 $ fast "2 4" $ n "0 2 0 3" # sound "kick"

引数を二つ使用の場合、” ” で引数を囲みます。サイクル前半は2倍速、後半は4倍速となります。下記内容と同様になります。※上記は1サイクルの構造は2、下記は1サイクル構造は4。

d1 $ n "[0 2] [0 3] [0 2 0 3] [0 2 0 3]" # sound "kick"

▲目次に戻る

fastGap

< Description >
fastGap はfastと同様に音の速さを変えるファンクションですが、複数回再生せずサイクルのギャップ(スペース)を残します。

< Examples >

d1 $ fastGap 2 $ n "0 2 0 3" # sound "kick"

前半に2倍速の “0 2 0 3” が流れた後、後ろは休符がはります。下記同様のパターンになります。

d1 $ n "[0 2 0 3] ~" # sound "kick"

▲目次に戻る

【 Shifting time/タイムシフト 】

off

< Description >
off は、関数を適応させたパターンを数値分シフトし、元の音源に重ね合わせます。

< Examples >

d1 $ off 0.25 (# speed 2) $ sound "kick kick"

ファンクションの speed 2 が適応された “kick kick” を 1/4サイクルシフト(0.25)し、元の “kick kick” に重ね合わせています。下記のコードと同じです。

d1 $ stack [ sound "kick kick", sound "~ kick ~ kick" # speed 2]

▲目次に戻る

【 Reversing time/時間を逆転 】

rev

< Description >
rev は、与えられたパターンを反転して返します。

< Examples >

d1 $ rev $ n "0 1 2 3 4 5 6 7" # sound "arpy"

rev がない場合は、 “0 1 2 3 4 5 6 7” ですが、revを適応すると “7 6 5 4 3 2 1 0” と反転します。
よく下記の jux と合わせて jux (rev) のように使われたりします。

▲目次に戻る

jux

< Description >
jux は右側のチャンネルだけにファンクションを適応させます。面白いステレオ効果が生成できます。
先ほどのrevを使用すると右側だけパターンが反転します。(下記例より)

< Examples >

d1 $ jux (rev) $ n "0 1 2 3 4 5 6 7" # sound "arpy"

右側のチャンネルだけ反転します。

d1 $ jux (fast 2) $ n "0 1 2 3 4 5 6 7" # sound "arpy"

右側のチャンネルだけ fast 2 にて2倍の速さになります。

▲目次に戻る

ーーーーー
● Sampling/サンプリング

【 Audio sampling/音声サンプリング 】

chop

< Description >
chop は、サンプル音源を分割します。与えたパラメータでパーツに切り分け再生します。サンプルのパターンをサンプルのパーツのパターンとして再生します。

< Examples >

d1 $ chop 8 $ sound "kick arpy"

上記の例では、kick と arpy がそれぞれ 8分割されて細切れで再生されます。16(8*2)のイベントが発生することになります。

d1 $ chop "<4 8 16>" $ sound "kick"

パラメータをパターン化することもできます。

d1 $ loopAt 8 $ chop 32 $ sound "bev"

loopAt は、サンプルの再生速度を変化させ、指定されたサイクル数(パラメータ)にサンプルが完全に収まるようにします。

上記の例では、分割したパーツが完全に並んでいるため、サンプルが分割されていることがよくわかりません。パラメータを変えるとサイクル数が減るのでスピードが上がります。

また、revを仕様し順番を逆にすると分割したパーツをはっきり聞くことができます、下記。

d1 $ loopAt 8 $ rev $ chop 32 $ sound "bev"

▲目次に戻る

ーーーーー
● Randomness/ランダム

【 Pseudo-randomisation/擬似ランダム 】

rand

< Description >
rand0.0 から 1.0 まで浮動小数点数の(擬似)ランダムパターンを生成するオシレータです。また、1.0以上でも利用でき、例えば、rand + 1 としプラスすると 1.0 から 2.0 までの小数点をランダムで返します。

< Examples >

d1 $ sound "kick*8" # pan (rand)

panの引数が0.0〜1.0にてランダムに返って、kick音が左右のチャンネルの間でランダムに演奏されます。

d1 $ sound "arpy*4" # speed (rand + 0.5)

0.5から1.5の間の数字をランダムで返します。

▲目次に戻る

irand

< Description >
irand は rand と似ていますが、0 から n-1 の間の(擬似)ランダムな整数(integer)を生成するオシレータです。特に、フォルダからランダムにサンプルを選ぶのに使われます。irand の i は integer(整数)の意味です。

< Examples >

d1 $ sound "amencutup*8" # n (irand 8)

▲目次に戻る

【 Perlin noise/パーリンノイズ 】

perlin

< Description >
perlin は1次元のパーリンノイズを生成します。 rand と同様に浮動小数点数をランダムに返しますが、各サイクルごとにランダムな値の間を滑らかに変化します。コンピュータグラフィックでよく利用されるパーリンノイズの事です。また、rand 同様に perlin + 1 としプラスすると 1.0から2.0までの小数点をランダムで返します。

< Examples >

d1 $ sound "kick*16" # speed (perlin + 0.5)

0.5 から 1.5 の間をパーリンノイズで滑らかにランダム数を返しています。

d1 $ sound "bd*16" # pan (fast 4 $ perlin)

d1 $ sound "bd*16" # pan (slow 4 $ perlin)

perlin はサイクルごとに新しいランダムな値を生成します。新しい乱数値を生成する頻度を高くしたり低くしたりしたい場合は、それぞれ fast と slow を使用し調整します。

▲目次に戻る

あとがき

少しづつまとめる予定なので、更新日を確認してください。また、ある程度ファンクションがまとまってきたら記事のトップにファンクションのインデックス一覧を追加表示する予定です。

barbe_generative_library

TidalCycles 参考書籍
[Book] 演奏するプログラミング、ライブコーディングの思想と実践

programing_play_bnn-book-image

初版/ 2018.12.21
ページ数/176ページ
出版社/ビー・エヌ・エヌ新社
言語/日本語

【Amazon.co.jp で購入】

ーーーーー

“Books”では、“barbe_generative_Library”として、
barbe_generative_diary の創作において実際に購入し、読んだ本を紹介します。

ーーーーー