TidalCycles触ってみる その3

パターンのバリエーションを作る

d1 $ every 5 (|+| speed "0.5") $ every 4 (0.25 <~) $ every 3 (rev) $
   sound "bd sn arpy*2 cp"
   # speed "[1 1.25 0.75 -1.5]/3"

やばいやばい!これをはやくできるようになりたい!

everyが*回に一回なのに対して
whenmodは条件をつけられる模様。



d1 $ whenmod 8 6 (rev) $ sound "bd*2 arpy*2 cp hh*4"
1-6をノーマル、7,8をrev

マルチパートのパターンを作曲する

パターンを作る

他のパターンから新しいパターンを生成する方法がいくつかある。
append: 直列にパターンを繋げる方法
stack: 並列にパターンを同時に鳴らす方法

直列の方法

fastcat でパターンを繋げることができる。(つなげると、倍速になってるな)
d1 $ fastcat [sound "bd sn:2" # vowel "[a o]/2",
              sound "casio casio:1 casio:2*2"
             ]
cat(または slowcat) オリジナルの再生スピードを維持する。
d1 $ cat [sound "bd sn:2" # vowel "[a o]/2",
          sound "casio casio:1 casio:2*2",
          sound "drum drum:2 drum:3 drum:4*2"
         ]
これだと、繋げた分だけのびてる

randcatだと、ランダムにパターンを繋げるらしい

並列の方法

stackを利用すると、リスト化されたパターンを同時に演奏する。
d1 $ stack [
  sound "bd bd*2",
  sound "hh*2 [sn cp] cp future*4",
  sound (samples "arpy*8" (run 16))
]
stackを使うと、それにエフェクトを全部に対してかけることが可能となる。
d1 $ every 4 (slow 2) $ whenmod 5 3 (# speed "0.75 1.5") $ stack [
  sound "bd bd*2",
  sound "hh*2 [sn cp] cp future*4",
  sound (samples "arpy*8" (run 16))
] # speed "[[1 0.8], [1.5 2]*2]/3"

"cut"でサンプルを切り捨てる

ここまで短いサンプルを使って来た。しかしながら、長いサンプルも体験したかもしれない。長いサンプルを利用すると望まない音が出たかもしれない。

Tidalでは"cut"エフェクトを使って、新しいサンプルが再生されると同時にその前のサンプルを止めることが可能となる。

