前橋工科大学 – サウンドプログラミング 2023
Strudel はじめの一歩
スライド資料
アンケート
本日の講義を受講した方は以下のアンケートに回答してください
Strudelについて
Strudelとは
- この講義の前半で使用
- 主にコードによる音楽創作の基礎を学ぶ
- https://strudel.tidalcycles.org/
Strudel (シュトゥルーデル)
- 語源: 薄い生地で具材を包んだパン
- なぜこの名前にしたのかは不明
Strudelの特徴
- ダイナミックな音楽作品を表現力豊かに作成
- TidalCyclesのJavascript版
- しかし、JavaScriptやTidalCyclesの知識は不要
- Strudel REPL (https://strudel.tidalcycles.org/) のサイトにアクセスしてすぐに利用可能
Strudelで何ができる?
- ライブコーディング: リアルタイムでコードを使用して音楽を作成
- アルゴリズム作曲: Tidalの強力なパターン操作の機能を活用して、アルゴリズミックに音楽を作曲
- 教育: 誰でもすぐに利用できるので、音楽とプログラムを同時に学べる!
- 他の音楽制作環境と統合: MIDI、OSCなどを使用して外部の環境と連動できる
コード例
stack( // ドラム s("bd,[~ <sd!3 sd(3,4,2)>],hh*8") .speed(perlin.range(.8, .9)), // ランダムなサンプル速度の変化 // ベースライン "<a1 b1*2 a1(3,8) e2>" .off(1 / 8, x => x.add(12).degradeBy(.5)) // ランダムなオクターブジャンプ .add(perlin.range(0, .5)) // ランダムなピッチの変化 .superimpose(add(.05)) // 2つ目の、わずかにデチューンされた音声を追加 .note() // "note"で囲む .decay(.15).sustain(0) // 各音符を同じ長さにする .s('sawtooth') // 波形 .gain(.4) // 音量を下げる .cutoff(sine.slow(7).range(300, 5000)), // カットオフを自動化 // コード "<Am7!3 <Em7 E7b13 Em7 Ebm7b5>>".voicings('lefthand') .superimpose(x => x.add(.04)) // 2つ目の、わずかにデチューンされた音声を追加 .add(perlin.range(0, .5)) // ランダムなピッチの変化 .note() // "note"で囲む .s('sawtooth') // 波形 .gain(.16) // 音量を下げる .cutoff(500) // 固定カットオフ .attack(1) // ゆっくりフェードイン ).slow(3 / 2)
- さらに詳しく: Strudel REPLにアクセスし、シャッフルを押してランダムにサンプルを聞いてみる
サウンド機能入門
はじめの一歩
- 以下のコードを入力
sound("casio")
- 音の操作
- テキストフィールドをクリック
- ctrl+enterを押して再生
- casioからmetalに変更してみる
- ctrl+enterで更新
- ctrl+.で停止
- 他のサウンドも試してみる!
- 例: insect wind jazz metal east crow casio space numbers
サンプル番号をコロン (:) で指定
sound("casio:1")
- 指定したサウンド(この例だとcasio)の種類を変更
- 何も指定しない場合は :0 と同じ
ドラムサウンド
ドラムサウンド基本
sound("bd hh sd oh")
- 始めから様々なドラムセットの音が入っている
- 2つの文字はドラムセットの様々なパートを省略している
- bd = bass drum (バスドラム)
- sd = snare drum (スネアドラム)
- rim = rimshot (リムショット)
- hh = hihat (ハイハット)
- oh = open hihat (オープンハイハット)
- 文字を書き換えて様々なドラムパターンを作ってみよう!
- 実際に音を聞きながら
応用: ドラムセットを切り替える
sound("bd hh sd oh").bank("RolandTR909")
- .bank() を使用してドラムセットごと切り替えられる
- その他にも以下のようなドラムマシンがあるので試してみよう!
- AkaiLinn
- RhythmAce
- RolandTR808
- RolandTR707
- ViscoSpaceDrum
- コピペすると楽!
シーケンス
- シーケンス: 反復進行 (はんぷくしんこう sequence)
- 同じ音のまとまりを何度も繰り返すこと
- Strudelでは様々な方法でシーケンスを組み立てられる
シーケンス基本
sound("bd hh sd hh")
- これまでやってきた基本
- スペースで区切ることでシーケンス内で複数のサウンドを再生できる
沢山の音を鳴らす
sound("bd bd hh bd rim bd hh bd")
- シーケンスが長い(たくさんの音がある)ほど速くなる
- シーケンスの中身が1サイクルに押し込められるため
テンポを変更する
sound("bd bd hh bd rim bd hh bd").cpm(40)
- 1つの方法は cpm() を使用する方法
- cpm
- cycle per minutes
- 1分あたり何サイクルするか、という単位
- その他にも方法があるがまた後述
休符
sound("bd hh ~ rim")
- ~ は休符(音を出さないパート)をあらわす
サブシーケンス
sound("bd [hh hh] sd [hh bd]")
- [] で囲うとサブシーケンスが作成される
- シーケンスの1要素の中をさらに分割するイメージ
かけ算 – スピードアップ
sound("bd hh*2 rim hh*3")
- 「* (かけ算)」記号はそのシーケンス内で分割してくりかえす
- スピードアップ(カットアップ?)
シーケンスのスピードアップ
sound("bd [hh rim]*2")
- サブシーケンスのかけ算も可能
高速かけ算
sound("bd hh*16 rim hh*8")
- かけ算の数を大きくすると分割が細かくなる
- 徐々に一定の音程に聞こえてくる
サブ・サブシーケンス
sound("bd [[rim rim] hh]")
- [] を入れ子構造にすることで、サブシーケスのサブシーケンスをつくる
パラレルに演奏
sound("hh hh hh, bd casio")
- コンマ(,)で区切って2つのシーケンスを記述する
- パラレルに2つのシーケンスが演奏される
sound("hh hh hh, bd bd, ~ casio")
- いくつでも増やせる
sound("hh hh hh, bd [bd,casio]")
- サブシーケンスの中をパラレルに演奏
サンプル番号でシーケンス
n("0 1 [4 2] 3*2").sound("jazz")
- このコードは以下のコードと同じ
sound("jazz:0 jazz:1 [jazz:4 jazz:2] jazz:3*2")