mcpField
S
strudel

strudel

github.com/bfollingtonクリエイティブ・メディア52143 回インストール2 日前に更新
リポジトリ

strudel について

Strudelで音楽パターンを作成・調整するスキルです。音楽のアイデアをブラウザーで実行できるパターンにし、コードと共有用の再生 URL を用意します。

主な機能

  1. 01ドラム、ベース、メロディ、楽曲制作のガイド
  2. 02ミニノーテーション、レイヤー、リズム技法
  3. 03エフェクトとパターン変換
  4. 04ジャンル資料とサンプルテンプレート
  5. 05Strudel URL のエンコードとデバッグ

活用シーン

  1. 01ドラムパターンや楽曲全体の作成
  2. 02変化するアルゴリズム音楽の生成
  3. 03エフェクトの適用とパターン調整
  4. 04再生可能な Strudel パターンの共有

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bfollington/terma --skill strudel

インストール後、Claude Code で/strudelを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/patterns/
acid-bass.js
ambient-pad.js
breakbeat.js
generative-melody.js
polyrhythm.js
techno-drums.js
references/
genre-styles.md
strudel-reference.md
scripts/
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. ユーザーに出力を提供する

ユーザーは常にブラウザーでコードを実行したいと考えています。次の両方を提供してください:

  1. コードそのもの - https://strudel.cc/ にコピーして貼り付けるため
  2. エンコード済み 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 - 複雑なリズム構造

コメント