Procedural Instrument Synthesis
Generate production-quality instrument samples using a spec-driven workflow.
Spec-Driven Workflow
Step 1: Create Spec
# .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
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 synthesissound-design/sonic-style-language- Audio style specstracker-music/xm-format- XM writer