SFC – デザインとプログラミング 2024
補講: ライブコーディング入門
今回の補講は番外編として「ライブコーディング (Live Coding)」について紹介していきます。ライブコーディングとは、まるで楽器を演奏するようにコード (プログラム) を用いて音と映像をリアルタイムに生成するライブパフォーマンスの手法です。今回の講義では、まず簡単にライブコーディングの概要と誕生の歴史を紹介します。その後、StrudelというWebブラウザー上で動作するライブコーディング環境を使用して、ライブコーディングを体験します。
スライド資料
サンプルコード
リズム (ドラム)
// 音を出す
$: s("cp")
// 音色を変える
$: s("casio")
// 音色のバリエーション
$: s("casio:1")
// ドラムサウンド
$: s("bd hh sd oh")
// ドラムセットの切り替え
$: s("bd hh sd oh").bank("RolandTR909")
// 沢山の音を1シーケンスに
$: s("bd bd hh bd rim bd hh bd")
// テンポの変更
$: s("bd bd hh bd rim bd hh bd").cpm(40)
// 休符
$: s("bd hh ~ rim")
// サブシーケンス
$: s("bd [hh hh] sd [hh bd]")
// サブサブシーケンス
$: s("bd [[rim rim] hh]")
// かけ算
$: s("bd hh*2 rim hh*3")
// サブシーケンスのかけ算
$: s("bd [hh rim]*2 bd hh*3")
// 超高速かけ算
$: s("bd hh*16 rim hh*8")
// パラレルに演奏
$: s("cp*3, rim*4")
// パラレルに演奏、さらに追加
$: s("cp*3, rim*4, bd*5")
// サブシーケンスのパラレル
$: s("cp*3, rim*4, bd [bd*2, hh*4]")
// 複数のパートを同時に演奏
$: s("bd(3, 8), [~ hh]*4")
.bank("RolandTR909")
$: s("cp(7, 16)").jux(rev)
$: s("piano(9, 16)")
.speed("<2 3 0.5 1>*16")
.delay(0.5).delaytime(0.625)
メロディー (シンセサイザー)
// シンプルにシンセを鳴らしてみる
$: s("supersaw*4").note(60)
// 音階で指定
$: s("supersaw*4").note("c4")
// 半音階、シャープ
$: s("supersaw*4").note("cs4")
// 半音階、フラット
$: s("supersaw*4").note("df4")
// シンセの音色の種類を変えてみる
$: s("supersaw sine square triangle").note(60)
// 音階を弾く
$: s("supersaw*4").note("c d e f")
// ランダムな音階
$: s("supersaw*4").note(irand(12).add(40))
// 短かい持続
$: s("supersaw*4")
note(irand(12).add(40)).legato(0.2)
// 短かい持続と長い持続
$: s("supersaw*4")
.note(irand(12).add(40)).legato("<0.2 1.0>*4")
// メロディーの生成
$: s("supersaw*8")
.legato("<1.2 0.5>*8")
.note("<c4 e4 f4 g4 b4>*8"
// メロディーの生成
$: s("supersaw*8")
.legato("<0.5 1.2>*8")
.note("<c4 e4 f4 g4 b4>*8"
.add("0 -12")
.add("[0, 7, 12]"))
// メロディーの生成2
$: s("supersaw*8")
.note("{40 44 45 47 49 52}%11".add("[0, <5 7>, 12], 24"))
// メロディー + フィルター + エフェクト
$: s("supersaw*8")
.note("{40 44 45 47 49 52}%11".add("[0, <5 7>, 12]"))
.lpf("<400 2000 1200 8000>*8").delay(0.75).delaytime(0.125)
// メロディー + フィルター + エフェクト その2
$: s("supersaw(11, 16)")
.note("{40 47 52}%21"
.add("[0, <5 7 -5>]")
.add("<0 12 -12 24>*4"))
.lpf(sine.segment(32).range(400, 8000)).resonance(12)
.delay(0.75).delaytime(0.125).delayfeedback(0.7)
// メロディー + フィルター + エフェクト + リズム
$: s("supersaw(5, 16, [0, 5, 12])")
.note(
"<c d e f g a>*2"
.add("[0, <12 -12>]")
.add("[0, 7, 12]")
.add("<-12 -12 -12 0>/8")
)
.legato("<0.5 1.7>*2")
.delay(0.75).delaytime(0.625).delayfeedback(0.5)
.lpf(sine.segment(32).range(100, 8000)).resonance(10)
$: s("bd(3, 8), [~ hh]*4")
.bank("RolandTR909")
.gain(1.3)
// メロディー + リズム その2
$: s("supersaw(7, 16, [0])")
.note("<c f g>*8".add("[0, 7] [0, 12]".add("<0 7 -12>*8")))
.legato("0.7 1.5")
.lpf(sine.slow(32).range(1200, 8000)).resonance(10)
.delay(0.2).delaytime((3/8))
.jux(iter(16)).gain(0.7)
$: s("supersaw(11, 16, [3])").note("<c2 f2 g2>, <c1 g1>*4".add("[0, 7, 12]"))
.legato("0.9 0.5")
.lpf(sine.slow(12).range(2000, 4000)).resonance(10)
.delay(0.7).delaytime((5/8)).delayfeedback(0.8)
.gain(1.0)
$: s("hh(9, 16, 3), cp(9, 16, 5)")
.delay(0.7).delaytime((4/8)).delayfeedback(0.8)
$: s("bd(3, 8)").gain(2.0).bank("RolandTR909")
関連リンク
アンケート
今回の補講に参加した方は下記のアンケートに答えてください