yoppa.org


前橋工科大学 – サウンドプログラミング2024

TidalCycles基本

TidalCyclesのインストールが完了したので、いよいよ今回からTidalCyclesを用いたライブコーディングを始めていきます!

TidalCyclesはHaskellというプログラミング言語のライブラリーです。Haskellは「関数型プログラミング言語」に分類されるプログラミング言語で、これまで習ってきたProcessing (JAVA) やJavaScript、C++などとはその言語のパラダイムが大きく異なります。しかし、TidalCyclesを使用する目的に限定すれば、Haskellの言語自体を詳しく習得する必要はありません。あくまでパターンを生成する関数の使用方法に精通すれば良いのです。

今回は、TidalCyclesでのパターン生成の基本をステップバイステップで解説していきます。

スライド資料

アンケート

本日の講義に出席した方は以下のアンケートに答えてください。

サンプルコード

----------------------------------
--
-- TidalCycles基本
--
----------------------------------


-- シーケンス
d1 $ sound "bd"

-- 同じ種類のサウンドのバリエーション
d1 $ sound "bd"

d1 $ sound "bd:1"

d1 $ sound "bd:2"

d1 $ sound "bd:3"

d1 $ sound "bd:4"

-- 複数のサンプル
d1 $ sound "bd sn"

-- リズムのくりかえし
d1 $ sound "bd sn"

d1 $ sound "hh hh hh hh"

d1 $ sound "arpy"

-- サンプルの数を増やしてみる
d1 $ sound "bd sn"

d1 $ sound "bd sn hh cp mt arpy drum"

d1 $ sound "bd sn hh cp mt arpy drum odx bd arpy bass2 feel future"

-- 休符
d1 $ sound "bd cp ~ hh"

-- 演奏の停止
d1 silence

hush

-- サブシーケンス
d1 $ sound "[bd sn sn] cp"

d1 $ sound "bd [sn sn]"

d1 $ sound "bd [sn sn sn]"

d1 $ sound "bd [sn sn sn sn]"

d1 $ sound "[bd bd] [sn sn sn sn]"

d1 $ sound "[bd bd bd] [sn sn]"

d1 $ sound "[bd bd bd bd] [sn]"

-- サブシーケンスの入れ子
d1 $ sound "[bd bd] [bd [sn [sn sn] sn] sn]"

-- レイヤー化 (同時並行に演奏)
d1 $ sound "[bd bd bd, sn cp sn cp]"

d1 $ sound "[bd bd bd, sn cp sn cp, arpy arpy, odx]"

d1 $ sound 
"[bd bd bd, [sn sn] cp, arpy [arpy [arpy arpy] arpy arpy], odx]"

-- くりかえし
d1 $ sound "bd*2"

-- n回に一度演奏
d1 $ sound "bd/2"

d1 $ sound "[bd sn]*2 cp"

d1 $ sound "[bd sn] cp/2"

d1 $ sound "[[bd sn] cp]*2"

d1 $ sound "[[bd sn] cp]/2"

-- パターンの中のパターン
d1 $ sound "[bd sn sn*3]/2 [bd sn*3 bd*4]/3"

d1 $ sound "[bd [sn sn]*2]/2 [bd [sn bd]/2]*2"

  
-- 反転
d1 $ rev $sound "[bd bd] [bd [sn [sn sn] sn] sn]"

-- 反転: 複雑な例
d1 $ every 4 (rev) $ sound "bd*2 [bd [sn sn*2 sn] sn]"

-- スローダウン
d1 $ slow 4 $ sound "bd*2 [bd [sn sn*2 sn] sn]"

-- スピードアップ
d1 $ density 4 $ sound "bd*2 [bd [sn sn*2 sn] sn]"

-- $ と ()
d1 $sound "bd cp"

d1 (sound "bd cp")

-- 全て同じ構造
d1 $ every 4 (density 4) $ sound "bd*2 [bd [sn sn*2 sn] sn]"

d1 $ every 4 (density 4) (sound "bd*2 [bd [sn sn*2 sn] sn]")

d1 (every 4 (density 4) (sound "bd*2 [bd [sn sn*2 sn] sn]"))

d1 $ sound (every 4 (density 4) "bd*2 [bd [sn sn*2 sn] sn]")

d1 (sound (every 4 (density 4) "bd*2 [bd [sn sn*2 sn] sn]"))

-- エフェクト: 音量
d1 $ sound "bd*4" # gain "0.5"

-- 複数のエフェクト: 音量、ディレイ
d1 $ sound "bd*4" # gain "0.5" # delay "0.5"

-- エフェクトのシーケンス
d1 $ sound "bd*4" # gain "1 0.8 0.5 0.7"

d1 $ sound "bd*4 sn*4" # gain "[[1 0.8]*2 [0.5 0.7]]/2"

d1 $ sound "bd*4" # gain (every 3 (rev) $ "1 0.8 0.5 0.7")

d1 $ gain "1 0.8 0.5 0.7" # sound "bd"

-- サンプルの再生スピード
d1 $ sound "arpy" # speed "1"

d1 $ sound "arpy" # speed "0.5"

d1 $ sound "arpy" # speed "2"

-- 再生スピードのシーケンス
d1 $ sound "arpy*4" # speed "1 0.5 2 1.5"

d1 $ sound "arpy*4" # speed "-1 -0.5 -2 -1.5"

d1 $ sound "arpy*12" # up "0 1 2 3 4 5 6 7 8 9 10 11"

-- アルペジオ
d1 $ sound "arpy*12" # up (run 12)

-- ランダムな音階
d1 $ sound "arpy*12" # up (irand 12)

-- 以上です!!
hush