次の例では"arpy"をゆっくり流すとサンプルが重なって聞こえるだろう。
d1 $ sound (samples "arpy*8" (run 8)) # speed "0.25"
cutを使うとサスティーンをとめることができる
d1 $ sound (samples "arpy*8" (run 8)) # speed "0.25" # cut "1"
カットするグループはどんな数でも良い。
カットグループはtidalでグローバル(共通)。なので、二つのDirt接続をしていれっば、二つのグループを設定することができる。
d1 $ sound (samples "arpy*8" (run 8)) # speed "0.25" # cut "1"
d2 $ sound (samples "bass2*6" (run 6)) # speed "0.5" # cut "2"
stackでも利用できる。
d1 $ stack [
   sound (samples "arpy*8" (run 8)) # speed "0.25" # cut "1",
   sound (samples "bass2*6" (run 6)) # speed "0.5" # cut "2" ]

パターンの遷移

遷移

チャンネルのパターンを変化させるのは、ほとんど直ちに行われる。これはあなたの欲しがるものではないかもしれない。特にライブパフォーマンスにおいては

なので、Tidalでは徐々にパターンが変更できるように遷移を選ぶことが可能となっている。

すべてのDirtチャンネルには遷移チャンネルがあり、遷移関数と新しいパターンを受け付けられるようになっている。

そのため、新しいパターンを直接d1に送るのではなく、対応するt1チャンネルに遷移ファンクションを送れば良い。

d1 $ sound (samples "hc*8" (iter 4 $ run 4))
t1 anticipate $ sound (samples "bd(3,8)" (run 3))
ここから変化させるために、t1でパターンを設定し、遷移関数も設定すればよい。
t1 (xfadeIn 16) $ sound "bd(5,8)"
上の例では16サイクル使って、新しいパターンに変更している。
anticipate, xfadeIn以外にも遷移関数がある。繰り返しのパフォーマンスをしなくてよいようにね。

サンプル

サンプル

もし、SuperDirtを使うなら、標準のサンプルはすべてDir-Samplesフォルダにある。
SuperColliderでQuarks.guiを実行し、Dirt-Samples, open folderとクリックすればよい。
もし、クラシックdirtを利用しているなら、samplesサブフォルダーを見てみよう。

QuarksはSuperDirtのパッケージマネージャー
https://qiita.com/moxuse@github/items/df922fba6852ff240719

それぞれのフォルダーは一つ以上のwavファイルが入っている。例えば、bd:1とすれば、bdフォルダの二つ目のwavファイルを選択していることになる。
7つしかないのに9番目を指定したら、wrapして2番目となる。

?あれ、0スタートだと3番目かな...まいっか。

サンプルを追加したかったらフォルダを作成してwavファイルを入れれば良い。

シンセ

シンセ

このセクションをうまく動かすにはSuperCollider sc3-pluginsをインストールする必要がある。gitから最新版をインストールするか、Linuxならパッケージマネージャーから見つければ良い。

SuperDirtはSuperColliderによって作られた素晴らしいシンセサイザーエンジンで、様々な音の可能性を与えてくれる。
サンプルと同じように、TidalCyclesからSuperColliderのシンセを鳴らすことができる。

例えば、
d1 $ midinote "60 62*2" # s "supersaw"
あれ、なぜか音が変わらん....
かわるはずだとしてMIDIノート番号で音が鳴らせるらしい。番号でなくても
d1 $ n "c5 d5*2" # s "supersaw"
n鍵盤の音名でもOK。こっちは音が出た。

https://tidalcycles.org/howtos.html
をみると(こっちも訳さなきゃ...)tidal-midiとかインストール必要か?ま、音名でいけるならそれでいいや。

fとsがフラットとシャープ

d1 $ n "<[a5,cs5,e5,g5]*3 [d5,fs5,g5,c5]>" # s "supersquare" # gain "0.7"
この例はA7,D7のコード進行で、cs5がC#5, fs5がF#5となる。
d2 $ every 4 (rev) $ n "<[g5 df5 e5 a5] [gf5 d5 c5 g5]*3>" # s "supersaw"
これは同じコード進行(A7 D7)だが、アルペジオを上昇・下降とできる。

実験してたら、C5を0として
d1 $ n "0*4 -12*2 12*3" # s "supersaw"
こんなのできるみたい。

って、あ、次にかいてあった。midinoteの60をn使うと0として指定できる。
d1 $ n "0 5" # s "supersaw"
標準のサステインの長さは少し長いので、少し重なってしまう。sustainパラメータを使ってサステインをいじれる。
d1 $ n "c5 d5*2" # s "supersaw" # sustain "0.4 0.2"
SuperDirt/libraryのdefault-synths-extra.scdでいくつものシンセを見つけることができる。または、SuperDirt/synthsフォルダのdefault-synths.scdとtutorial-synths.scdでも見つけられる。

何が入っているかというと
  • チュートリアル
  • カーソルや音声入力によるモジュレーション例
  • 物理モデリングシンセ
  • 標準的なシンセドラムキット
  • 四つのアナログシンセ
  • 二つのデジタルシンセ
SuperDirtフォルダーを見つけるにはQuark.folderを実行すればよい。

多くのシンセはTidalのパラメータを受け付けるか、少し解釈して受け付ける。
完全なドキュメントはdefault-synths.scdを参照のこと。

少し、例をあげると

d1 $ jux (# accelerate "-0.1") $ s "supermandolin*8" # midinote "[80!6 78]/8"
  # sustain "1 0.25 2 1"
d1 $ midinote (slow 2 $ (run 8) * 7 + 50) # s "supergong" # decay "[1 0.2]/4"
  # voice "[0.5 0]/8" # sustain (slow 16 $ scale 5 0.5 $ saw1)
d1 $ sound "superhat:0*8" # sustain "0.125!6 1.2" # accelerate "[0.5 -0.5]/4"
d1 $ s "super808 supersnare" # n (irand 5)
  # voice "0.2" # decay "[2 0.5]/4" # accelerate "-0.1" # sustain "0.5" # speed "[0.5 2]/4"
d1 $ n (slow 8 "[[c5 e5 g5 c6]*4 [b4 e5 g5 b5]*4]") # s "superpiano"
  # velocity "[1.20 0.9 0.8 1]"
d1 $ n (slow 8 $ "[[c4,e4,g4,c5]*4 [e4,g4,b5,e5]*4]" + "<12 7>") # s "superpiano"
  # velocity (slow 8 $ scale 0.8 1.1 sine1) # sustain "8"
d1 $ n "[c2 e3 g4 c5 c4 c3]/3" # s "[superpwm supersaw supersquare]/24" # sustain "0.5"
  # voice "0.9" # semitone "7.9" # resonance "0.3" # lfo "3" # pitch1 "0.5" # speed "0.25 1"
d1 $ every 16 (density 24 . (|+| midinote "24") . (# sustain "0.3") . (# attack "0.05"))
  $ s "supercomparator/4" # midinote ((irand 24) + 24)
  # sustain "8" # attack "0.5" # hold "4" # release "4"
  # voice "0.5" # resonance "0.9" # lfo "1" # speed "30" # pitch1 "4"
d1 $ n "[c2 e3 g4 c5 c4 c3]*4/3" # s "superchip" # sustain "0.1"
  # pitch2 "[1.2 1.5 2 3]" # pitch3 "[1.44 2.25 4 9]"
  # voice (slow 4 "0 0.25 0.5 0.75") # slide "[0 0.1]/8" # speed "-4"
d2 $ every 4 (echo (negate 3/32)) $ n "c5*4" # s "supernoise"
  # accelerate "-2" # speed "1" # sustain "0.1 ! ! 1" # voice "0.0"
d1 $ s "supernoise/8" # midinote ((irand 10) + 30) # sustain "8"
 # accelerate "0.5" # voice "0.5" # pitch1 "0.15" # slide "-0.5" # resonance "0.7"
 # attack "1" # release "20" # room "0.9" # size "0.9" # orbit "1"

これらは最近の機能で、開発中であるが、github リポジトリにてどうやって、改変したり機能を付け加えたりすればいいか知ることができる。




コメント

人気の投稿