chore(audio): add download script, audio credits, and sprint 21/22 docs

- docs/download_audio.py: freesound batch downloader with all 22 confirmed IDs
  (API key removed — fill in locally from freesound.org)
- docs/credits-audio.md: generated CC-BY attribution table
- docs/superpowers/plans+specs: sprint 15, 21, 22 implementation plan/spec docs
- .claude/settings.json: enable experimental agent teams env var

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Steven Wroblewski
2026-05-11 14:57:27 +02:00
parent ad9a406775
commit 52ebb78862
8 changed files with 1772 additions and 1 deletions
@@ -0,0 +1,61 @@
# Sprint 21 — Interactive Object SFX Design Spec
## Goal
Add SFX to all 6 tappable interactive objects. Each object makes a sound when its animation starts — XRay scan, TeaPot pour, Cradle rock, GiftBox open, Ambulance drive-in, DeliveryBed mama arrival. UltrasoundMachine is excluded (continuous auto-loop, not tap-triggered).
## New SFX Events
7 new events added to `AudioManager._SFX_MAP`:
| Event key | Object | Trigger |
|---|---|---|
| `xray_scan` | XRayMachine | `_start_scan()` |
| `tea_pour` | TeaPot | `_start_pouring()` |
| `cradle_rock` | Cradle | `_start_rocking()` |
| `gift_open` | GiftBox | `_start_opening()` |
| `ambulance_siren` | Ambulance | `_drive_in()` |
| `delivery_cheer` | DeliveryBed | mama arrives (`_start_mama_arriving()`) |
| `object_tap` | Generic fallback | any tap on InteractiveObject base |
## Asset Specification
New files:
```
assets/audio/sfx/xray_scan.ogg — electrical hum / machine beep
assets/audio/sfx/tea_pour.ogg — liquid pouring
assets/audio/sfx/cradle_rock.ogg — gentle creak / lullaby chime
assets/audio/sfx/gift_open.ogg — unwrapping / pop
assets/audio/sfx/ambulance_siren.ogg — short siren sting (<1.5s, child-friendly)
assets/audio/sfx/delivery_cheer.ogg — happy chime / fanfare
assets/audio/sfx/object_tap.ogg — soft tap / click
```
All CC0 or CC-BY from freesound.org. Placeholder 0-byte files committed; real downloads documented in `docs/audio-assets-sprint19.md` (extend existing file).
## Integration Points
Each is a single `AudioManager.play_sfx("key")` call at the start of the action:
- `xray_machine.gd` → in `_start_scan()`, before tween
- `tea_pot.gd` → in `_start_pouring()`, before tween
- `cradle.gd` → in `_start_rocking()`, before tween
- `gift_box.gd` → in `_start_opening()` (the method that starts the animation)
- `ambulance.gd` → in the drive-in animation method, before tween
- `delivery_bed.gd` → when mama starts arriving, before tween
- `interactive_object.gd` → in the base tap handler if one exists (object_tap)
## Testing
Append to `test/unit/test_audio_manager.gd`:
- `test_sfx_map_has_all_interactive_object_keys` — verifies all 7 new keys exist in `_SFX_MAP`
No per-object unit tests for SFX wiring — the calls are single-line, and the AudioManager Dummy-driver guard makes headless tests safe.
## Out of Scope
- UltrasoundMachine heartbeat sound (continuous loop, separate sprint)
- Character reaction sounds (Häschen/Kätzchen — separate sprint)
- Per-state-transition sounds (e.g., XRay completion sound)