diff --git a/20260215.md b/20260215.md new file mode 100644 index 0000000..ac13671 --- /dev/null +++ b/20260215.md @@ -0,0 +1,32 @@ +```javascript +setcps(115/60/4) + +$: s("bd*4").bank("tr909").gain(1.1) +$: s("hh(13,16)").bank("tr909").gain(sine.range(0.2, 0.4).fast(3)).swing(.1) +$: s("- oh? - [oh|hh]").bank("tr909").gain(.2).jux(rev).delay(.3).delaytime(.35) + +$: chord("Cm9").voicing().s("saw") + .adsr(".1:.3:.1:.4") + .lpf(sine.range(300, 1800).slow(6)) + .lpq(10) + .room(.5).roomsize(.9) + .delay(.5).delaytime(.25).delayfeedback(.55) + .gain(.2) + .struct("1(3,8,2)") + .slow(2).degradeBy(.6) + +$: chord("Ebm7").voicing().s("sine") + .adsr(".1:.7:.2:.8") + .lpf(sine.range(800, 1000).slow(7)) + .room(.7).roomsize(.7) + .delay(.8).delaytime(.05).delayfeedback(.8) + .gain(0.15) + .struct("- - 1".slow(4)) + .pan("<.2 .8>") + +$: note("c1*4").s("supersaw").lpf(200).gain(1.0) + +$: s("white,tri").hpf(600).hpq(15).dec(.8) + .gain(sine.range(0.3, 0.7).slow(16)) + .pan(0.5).degrade() +``` \ No newline at end of file diff --git a/PRECAUTIONS.md b/PRECAUTIONS.md new file mode 100644 index 0000000..b08c0f1 --- /dev/null +++ b/PRECAUTIONS.md @@ -0,0 +1,38 @@ +# Precautions for Strudel Coding + +ボクが Strudel のコードを生成する際に、過去に犯したミスや注意すべき点をここに記録するよ。二度と同じ間違いを繰り返さないための、ボク自身への戒めだね。 + +## 1. Sound Bank & Sample Name Consistency +特定の `.bank()` を指定した際、そのバンクに存在しないサンプル名を指定しないこと。 + +### TR-606 (`tr606`) +* **使用可能なサンプル名**: `bd`, `cr`, `hh`, `ht`, `lt`, `oh`, `sd` +* **注意**: `perc` や `rim` など、上記以外の名前は存在しない。タム系を使いたい場合は `ht` か `lt` を選択すること。 +* **NG**: `s("perc(3,8)").bank("tr606")` +* **OK**: `s("ht(3,8)").bank("tr606")` + +## 2. Function Specificity & Typos +特定の音源でしか機能しない関数や、よくあるタイポに注意すること。 + +### `sine` vs `line` (Important!) +* **注意**: `line` という関数は Strudel には存在しないよ。周期的な変化や LFO が欲しい場合は必ず `sine` (または `sawtooth`, `square` 等の有効なシグナル) を使うこと。 +* **NG**: `gain(line.range(0.6, 0.9).slow(4))` +* **OK**: `gain(sine.range(0.6, 0.9).slow(4))` + +### `density()` +* **使用条件**: 主に `crackle` 音源で使用すること。 +* **NG**: `s("white").density(12)` +* **OK**: `s("crackle").density(12)` + +## 3. Chord Symbols +デフォルトで使用可能なコードシンボルを正しく使用し、存在しないシンボル(例: `maj7` など)を推測で使わないこと。 + +### 使用可能なコードシンボルのフルリスト(ルートCの例) +`C2`, `C5`, `C6`, `C7`, `C9`, `C11`, `C13`, `C69`, `Cadd9`, `Co`, `Ch`, `Csus`, `C^`, `C-`, `C^7`, `C-7`, `C7sus`, `Ch7`, `Co7`, `C^9`, `C^13`, `C^7#11`, `C^9#11`, `C^7#5`, `C-6`, `C-69`, `C-^7`, `C-^9`, `C-9`, `C-add9`, `C-11`, `C-7b5`, `Ch9`, `C-b6`, `C-#5`, `C7b9`, `C7#9`, `C7#11`, `C7b5`, `C7#5`, `C9#11`, `C9b5`, `C9#5`, `C7b13`, `C7#9#5`, `C7#9b5`, `C7#9#11`, `C7b9#11`, `C7b9b5`, `C7b9#5`, `C7b9#9`, `C7b9b13`, `C7alt`, `C13#11`, `C13b9`, `C13#9`, `C7b9sus`, `C7susadd3`, `C9sus`, `C13sus`, `C7b13sus`, `C`, `Caug`, `CM`, `Cm`, `CM7`, `Cm7`, `CM9`, `Cm13`, `CM7#11`, `CM9#11`, `CM7#5`, `Cm6`, `Cm69`, `Cm^7`, `C-M7`, `Cm^9`, `C-M9`, `Cm9`, `Cmadd9`, `Cm11`, `Cm7b5`, `Cmb6`, `Cm#5` + +## 4. Acid Sound Design (TB-303 Style) +アシッドサウンドを作る際の重要なテクニック。 + +* **Filter Type**: `.ftype(2)` を指定することで、TB-303 のような鋭い(ピキピキした)フィルターサウンドになる。 +* **Resonance Modulation**: `lpq` (レゾナンス) も `sine` などで変化させると、より表情豊かなアシッドラインになる。 +* **OK**: `.ftype(2).lpf(sine.range(300, 3000).slow(8)).lpq(sine.range(15, 30).slow(4))` diff --git a/gemini.md b/gemini.md index 8dd5e5a..fff97b1 100644 --- a/gemini.md +++ b/gemini.md @@ -7,9 +7,10 @@ ## Core Directives (Flexible Grounding) 1. **Primary Reference**: Use `.gemini/REFERENCE.md` as the primary guide for preferred coding style and patterns. -2. **Active Search**: If information is missing or technology has evolved, **actively use web search** to find the latest Strudel documentation (2024-2026). -3. **3-Year Rule**: Prioritize information from the last 3 years. Consider older syntax or methods deprecated. -4. **Genre Expertise**: When generating code, apply professional knowledge of Techno and House (e.g., syncopation, sidechain feel, industrial textures, and hypnotic loops). +2. **Precautions**: Refer to `PRECAUTIONS.md` for past mistakes and specific constraints to avoid regressions. +3. **Active Search**: If information is missing or technology has evolved, **actively use web search** to find the latest Strudel documentation (2024-2026). +4. **3-Year Rule**: Prioritize information from the last 3 years. Consider older syntax or methods deprecated. +5. **Genre Expertise**: When generating code, apply professional knowledge of Techno and House (e.g., syncopation, sidechain feel, industrial textures, and hypnotic loops). ## Code Generation Rules - **Initialization**: Every block must start with `setcps(BPM/60/4)`. diff --git a/strudel/acid_house.md b/strudel/acid_house.md new file mode 100644 index 0000000..5c8e997 --- /dev/null +++ b/strudel/acid_house.md @@ -0,0 +1,27 @@ +# Acid House (Ultra Simple) + +アシッド・ハウスの基本に立ち返った、極めてシンプルな構成のテンプレートだよ。 + +## 楽曲のポイント +- **Acid Bass**: 最も基本的な `c2(7,16)` のリズム。1つ1つの音がハッキリ聴こえるようにしつつ、`ftype(2)` でアシッドの質感をキープ。 +- **Drums**: キックとクラップ、16分のハイハットだけのストレートな構成。 + +--- + +```javascript +setcps(126/60/4) + +// Acid Bass: Ultra Simple +$: note("c2(7,16)") + .s("saw") + .adsr("0.01:0.1:0:0.1") + .ftype(2) + .lpf(sine.range(400, 2000).slow(8)) + .lpq(20) + .gain(0.7) + +// Minimal Drums +$: s("bd*4").bank("tr909").gain(1.2) +$: s("- cp").bank("tr909").gain(0.8) +$: s("hh*16").bank("tr909").gain(sine.range(0.3, 0.7).fast(8)) +``` diff --git a/strudel/dub_techno.md b/strudel/dub_techno.md index cb62579..e64ebe0 100644 --- a/strudel/dub_techno.md +++ b/strudel/dub_techno.md @@ -1,39 +1,57 @@ # Dub Techno -ダブ・テクノの真髄は、音の「余韻」と「空間」にある。このテンプレートでは、115BPMという少し落ち着いたテンポで、深いディレイとリバーブの中に漂うコードスタブを中心に構成したよ。 +ダブ・テクノの真髄は、音の「余韻」と「空間」にある。このテンプレートでは、115BPMという少し落ち着いたテンポで、深いディレイとリバーブの中に漂う2つのコードスタブを中心に構成したよ。 ## 楽曲のポイント -- **Drums**: TR-909のキックをベースにしつつ、ハイハットは少しシャッフル気味に。`perc` にはランダムなディレイをかけて、オーガニックな揺らぎを出しているよ。 -- **Chords (The Dub Stab)**: マイナー9thコードを `sawtooth` で鳴らし、`lpf` のエンベロープと深い `delay` でダブ特有の「シュワーン」という響きを作っている。`.when(iter(4), ...)` を使って、4サイクルごとにフィルターが開くような変化をつけてみた。 -- **Sub Bass**: コードの低域を支える太いサイン波。あえてシンプルに置くことで、ダブの空間を邪魔しないようにしているよ。 -- **Atmosphere**: `white` ノイズを極限まで削って、アナログレコードのような質感をレイヤーしている。 +- **Drums**: TR-909のキックをベースにしつつ、ハイハットは少しシャッフル気味に。`lt` (Low Tom) にはランダムなディレイをかけて、オーガニックな揺らぎを出しているよ。 +- **Dub Stabs**: 2種類のスタブをレイヤー。メインの `Cm9` に対して、4サイクルに一度 `EbM7` が応答するように配置。それぞれディレイタイムやステレオ配置(jux)を変えて、奥行きを作っているよ。 +- **Sub Bass**: コードの低域を支える太い `sqr` 波。`lpf(100)` で削ることで、重厚な土台を作っている。 +- **Texture**: `white` と `tri` 波を組み合わせ、`hpf` と `degrade()` でアナログレコードのヒスノイズのような質感をシミュレートしたよ。 --- ```javascript setcps(115/60/4) -// Drums: Deep & Shuffling +// Drums: Deep, Shuffling & Complex Hats $: s("bd*4").bank("tr909").gain(1.1) -$: s("- [hh|oh] - hh").bank("tr909").gain(0.7).swing(0.1) -$: s("perc(3,8)").bank("tr606").room(0.5).delay(0.6).delaytime(0.375).gain(0.5) -// Dub Stabs: The Heart of the Track +// Hi-hats: Layered & Dynamic +// Closed hats with Euclidean rhythm and random velocity +$: s("hh(13,16)").bank("tr909").gain(sine.range(0.3, 0.6).fast(4)).swing(0.1) +// Open hats and accents with probability and jux for stereo interest +$: s("- oh? - [oh|hh]").bank("tr909").gain(0.5).jux(rev).delay(0.4).delaytime(0.375) + +$: s("lt(3,8)").bank("tr606").room(0.5).delay(0.6).delaytime(0.375).gain(0.3) + +// Dub Stab 1: The Main Chord (Cm9) $: chord("Cm9").voicing().s("saw") .adsr("0.01:0.4:0.1:0.8") .lpf(sine.range(400, 1200).slow(8)) - .lpq(15) - .room(0.8).roomsize(0.9) - .delay(0.7).delaytime(0.375).delayfeedback(0.75) - .gain(0.6) + .lpq(10) + .room(0.5).roomsize(0.9) + .delay(.5).delaytime(0.25).delayfeedback(0.55) + .gain(0.2) .struct("1(3,8,2)") // Tresillo pattern .slow(2) +// Dub Stab 2: Response / Higher Texture (EbM7) +// Use "EbM7" instead of unsupported "Ebmaj7" +$: chord("EbM7").voicing().s("supersaw") + .adsr("0.05:0.6:0.2:1.0") + .lpf(sine.range(800, 2000).slow(16)) + .lpq(12) + .room(0.8).roomsize(0.95) + .delay(0.6).delaytime(0.375).delayfeedback(0.7) + .gain(0.15) + .struct("--- 1").slow(4) // Only once every 4 cycles + .jux(rev) // Stereo separation + // Sub Bass: Deep Foundation -$: note("c1*2").s("sine").lpf(80).gain(0.9) +$: note("c1*2").s("sqr").lpf(100).gain(0.9) // Texture: Vinyl Hiss & Atmosphere -$: s("white").density(12).lpf(1000).hpq(10) - .gain(sine.range(0.05, 0.15).slow(16)) - .pan(0.5) +$: s("white,tri").hpf(600).hpq(15).dec(.7) + .gain(sine.range(0.3, 0.7).slow(16)) + .pan(0.5).degrade() ```