strudel について
Strudelで音楽パターンを作成・調整するスキルです。音楽のアイデアをブラウザーで実行できるパターンにし、コードと共有用の再生 URL を用意します。
主な機能
- 01ドラム、ベース、メロディ、楽曲制作のガイド
- 02ミニノーテーション、レイヤー、リズム技法
- 03エフェクトとパターン変換
- 04ジャンル資料とサンプルテンプレート
- 05Strudel URL のエンコードとデバッグ
活用シーン
- 01ドラムパターンや楽曲全体の作成
- 02変化するアルゴリズム音楽の生成
- 03エフェクトの適用とパターン調整
- 04再生可能な Strudel パターンの共有
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bfollington/ terma --skill strudelインストール後、Claude Code で/strudelを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/patterns/acid-bass.jsambient-pad.jsbreakbeat.jsgenerative-melody.jspolyrhythm.jstechno-drums.jsreferences/genre-styles.mdstrudel-reference.mdscripts/strudel_url.py詳細
Strudel
概要
Strudel は、TidalCycles のパターン言語を JavaScript に移植した、ブラウザー上で動作するライブコーディング環境です。純粋関数型プログラミングを使用して、ドラム、メロディー、シンセサイザー、エフェクトを含む音楽パターンを作成します。パターンは、時間範囲をイベントストリームに変換する不変のクエリー関数です。ミニ記法 DSL、ユークリッドリズム、幅広いオーディオ処理に対応しています。
このスキルを使用する場面
次のような場合にこのスキルを使用します:
- ドラムパターン、メロディー、ベースライン、または楽曲全体を作成するとき
- アルゴリズム音楽や生成音楽を作成するとき
- フィルター、リバーブ、ディレイ、ディストーションなどのエフェクトを適用するとき
- Strudel のコードをデバッグしたり、パターンの動作を説明したりするとき
- 共有可能な URL に Strudel のコードをエンコードするとき
基本的なワークフロー
1. ユーザーの音楽的な意図を理解する
ユーザーがパターンをリクエストした場合は、次の点を確認します:
- ジャンル/スタイル(テクノ、アンビエント、ジャズなど)
- アーティストの参考例(Lorn、Clams Casino、Aphex Twin など)
- テンポ(BPM または毎分サイクル数)
- 必要な要素(ドラムのみ、ドラム+ベース、全体のアレンジ)
- 複雑さのレベル(シンプルなループか、生成的/進化するパターンか)
ジャンルやアーティストに特化した手法については、references/genre-styles.md を参照してください。次の内容が記載されています:
- 一般的なジャンルやアーティストの音響的な特徴
- Strudel での実装パターン
- 各スタイルの具体的なコード例
- 典型的なテンポの範囲、エフェクト、構成要素
2. パターンを書く
Strudel の関数型かつ合成的なアプローチを使ってパターンを構築します:
基本構造:
// Simple drum pattern
s("bd hh sd hh")
// With tempo
s("bd hh sd hh").cpm(120)
// Layered with stack
stack(
s("bd(3,8)"), // Kick drum
s("hh*8"), // Hi-hats
s("~ sd ~ sd") // Snare on backbeat
).cpm(120)
主なパターン:
- 簡潔にリズムを指定するには、ミニ記法(
"bd hh sd")を使用します - 複数のパターンを重ねるには、
stack()を使用します - 毎分サイクル数でテンポを指定するには、
.cpm()を使用します - 興味深い分布を作成するには、ユークリッドリズム
(pulses, steps)を使用します - 変換にはラムダ関数を使用します:
.off(1/8, x => x.add(7))
3. ユーザーに出力を提供する
ユーザーは常にブラウザーでコードを実行したいと考えています。次の両方を提供してください:
- コードそのもの - https://strudel.cc/ にコピーして貼り付けるため
- エンコード済み URL - すぐに再生できるよう、
scripts/strudel_url.pyを使用します
URL をエンコードするタイミング:
- 最初の作成時:ゼロから新しいパターンを作成するときは、必ずエンコード済み URL を提供します
- 反復/調整時:ユーザーからリクエストがない限り、エンコードは省略します
- 最終バージョン:作業が完了したら、エンコードするかどうかを提案します
URL のエンコード:
python3 scripts/strudel_url.py encode 's("bd hh sd hh").cpm(120)'
次のようなクリック可能なリンクが生成されます:
https://strudel.cc/#cygiYmQgaGggc2QgaGgiKS5jcG0oMTIwKQ%3D%3D
ユーザーがすぐに開けるよう、URL をクリック可能なリンクとして提示します。
4. 反復と調整
ユーザーがパターンを試した後、変更をリクエストする場合があります:
- テンポを調整する:
.cpm(130)、.slow(2)、または.fast(2) - エフェクトを追加する:
.room(.5)、.lpf(1000)、.delay(.25) - 変化を加える:
.sometimes(x => x.speed(2))、.every(4, rev) - サウンドを変更する:サンプル名を置き換えるか、シンセサイザーのパラメーターを追加する
コピーして貼り付けられるよう、更新後のコードを提供します。リクエストがない限り、反復中の URL エンコードは省略します。
よく使われるパターンのテンプレート
assets/patterns/ のテンプレートを出発点として使用します:
- techno-drums.js - ユークリッドパターンを使った 4/4 テクノ
- acid-bass.js - フィルタースイープを使った TB-303 スタイルのベースライン
- ambient-pad.js - ゆっくりとしたコード進行の豊かなパッド
- generative-melody.js - スケールとユークリッドリズムを使ったアルゴリズムメロディー
- breakbeat.js - Amen ブレイクのスライスと加工
- polyrhythm.js - 複数の拍子を重ねたパターン
ユーザーから同様のスタイルをリクエストされた場合は、これらを参考にしてください。
構文のクイックリファレンス
ミニ記法:
"a b c"- シーケンス(均等に分配)"<a b c>"- スローキャット(1サイクルに1つ)"[a b]"- サブディビジョン(より速く)"a,b,c"- 並列/和音"a*4"- 速度を上げる(4倍)"a/2"- 速度を落とす(2分の1)"a(3,8)"- ユークリッドリズム(8ステップ中3パルス)"~"- 休符/無音"a?"- 50%の確率
よく使う関数:
s()または.sound()- サンプルの選択note()または.note()- ピッチ(音名またはMIDI番号).scale()- スケールを適用(例:"C:minor")stack()- パターンを重ねる.fast()/.slow()- 速度の制御.rev()- 逆再生.sometimes()- 50%の確率で変換を適用.every(n, fn)- nサイクルごとに変換を適用
エフェクト:
.lpf()- ローパスフィルター(カットオフ周波数).hpf()- ハイパスフィルター.room()- リバーブ(0-1).delay()- ディレイエフェクト(0-1).gain()- 音量.pan()- ステレオ定位(0=左、1=右)
構文の詳細については、以下を含む references/strudel-reference.md を参照してください。
- ミニ記法の完全な構文
- すべてのパターン変換(ユークリッド、時間的、確率的)
- オーディオエフェクトとシンセシスのパラメーター
- シグナル関数(sine、perlin、sawなど)
- パターンのアラインメント戦略
- 実用的な作曲例
必要に応じて、grepでこのファイルを検索してください。
grep -i "euclidean" references/strudel-reference.md
grep -i "filter" references/strudel-reference.md
grep -i "delay" references/strudel-reference.md
よくある問題のデバッグ
パターンが再生されない場合:
- パターンの末尾に適切なオーディオ出力(
.s()、.sound()、または.note())があることを確認してください - サンプルが読み込まれていることを確認してください(デフォルトのサンプルは読み込み不要です)
- 構文を確認してください:括弧、引用符、丸括弧の対応が取れていること
タイミングの問題:
.cpm()またはsetcpm()を使ってテンポを明示的に設定してください.fast()/.slow()の呼び出しが競合していないか確認してください- ユークリッドリズムの(パルス数、ステップ数)が有効な値であることを確認してください
フィルターが動作しない場合:
- カットオフ周波数が有効な範囲(20-20000 Hz)内であることを確認してください
- フィルターエンベロープのパラメーター(
.lpa()、.lpd()、.lps()、.lpr())を確認してください - フィルターエンベロープの深さには
.lpenv()を使用してください
コードが複雑すぎる場合:
- 小さなパターンに分割し、それぞれ個別にテストしてください
- 変数を使用してください:
let drums = s("bd hh") - テスト済みのパターンを重ねてください:
stack(drums, bass, melody)
リソース
scripts/strudel_url.py
Strudel URLをエンコード/デコードするPythonスクリプトです。
エンコード:
python3 scripts/strudel_url.py encode '<strudel-code>'
デコード:
python3 scripts/strudel_url.py decode '<strudel-url>'
クリック可能なリンクを提供できるよう、パターンの作成後または変更後は必ずURLをエンコードしてください。
references/strudel-reference.md
以下を含む包括的な技術リファレンスです。
- ミニ記法の完全な構文
- すべてのパターン操作と変換
- オーディオエフェクトとシンセシス
- シグナルと連続パターン
- 作曲例
- ベストプラクティス
詳細な構文の説明や高度なテクニックが必要な場合は、このファイルを読み込んでください。
references/genre-styles.md
以下を含むジャンルとアーティストのスタイルガイドです。
- ダークアンビエント・ヒップホップ(Lorn、Clams Casino)
- テクノ(一般、ダブテクノ)
- ドラムンベース/ジャングル(ジャングル、リキッドDnB)
- トラップ/ヒップホップ(トラップ、ブームバップ)
- アンビエント/実験音楽(ダークアンビエント、IDM/グリッチ)
- ハウス(ディープハウス、アシッドハウス)
各項目では、音響的な特徴とStrudelでの実装テクニックを紹介します。特定のジャンルやアーティストについて言及された場合は、このファイルを読み込んでください。
必要に応じて、このファイルを検索してください。
grep -i "lorn" references/genre-styles.md
grep -i "techno" references/genre-styles.md
grep -i "ambient" references/genre-styles.md
assets/patterns/
一般的な音楽スタイルのサンプルパターンテンプレートです。出発点としてコピーし、調整してください。
techno-drums.js- エレクトロニックドラムのパターンacid-bass.js- レゾナンスの効いたベースラインambient-pad.js- 雰囲気のあるテクスチャgenerative-melody.js- アルゴリズムによるメロディーbreakbeat.js- サンプルの操作polyrhythm.js- 複雑なリズム構造