yoppa.org


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

Strudel入門 – 最初の音

スライド資料

Strudelで音を鳴らす

今回からいよいよStrudelの使い方を学んでいきます。まず始めに、Strudelで音を鳴らす方法を学びましょう。Strudelでは公式のチュートリアルが用意されていて、そこに従って進めていくと、簡単に音を鳴らすことができます。本日はそのチュートリアルを一緒に進めていきましょう。

参考映像

ドラムマシン (リズムマシン) について。

16 Legendary Beats – A short history of the 808 | Drum Patterns Explained
A short history of the 909 in 16 songs from TECHNO and HOUSE to POP | Drum Patterns Explained
Jeff Mills Exhibitionist 2 Mix 3

この動画で紹介されているTR-808を使用した曲のプレイリストをSpotifyで作成してみました!

最初のサウンド

コードフィールド

このワークショップは、インタラクティブなコードフィールドで構成されています。まず、その使い方を学びましょう。以下がその例です。

sound("casio")
  1. 上のテキストフィールドをクリックします
  2. ctrl+enter を押して、音を再生します
  3. casiometal に変更します
  4. ctrl+enter を押して、変更を反映します
  5. ctrl+. を押して、演奏を停止します

おめでとうございます。これでライブコーディングの準備が整いました。

サウンド

先ほどは sound を使って、このように音を再生しました。

sound("casio")

casio は、標準で用意されているサウンドの一つです。

他のサウンドも試してみましょう。

insect wind jazz metal east crow casio space numbers

サウンドの読み込みに、少し時間がかかる場合があります。

: を使ってサンプル番号を変更する

一つのサウンド名には、複数のサンプル(オーディオファイル)が含まれている場合があります。

サウンド名の後に : と数字を追加すると、サンプルを選択できます。

sound("casio:1")

いろいろなサウンドとサンプル番号の組み合わせを試してみましょう。

数字を追加しない場合は :0 を指定したのと同じです。

これで、さまざまなサウンドを使い分ける方法を学びました。
ここでは、あらかじめ用意された少数のサウンドのみを使用しますが、後ほど独自のサウンドを読み込む方法も学びます。

ドラムサウンド

Strudelには、デフォルトで豊富なドラムサウンドが用意されています。

sound("bd hh sd oh")

これらの文字は、ドラムセットの各パートを表します。

  – bd = bass drum
  – sd = snare drum
  – rim = rimshot
  – hh = hihat
  – oh = open hihat
  – lt = low tom
  – mt = middle tom
  – ht = high tom
  – rd = ride cymbal
  – cr = crash cymbal

さまざまなドラムサウンドを試してみましょう。

bank を使うと、ドラムの音色(ドラムマシン)を変更できます。

sound("bd hh sd oh").bank("RolandTR909")

この例では RolandTR909 が使用しているドラムマシンの名前です。
これはハウスやテクノのビートで有名な、歴史的なドラムマシンです。

RolandTR909 を以下のいずれかに変更してみてください。

  – AkaiLinn
  – RhythmAce
  – RolandTR808
  – RolandTR707
  – ViscoSpaceDrum

ドラムマシンは他にもたくさんありますが、ここでは話をシンプルに進めます。

  • Pro-Tip: 名前をダブルクリックで選択し、コピー&ペーストしましょう。

シーケンス

前の例で見たように、スペースで区切ると複数のサウンドを順番に再生(シーケンス再生)できます。

sound("bd hh sd hh")

現在再生中のサウンドは、コード内でハイライト表示されます。また、画面下部にも視覚的に表示される点に注目してください。

シーケンスにさらにサウンドを追加してみましょう。

シーケンスが長いほど、再生速度は速くなります

sound("bd bd hh bd rim bd hh bd")

シーケンスは、サイクルという単位の中に収まるように再生されます。1サイクルの長さは、デフォルトで2秒です。

< .. > で囲み、サイクルに合わせる

先ほどと同じシーケンスですが、今回は < .. > (山括弧)で囲まれています。

sound("<bd bd hh bd rim bd hh bd>")

こうすると、シーケンス全体が1サイクルに収まるように再生されます。この括弧を使う利点は、シーケンス内の音を追加したり削除したりしても、テンポが変わらない点です。

このままでは非常に遅いですが、次のようにして速く再生できます。

sound("<bd bd hh bd rim bd hh bd>*8")

この *8 は、全体の再生速度を8倍にすることを意味します。

待ってください。これは < … > を付けずに *8 を指定した場合と同じではないでしょうか。なぜ、わざわざこのような記法が必要なのでしょう。

その通りです。この記法の重要な点は、シーケンス内の音を追加・削除してもテンポが一定に保たれることです。ぜひ試してみてください。

最後の数字を変更して、テンポを変えてみましょう。

setcpm でテンポを変更する

setcpm(90/4)
sound("<bd hh rim hh>*8")

cpm = cycles per minute(1分あたりのサイクル数)

デフォルトのテンポは毎分30サイクル(30cpm)です。これは1サイクルが2秒であることを意味し、一般的なBPM表記では 120/4 に相当します。

西洋音楽の用語に詳しい方向けに説明すると、上記の例はBPM90の4/4拍子における8分音符のシーケンスです。しかし、これらの専門用語を知らなくてもStrudelで音楽は作れますので、ご安心ください。

