# Procedural Instrument Synthesis

> Procedural Instrument Synthesis is an Agent Skill for documents published in the majiayu000/claude-skill-registry repository on GitHub: a SKILL.md instruction file an AI agent can load to do this task.

Generate instrument samples for ZX game music. **Spec-Driven Workflow (RECOMMENDED):** 1. Create `.spec.py` in `.studio/specs/instruments/` 2. Run `python .studio/generate.py --only instruments` **Load references when:** - Instrument specs → `procedural-sounds/references/sound-spec-format.md` - Example specs → `examples/bass.spec.py`, `examples/lead.spec.py` - Karplus-Strong → `references/karplus-strong.md` - FM synthesis → `references/fm-synthesis.md` - Drum examples → `references/drum-examples.py` **Before generating:** Check `.studio/sonic-identity.md` for audio specs.

- Skill name: `Procedural Instrument Synthesis`
- Category: [Documents](https://www.openparable.com/skill/documents/1)
- Source: https://github.com/majiayu000/claude-skill-registry/blob/HEAD/skills/gaming/procedural-instruments/SKILL.md
- Repository: majiayu000/claude-skill-registry (498 GitHub stars when collected)

## SKILL.md

# Procedural Instrument Synthesis

Generate production-quality instrument samples using a **spec-driven workflow**.

## Spec-Driven Workflow

**Step 1: Create Spec**
```python
# .studio/specs/instruments/bass.spec.py
INSTRUMENT = {
    "instrument": {
        "name": "bass",
        "base_note": "C2",
        "synthesis": {
            "type": "karplus_strong",
            "damping": 0.994,
            "brightness": 0.5
        },
        "envelope": {"attack": 0.01, "decay": 0.4, "sustain": 0.3, "release": 0.3},
        "output": {"duration": 1.5, "bit_depth": 16, "loop": True}
    }
}
```

**Step 2: Run Generator**
```bash
python .studio/generate.py --only instruments
```

See `procedural-sounds/references/sound-spec-format.md` for complete format.

## Technique Selection

| Instrument | Technique | Reference |
|------------|-----------|-----------|
| Acoustic Guitar | Karplus-Strong | `karplus-strong.md` |
| Electric Piano | FM Synthesis | `fm-synthesis.md` |
| Bells | FM (inharmonic) | `fm-synthesis.md` |
| Organ | Additive | `additive-synthesis.md` |
| Strings/Pads | Wavetable | `wavetable-synthesis.md` |
| Synth Lead/Bass | Subtractive | `subtractive-synthesis.md` |
| Drums | See examples | `drum-examples.py` |

## Why Basic Synthesis Sounds Chiptuney

| Problem | Why It Sounds Bad |
|---------|-------------------|
| Raw `np.sin()` | Static timbre, no evolution |
| Simple ADSR | Real instruments have complex envelopes |
| Instant attack | Real instruments have transients |
| Single oscillator | Real instruments have multiple components |

## Quality Checklist

- No clicks (attack/release ramps)
- Pitch correct (verify frequency)
- Timbre evolves (envelope on filter/index)
- Attack has character (transient noise)
- Sounds musical (test in context)

## Related Skills

- `procedural-sounds` - SFX synthesis
- `sound-design/sonic-style-language` - Audio style specs
- `tracker-music/xm-format` - XM writer

---

Source: https://www.openparable.com/skill/documents/procedural-instrument-synthesis (OpenParable). Cite the canonical URL above.
