前橋工科大学 – サウンドプログラミング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