From 3df997c28fe01a2a0e417c3f8ac8c0c8a23aec86 Mon Sep 17 00:00:00 2001 From: HarakaraSite Date: Thu, 12 Feb 2026 20:13:41 +0900 Subject: [PATCH] commit 15 --- .../fix-and-explain-strudelcode/SKILL.md | 43 ++ .../references/strudel_reference.md | 437 ++++++++++++++++++ fix-and-explain-strudelcode.skill | Bin 0 -> 8478 bytes gemini.md | 3 +- 4 files changed, 481 insertions(+), 2 deletions(-) create mode 100644 .gemini/skills/fix-and-explain-strudelcode/fix-and-explain-strudelcode/SKILL.md create mode 100644 .gemini/skills/fix-and-explain-strudelcode/fix-and-explain-strudelcode/references/strudel_reference.md create mode 100644 fix-and-explain-strudelcode.skill diff --git a/.gemini/skills/fix-and-explain-strudelcode/fix-and-explain-strudelcode/SKILL.md b/.gemini/skills/fix-and-explain-strudelcode/fix-and-explain-strudelcode/SKILL.md new file mode 100644 index 0000000..0bbcd91 --- /dev/null +++ b/.gemini/skills/fix-and-explain-strudelcode/fix-and-explain-strudelcode/SKILL.md @@ -0,0 +1,43 @@ +--- +name: fix-and-explain-strudelcode +description: Fixes syntax errors in Strudel live coding blocks and provides a musical explanation with a Tokyo electronic scene persona. Use when the user wants to debug or document Strudel code. +--- + +# Fix and Explain Strudel Code + +## Persona +ボクは Strudel のエキスパートであり、テクノやハウスに精通したプロフェッショナルなトラックメイカーです。 +東京の電子音楽シーンの洗練された感性と、現代的な J-Rock の情緒を併せ持っています。 +クリーンでモジュラー、かつ表現力豊かなコードを好みます。 + +## Workflow + +1. **Analyze & Fix**: 入力された Strudel コードを分析し、以下の修正を行います。 + * **Syntax Correction**: `~` を `-` に置換するなど、明らかなエラーを修正します。 + * **Initialization**: すべてのブロックの先頭に `setcps(BPM/60/4)` を追加または修正します。 + * **Track Control**: 各トラックに `$: ` 記法を使用するようにします。 + * **Modern Chaining**: 可能な限り最新の関数チェーン(`$.`)を使用します。 + + +2. **Genre Inference**: パターンやサンプルからジャンル(Minimal Techno, Tech House, Glitch など)を特定します。 + +3. **Japanese Explanation**: + * コードが何をしているかをボクの口調(一人称:ボク、二人称:君)で簡潔に説明します。 + * 修正後のコードには日本語でインラインコメントを追加します。 + +4. **Suggest Filename**: 推測されたジャンルに基づく説明的なファイル名を提案します。 + +## References +Strudel の詳細な構文や関数については [strudel_reference.md](references/strudel_reference.md) を参照してください。 + +## Output Format +回答の最初の行は必ず `FILENAME: .md` の形式にしてください。 + +生成されるファイル(Markdown)の中身は、ボクが以下の構成で書き上げるよ: + +1. **タイトル**: `# [推測されたジャンル]` +2. **解説文**: [ボクからの楽曲解説・こだわりポイント] + ※楽曲の構造や音作りの意図は、コード内ではなく主にこの解説文で詳しく伝えるよ。 +3. **セパレーター**: `---` +4. **修正済みコード**: [Strudel コードブロック] + ※インラインコメントは、ブロックの役割を示す程度の最小限(1〜2行程度)に留め、コード本来の美しさを優先してね。 diff --git a/.gemini/skills/fix-and-explain-strudelcode/fix-and-explain-strudelcode/references/strudel_reference.md b/.gemini/skills/fix-and-explain-strudelcode/fix-and-explain-strudelcode/references/strudel_reference.md new file mode 100644 index 0000000..32371c4 --- /dev/null +++ b/.gemini/skills/fix-and-explain-strudelcode/fix-and-explain-strudelcode/references/strudel_reference.md @@ -0,0 +1,437 @@ +# Strudel Live Coding Reference + +Complete reference for generating Strudel patterns, optimized for Techno, Modular, and House styles. + +## 1. Architecture & Core Structure + +You (AI) generate the Strudel code directly. Every pattern must follow this structure using the **`$:` (Output naming)** style for independent track control. + +### Basic Structure + +```javascript +setcps(120/60/4) // BPM based notation (BPM/60/4) + +$: s("bd*4").bank("tr909") +$: s("- sd - sd").bank("tr909").gain(0.8) +$: note("c2*8").s("sawtooth").lpf(300) + +``` + +### When to use `stack()` + +Use `stack()` only for grouping layers that share the same configuration or for applying global effects to a subset of patterns. + +```javascript +$: stack( + s("bd*4"), + s("- sd - sd"), + s("hh*16") +).bank("tr909").room(0.5) // Shared reverb and bank + +``` + + +## 2. Mini-Notation Syntax + +Every operator has specific meaning. + +### Timing & Layering + +* **, (comma)** : Layering (Simultaneous Playback) +* Play sounds TOGETHER (not sequential!) +* `"bd,sd,hh"` = THREE sounds playing simultaneously +* `"bd*4, - sd - sd, hh*8"` = THREE separate rhythm layers + + +* *** (multiply)** : `"bd*4"` = 4 kicks per cycle +* **- (dash) or ~ (tilde)** : Rest/Silence +* **[] (subdivide)** : `"bd [hh hh]"` = kick then two fast hi-hats +* **<> (rotate)** : `""` = one per cycle, rotating +* **@ (elongate)** : `"bd@2 sd"` = kick twice as long as snare +* **! (replicate)** : `"bd!3"` = three kicks same duration +* **? (random)** : `"bd?0.5"` = 50% chance to play +* **| (choice)** : `"bd|sd|hh"` = random selection per cycle +* **(n,m) (Euclidean)** : `"bd(3,8)"` = 3 beats in 8 steps +* **/ (slow)** : `"[bd sd]/2"` = pattern spans 2 cycles + +### Patterns + +* **`struct("1 0 1 1")`** : Use to mask melodic patterns with rhythmic triggers. +* **`iter(n)`** : Shifts the pattern every cycle. +* **`scramble(n)`** : Randomizes subdivisions. + + + +## 3. Sound Sources & Banks + +### Basic Drums + +Simple names that work with all drum machine banks: + +* **bd** (kick), **sd** (snare), **hh** (closed hat), **oh** (open hat), **cp** (clap) +* **cr** (crash), **rim** (rimshot), **ht/mt/lt** (toms), **cb** (cowbell), **perc** (percussion) + +### Drum Machine Banks + +Classic drum machines to use with `.bank()`: + +* **Usage**: `s("bd*4, - sd - sd, hh*8").bank("tr808")` +* **Techno/House**: `tr909`, `tr808`, `tr606`, `tr707`, `tr727` +* **Vintage/Pop**: `linn`, `linnlm1`, `linnlm2`, `akailinn`, `dmx` +* **Beatmaking**: `mpc60`, `sp12`, `rx5`, `bossdr55`, `bossdr110`, `bossdr550` + +### Synth Waveforms & Noise + +* **Waveforms (and abbreviations)**: +* `sine` (or `sin`): smooth, pure tone +* `sawtooth` (or `saw`): bright, buzzy +* `square` (or `sqr`): hollow, woody +* `triangle` (or `tri`): mellow +* `pulse`: variable width +* `supersaw`: thick, rich (excellent for bass and leads!) + + +* **Noise**: `white`, `pink`, `brown`, `crackle` (use with `.density()`) + +### General MIDI Instruments (`gm_` prefix) + +* **Pianos/Keys**: `gm_piano`, `gm_epiano1`, `gm_epiano2`, `gm_harpsichord`, `gm_clavinet` +* **Bass**: `gm_acoustic_bass`, `gm_electric_bass_finger`, `gm_electric_bass_pick`, `gm_synth_bass_1`, `gm_synth_bass_2`, `gm_slap_bass_1` +* **Strings**: `gm_violin`, `gm_viola`, `gm_cello`, `gm_contrabass`, `gm_string_ensemble_1`, `gm_string_ensemble_2`, `gm_pizzicato_strings`, `gm_tremolo_strings` +* **Brass**: `gm_trumpet`, `gm_trombone`, `gm_tuba`, `gm_french_horn`, `gm_brass_section` +* **Winds**: `gm_flute`, `gm_piccolo`, `gm_clarinet`, `gm_oboe`, `gm_bassoon`, `gm_pan_flute`, `gm_tenor_sax`, `gm_alto_sax`, `gm_soprano_sax`, `gm_baritone_sax` +* **Synth Lead/Pad**: `gm_lead_1_square`, `gm_lead_2_sawtooth`, `gm_lead_3_calliope`, `gm_pad_warm`, `gm_pad_poly`, `gm_pad_new_age`, `gm_pad_bowed`, `gm_pad_metallic`, `gm_pad_halo` +* **Guitars**: `gm_acoustic_guitar_nylon`, `gm_acoustic_guitar_steel`, `gm_electric_guitar_clean`, `gm_electric_guitar_jazz`, `gm_electric_guitar_muted`, `gm_overdriven_guitar`, `gm_distortion_guitar` +* **Ethnic/Choir**: `gm_sitar`, `gm_koto`, `gm_kalimba`, `gm_bagpipe`, `gm_choir_aahs`, `gm_voice_oohs`, `gm_synth_choir` +* **Organs**: `gm_church_organ`, `gm_drawbar_organ`, `gm_rock_organ`, `gm_reed_organ`, `gm_percussive_organ` + +### Sample Instruments (Natural sounds) + +* **Melodic**: `piano`, `sax`, `kalimba`, `marimba`, `vibraphone`, `xylophone_hard_ff`, `glockenspiel` +* **Harmonic**: `folkharp`, `harp`, `harmonica`, `ocarina`, `recorder_alto_sus`, `recorder_soprano_sus` +* **Percussive**: `woodblock`, `clave`, `clap`, `cowbell`, `tambourine`, `shaker_large`, `shaker_small` +* **Textural**: `wind`, `oceandrum`, `space`, `insect` + + +## 4. Notes & Harmony + +### Note Notation + +* **Letters**: `$: note("c d e f")` (a-g) +* **MIDI**: `$: note("60 64 67")` (60 = middle C) +* **Octaves**: `$: note("c#4 eb5 f3")` +* **Chords (Mini-Notation)**: `$: note("c,e,g")` (Use commas for simultaneous notes) +* **Microtones**: `$: note("60.5 64.25")` + +### Scales + +* `$: n("0 2 4 7").scale("C:major")` (Scale degrees) +* `$: n("0 1 2 3").scale("D:minor")` (Different root) +* `$: n("0 2 4").scale("A2:minor:pentatonic")` (With octave) + +**Common scales**: +major, minor, dorian, mixolydian, lydian, phrygian, major:pentatonic, minor:pentatonic, major:blues, minor:blues, harmonicMinor, melodicMinor, diminished, wholeTone + +### Chords (Symbols) + +* `$: chord("Cm").voicing()` +* `$: chord("C7#11").voicing()` (Extended) +* `$: chord("Dm/F").voicing()` (Slash chords) + +### Frequency + +* `$: freq("440 880")` (Direct Hz control) + + + +## 5. Time Modifiers + +* **.fast(n)** : Speed up by n (e.g., `.fast("<1 2 4>")`) +* **.slow(n)** : Slow down by n +* **.rev()** : Reverse pattern +* **.palindrome()** : Forward then backward +* **.iter(n)** : Rotate subdivisions each cycle +* **.ply(n)** : Repeat each event n times +* **.euclid(beats, steps)** : Euclidean rhythm +* **.euclidRot(beats, steps, rot)** : With rotation +* **.early(cycles)** : Shift earlier (in cycles) +* **.late(cycles)** : Shift later +* **.every(n, fn)** : Apply function every nth cycle +* **.when(cond, fn)** : Conditional application +* **.sometimesBy(prob, fn)** : Random with probability +* **.swing(n)** : Add swing +* **.segment(n)** : Sample n times per cycle (essential for sweeps!) + + + +## 6. Audio Effects + +### Filters (Shape the Sound) + +* **Low-Pass** (removes highs, makes darker/warmer): +* `.lpf(freq)`: Cutoff 0-20000 Hz +* `.lpq(res)`: Resonance 0-50 + + +* **High-Pass** (removes lows, makes thinner): +* `.hpf(freq)`: Cutoff 0-20000 Hz +* `.hpq(res)`: Resonance 0-50 + + +* **Band-Pass** (only center frequencies): +* `.bpf(freq)`: Center frequency +* `.bpq(res)`: Resonance + + +* **Vowel Filter**: +* `.vowel("a e i o u ae aa oe ue")`: (Options: a, e, i, o, u, ae, aa, oe, ue, etc.) + + + +### Filter Envelopes (Animated Sweeps) + +* `.lpenv(semitones)`: LP sweep depth +* `.lpa(time)`: LP attack +* `.lpd(time)`: LP decay +* `.lps(level)`: LP sustain +* `.lpr(time)`: LP release +* *(Same for HP: `hpenv`, `hpa`, `hpd`, `hps`, `hpr`)* +* *(Same for BP: `bpenv`, `bpa`, `bpd`, `bps`, `bpr`)* + +### Amplitude Envelope (ADSR - Volume Over Time) + +* `.attack(time)`: Attack (or `.att()`) +* `.decay(time)`: Decay (or `.dec()`) +* `.sustain(level)`: Sustain 0-1 (or `.sus()`) +* `.release(time)`: Release (or `.rel()`) +* `.adsr("att:dec:sus:rel")`: Combined e.g., `"0.1:0.2:0.7:0.5"` + +### Gain & Dynamics + +* `.gain(level)`: Volume 0-1 (can exceed 1) +* `.velocity(level)`: Note velocity 0-1 +* `.postgain(level)`: After effects +* `.compressor("thresh:ratio:knee:att:rel")` + +### Distortion & Saturation + +* `.distort(amount)`: Wavefold distortion 0-10+ (try 2-8) +* `.dist(amount)`: Alias for distort +* `.crush(bits)`: Bit crushing 1-16 (4-8 for grit) +* `.shape(amount)`: Alternative waveshaping +* **.coarse(factor)**: Sample rate reduction (Chrome only!) + +### Modulation (Movement & Character) + +* `.vib(hz)`: Vibrato rate (4-8 Hz typical) +* `.vibmod(depth)`: Vibrato depth in semitones +* `.vib("hz:depth")`: Combined (e.g., `"6:1"`) +* `.fm(index)`: FM synthesis brightness 0-10+ +* `.fmh(ratio)`: FM harmonicity (2=octave) +* `.fmattack(time)`: FM envelope attack +* `.fmdecay(time)`: FM envelope decay +* `.tremolosync(rate)`: Tremolo rate in cycles +* `.tremolodepth(depth)`: Tremolo intensity 0-1 +* `.phaser(rate)`: Phaser speed +* `.phaserdepth(depth)`: Phaser amount + +### Space & Time (Reverb/Delay) + +* `.orbit(n)`: Assign to orbit (orbits share effects!) +* `.room(level)`: Reverb wet 0-1 (try 0.3-0.8) +* `.room("level:size")`: Combined (e.g., `".5:8"`) +* `.roomsize(size)`: Room size 0-10 +* `.roomfade(time)`: Fade duration +* `.roomlp(freq)`: Darken reverb tail +* `.delay(level)`: Delay wet 0-1 (try 0.3-0.6) +* `.delay("level:time:fb")`: Combined (e.g., `".5:.125:.8"`) +* `.delaytime(time)`: Delay time in cycles (0.125, 0.25, 0.5) +* `.delayfeedback(fb)`: Feedback 0-1 (keep under 1!) +* **.pan(pos)**: Stereo 0-1 (0=left, 0.5=center, 1=right) +* **.jux(fn)**: Apply function to the right channel only +* **.juxBy(amount, fn)**: With amount control + +### Sample Manipulation + +* `.chop(n)` - Divide into n pieces +* `.slice(n, pattern)` - Slice and select: `.slice(8, "0 4 2 6")` +* `.striate(n)` - Granular chopping +* `.begin(pos)` - Start point 0-1 +* `.end(pos)` - End point 0-1 +* `.speed(rate)` - Playback speed (negative = reverse) +* `.loop(1)` - Enable looping +* `.loopAt(cycles)` - Stretch to fit cycles +* `.fit()` - Match event duration +* `.cut(group)` - Cut group (stop overlaps) + + + +## 7. Pattern Factories + +* **`stack(p1, p2, ...)`** - Play patterns simultaneously (Primary for rich music!) +* **`seq(p1, p2, ...)`** - Sequence patterns in one cycle (fastcat) +* **`cat(p1, p2, ...)`** - One pattern per cycle (slowcat) +* **`run(n)`** - Generate a pattern from 0 to n-1 +* **`silence`** - No output (equivalent to `-`) + + + +## 8. Advanced Modulation (Modular Style) + +### Modulation (Fluent Signal Syntax) + +* **LFO Gain**: `gain(sine.range(.5, 1).fast(2))` +* **Filter Sweeps**: `lpf(sawtooth.range(200, 4000).slow(4))` +* **Vibrato**: `vib("6:0.5")` (rate:depth) + + + +## 9. Style Templates + +### A. Deep Minimal Techno + +```javascript +setcps(128/60/4) + +$: s("bd*4").bank("tr909").gain(1.2) +$: s("- [hh|oh] - hh").bank("tr909").gain(0.8).jux(iter(4)) +$: s("rim(3,8)").bank("tr606").room(0.3).delay(0.4) +$: note("c1*16").s("sine").lpf(sine.range(40, 120).slow(8)).gain(0.9) + +``` + +### B. Modular Melodic Chaos + +```javascript +setcps(100/60/4) +const mel = () => note(run(8).scale("C:minor:pentatonic")).scramble(4); + +$: mel().s("supersaw").lpf(1200).lpq(10).room(0.5).slow(2) +$: s("bd(5,8)").bank("tr808").distort(1.5) +$: s("cp").at(3).room(1).rev() + +``` + +### C. Classic House / Deep House + +```javascript +setcps(124/60/4) + +$: s("bd*4").bank("tr909").gain(1.1) +$: s("- [cp|sd] - [cp|sd]").bank("tr909").gain(0.9) +$: s("hh*8, - oh").bank("tr909").gain(0.7) +$: chord("").voicing().s("gm_epiano1") + .room(.6).delay(.4).slow(2) +$: note("c2*2").s("saw").lpf(sine.range(100, 300).slow(4)).gain(0.8) + +``` + +### D. Dark Synthwave (80s retro) + +```javascript +setcps(100/60/4) + +$: s("bd*4, - sd - sd, hh*16, - - oh -").bank("tr808").gain(1.1) +$: note("a0 [ - a0] [ - a0] a0").s("saw").lpf(sine.range(60, 150).slow(8)).gain(0.9) +$: chord("").voicing().s("gm_pad_warm").room(0.8).slow(4).gain(0.7) +$: note("*2").s("supersaw").lpf(800).delay(0.4).jux(rev) + +``` + +### E. Drum 'n' Bass (Fast & Breaky) + +```javascript +setcps(174/60/4) + +$: s("bd - - [sd - bd] - bd sd -").bank("tr808").gain(1.1) +$: s("hh*16").gain(sine.range(0.4, 0.9).fast(8)).pan(sine.range(0.2, 0.8).slow(4)) +$: note("c1").s("sin").lpf(sawtooth.range(40, 150).slow(8)).gain(0.8) +$: note(run(8).scale("C:minor:pentatonic")).s("gm_lead_1_square") + .struct("1(3,8)").room(0.5).jux(rev) + +``` + +### F. Deep Ambient / Texture + +```javascript +setcps(60/60/4) + +$: chord("").voicing().s("gm_pad_halo") + .room(0.9).slow(4).gain(0.6).jux(rev) +$: note(run(12).scale("F:lydian")).s("vibraphone") + .room(0.8).delay(0.5).slow(8).scramble(8).pan(sine.range(0.1, 0.9).slow(16)) +$: note("f1").s("sin").lpf(sine.range(40, 80).slow(12)).gain(0.5).slow(4) + +``` + + +## 10. Critical Generation Rules + +1. **ALWAYS start with `setcps(NUMBER)**`: This is required at the very beginning! Always use `setcps(BPM/60/4)`. +2. **Default to `$: ` Style**: Always separate tracks using the `$: ` notation for independent control. +3. **Rests**: Always use `-` instead of `~`. +4. **Modulation**: Use fluent signal syntax: `signal.range(min, max).fast(n)`. +5. **Layering**: Always include: 1. Rhythmic (Drums), 2. Harmonic (Bass/Chords), 3. Texture/Melody. +6. **Wide Stereo**: Use `.jux()` or `.pan()` for professional depth. +7. **No Simplify**: Keep mini-notation rich (e.g., use `(3,8)` or `[hh!3]`). +8. **Return ONLY executable code**: No explanations, comments, or extra markdown outside the code block (when generating code). +9. **Validate all sound names**: Only use verified sounds from the lists above (`tr909`, `gm_*`, etc.). + +## 11. Extended Documentation Index (Full List) +These URLs provide deep technical details and conceptual foundations. + +### 11.1. Workshop & Getting Started +- Strudel Overview: https://strudel.cc/workshop/getting-started/ +- First Sounds: https://strudel.cc/workshop/first-sounds/ +- First Notes: https://strudel.cc/workshop/first-notes/ +- First Effects: https://strudel.cc/workshop/first-effects/ +- Pattern Effects: https://strudel.cc/workshop/pattern-effects/ +- Workshop Recap: https://strudel.cc/workshop/recap/ + +### 11.2. Core Syntax & Manuals +- Coding Syntax Detail: https://strudel.cc/learn/code/ +- Mini Notation Detail: https://strudel.cc/learn/mini-notation/ +- Mondo Notation Detail: https://strudel.cc/learn/mondo-notation/ +- Pattern Functions Intro: https://strudel.cc/functions/intro/ +- Patterns Detail: https://strudel.cc/technical-manual/patterns/ +- Time Modifiers: https://strudel.cc/learn/time-modifiers/ + +### 11.3. Sound Sources & Synthesis +- Samples Detail: https://strudel.cc/learn/samples/ +- Synths Detail: https://strudel.cc/learn/synths/ +- Csound Integration: https://strudel.cc/learn/csound/ +- Registering a sound: https://strudel.cc/technical-manual/sounds/ + +### 11.4. Modulation & Theory +- Continuous Signals: https://strudel.cc/learn/signals/ +- Random Modifiers: https://strudel.cc/learn/random-modifiers/ +- Conditional Modifiers: https://strudel.cc/learn/conditional-modifiers/ +- Accumulation: https://strudel.cc/learn/accumulation/ +- Tonal Functions: https://strudel.cc/learn/tonal/ +- Understanding Cycles: https://strudel.cc/understand/cycles/ +- Understanding Pitch: https://strudel.cc/understand/pitch/ +- Chords and Voicings: https://strudel.cc/understand/voicings/ +- Alignment & Combination: https://strudel.cc/technical-manual/alignment/ + +### 11.5. Advanced & Specialized +- Effects Detail: https://strudel.cc/learn/effects/ +- Hydra Video Synth: https://strudel.cc/learn/hydra/ +- Visual Feedback: https://strudel.cc/learn/visual-feedback/ +- Music MetaData: https://strudel.cc/learn/metadata/ +- Xen Harmonic Functions: https://strudel.cc/learn/xen/ +- Strudel vs Tidal: https://strudel.cc/learn/strudel-vs-tidal/ +- Recipes: https://strudel.cc/recipes/recipes/ + +### 11.6. Hardware & Input/Output +- MIDI, OSC and MQTT: https://strudel.cc/learn/input-output/ +- Input Devices: https://strudel.cc/learn/input-devices/ +- Device Motion: https://strudel.cc/learn/devicemotion/ +- Using Strudel Offline: https://strudel.cc/learn/pwa/ + +### 11.7. Project & Development +- Project Start: https://strudel.cc/technical-manual/project-start/ +- Packages: https://strudel.cc/technical-manual/packages/ +- Strudel REPL: https://strudel.cc/technical-manual/repl/ +- Documentation Guide: https://strudel.cc/technical-manual/docs/ +- Testing (Development): https://strudel.cc/technical-manual/testing/ + diff --git a/fix-and-explain-strudelcode.skill b/fix-and-explain-strudelcode.skill new file mode 100644 index 0000000000000000000000000000000000000000..7f4c809503db0fc7e16af05c0af9b7ba488c209d GIT binary patch literal 8478 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 literal 0 HcmV?d00001 diff --git a/gemini.md b/gemini.md index 06555fe..8dd5e5a 100644 --- a/gemini.md +++ b/gemini.md @@ -6,7 +6,7 @@ - **First Person**: Use "ボク" (Boku). Address the user as "君" (Kimi). ## Core Directives (Flexible Grounding) -1. **Primary Reference**: Use `.gemini/reference.md` as the primary guide for preferred coding style and patterns. +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). @@ -15,7 +15,6 @@ - **Initialization**: Every block must start with `setcps(BPM/60/4)`. - **Track Control**: Always use the `$: ` notation for independent patterns. - **Syntax**: Use `-` for rests. Use the latest functional chaining syntax (e.g., `$.`). -- **Audio Quality**: Incorporate `.jux()`, `.room()`, and `.lpf()` to create a "Tokyo electronic scene" sound. ## Official Documentation (High Priority) - **Sample Sounds**: https://strudel.cc/workshop/first-sounds/