または ~ でシーケンスに休符を追加する

sound("bd hh - rim - bd hh rim")

[角括弧] でサブシーケンスを作成する

sound("bd [hh hh] sd [hh bd] bd - [hh sd] cp")

角括弧の中に、さらにサウンドを追加してみましょう。

全体のシーケンスと同様に、サブシーケンスもその中の音符が均等に分割されて再生されます。

乗算 (*): 速度を上げる

sound("bd hh*2 rim hh*3 bd [- hh*2] rim hh*2")

乗算 (*): サブシーケンスを速くする

sound("bd [hh rim]*2 bd [hh rim]*1.5")

乗算 (*): さらに速くする

sound("bd hh*32 rim hh*16")

非常に速いリズムは、音の高さ(ピッチ)のように聞こえます。

[[二重角括弧]] でサブ・サブシーケンスを作成する

sound("bd [[rim rim] hh] bd cp")

角括弧は、好きなだけ深く入れ子(ネスト)にできます。

カンマ (,) でシーケンスを並列再生する

sound("hh hh hh, bd casio")

カンマは好きなだけ使えます。

sound("hh hh hh, bd bd, - casio")

カンマはサブシーケンスの中でも使用できます。

sound("hh hh hh, bd [bd,casio]")

上の2つが同じ結果になることに気づきましたか?
同じ音楽的なアイデアを、複数の方法で表現できることはよくあります。

バッククォート(`…`)で複数行を記述する

sound(`bd*2, - cp, 
- - - oh, hh*4,
[- casio]*2`)

サンプル番号をまとめて指定する

これまでのようにサンプル番号を一つずつ指定する代わりに、

sound("jazz:0 jazz:1 [jazz:4 jazz:2] jazz:3*2")

n 関数を使うと、より簡潔で読みやすいコードになります。

n("0 1 [4 2] 3*2").sound("jazz")

まとめ

ここでは、TidalCyclesのリズム言語であるミニノーテーションの基本を学びました。学習した内容は以下の通りです。

コンセプト構文
シーケンススペースsound(“bd bd sd hh”)
サンプル番号:sound(“hh:0 hh:1 hh:2 hh:3”)
休符 または ~sound(“metal – jazz jazz:1”)
サイクル内均等再生<>sound(“<bd hh rim oh bd rim>”)
サブシーケンス[]sound(“bd wind [metal jazz] hh”)
サブ・サブシーケンス[[]]sound(“bd [metal [jazz [sd cp]]]”)
速度アップ*sound(“bd sd*2 cp*3″)
並列再生,sound(“bd*2, hh*2 [hh oh]”)

ミニノーテーションは、通常は何らかの関数と組み合わせて使用します。これまでに登場した関数は以下の通りです。

名前説明
sound指定した名前のサウンドを再生するsound(“bd sd [- bd] sd”)
bankサウンドバンクを選択するsound(“bd sd [- bd] sd”).bank(“RolandTR909”)
setcpmテンポを1分あたりのサイクル数で設定するsetcpm(45);
sound(“bd sd [- bd] sd”)
nサンプル番号のシーケンスを作成するn(“0 1 4 2 0 6 3 2”).sound(“jazz”)

作例

基本的なロックビート

setcpm(100/4)
sound("[bd sd]*2, hh*8").bank("RolandTR505")

クラシックなハウス

sound("bd*4, [- cp]*2, [- hh]*4").bank("RolandTR909")

この2つのパターンは、非常によく似ています。
特定のドラムパターンが、ジャンルを超えて使い回されることはよくあります。

We Will Rock You

setcpm(81/2)
sound("bd*2 cp").bank("RolandTR707")

Yellow Magic Orchestra – Firecracker

setcpm(120/2)
sound("bd sd, - - - hh - hh - -, - perc - perc:1*2")
.bank("RolandCompurhythm1000")

16ステップシーケンサーの再現

setcpm(90/4)
sound(`
[-  -  oh - ] [-  -  -  - ] [-  -  -  - ] [-  -  -  - ],
[hh hh -  - ] [hh -  hh - ] [hh -  hh - ] [hh -  hh - ],
[-  -  -  - ] [cp -  -  - ] [-  -  -  - ] [cp -  -  - ],
[bd -  -  - ] [-  -  -  bd] [-  -  bd - ] [-  -  -  bd]
`)

もう一つの例

setcpm(88/4)
sound(`
[-  -  -  - ] [-  -  -  - ] [-  -  -  - ] [-  -  oh:1 - ],
[hh hh hh hh] [hh hh hh hh] [hh hh hh hh] [hh hh -  - ],
[-  -  -  - ] [cp -  -  - ] [-  -  -  - ] [~  cp -  - ],
[bd bd -  - ] [-  -  bd - ] [bd bd - bd ] [-  -  -  - ]
`).bank("RolandTR808")

一風変わったドラム

setcpm(100/2)
s(`jazz*2, 
insect [crow metal] - -, 
- space:4 - space:1,
- wind`)

これでビート作りの基本は分かりました。次は、メロディー(ノート)の演奏方法を見ていきましょう。

アンケート

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