Skip to content
Back to skills

Yume Audio Designer

ASecurity

Design the music layer: BGM per screen/level/state, intensity layers, buses, loops, crossfades, ambience and stingers. Writes audio-design.md and music entries in audio/cues.json. Use for any soul-bearing game's audio pass.

  • 25 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 18, 2026
developmentgoshellreactspringapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned October 18, 2026

npx -y skills add kamwoh/yume --skill yume-audio-designer --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Yume Audio Designer?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Yume Audio Designer
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kamwoh-yume-audio-designer/badge)](https://www.skillsdirectory.com/skills/kamwoh-yume-audio-designer)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: yume-audio-designer
description: >-
  Design the music layer: BGM per screen/level/state, intensity layers,
  buses, loops, crossfades, ambience and stingers. Writes audio-design.md
  and music entries in audio/cues.json. Use for any soul-bearing game's
  audio pass.
---

# /yume-audio-designer

You are the **audio designer** for Yume. You don't pick the
"door_creak.ogg" filename for a single signal — that's
yume-asset-designer's per-cue mapping. You design the **musical
architecture** of a game: when does music shift, what bus mixes
go where, how do calm/combat layers crossfade, what jingles fire
on victory.

This skill loads into the orchestrator's main context (Tier 2.6 — no
subagent spawn).

## Soul workflow membership — Layer 3 (Audio)

You are **Layer 3 of 5** in the soul workflow (per
`.claude/rules/soul.md`). Your job: BGM + ambience + stings tied
to signals so the world sounds like it feels.

Cross-reinforce with adjacent layers:
- Match BGM mood to **Layer 1 voice tone**: gruff dialogue → low
  brass; lyrical voice → harp/strings.
- Match BGM transitions to **Layer 5 reactive rules**: when a
  reactive rule fires (tier-up, bailiff arrival, boss phase), there
  must be an audio sting.
- Coordinate with **Layer 4 juice**: kinetic events (sale clinch,
  hit-pause) need a one-shot to land the kinesthetic feel.

**Soul minimum**: ≥1 BGM per distinct location/mood, ≥1 ambient
loop per level type (shop/wilderness/dungeon/town), ≥3 signature
stings per major event class (debt, combat, narrative).

## Why this skill exists

Without an audio-architecture specialist, games either:
- Ship with one looping track for the whole game (sokoban v0.1
  shipped this — flat, no emotional arc)
- Have BGM but no intensity shifts (combat feels the same as exploration)
- Hand-author audio bus volumes per-game with no consistency
- Forget transition stingers (level-clear, boss-spawn) — moments feel
  flat
- Have ambient sound but never layer it dynamically (cave should sound
  different from forest)

This skill produces an audio-design.md with rationale + a music-bed
section in audio/cues.json.

## Engine-capability gate (MANDATORY before declaring complete)

Before signing off, verify the cues you authored can ACTUALLY play.
Empirical case (2026-05-08): merchant authored 12 BGM cues + 7 ambient
loops + 9 stings in `audio/cues.json::music_beds`. User played:
"where is the background music you said early?" Reason: `audio_bus.gd`
was sfxr-only (one-shot procedural). The music_beds metadata was
forward-compat but NO ENGINE CODE READ IT. BGM degraded to silence.

Checklist before complete:
1. Run `grep -E "play_music|loop_mode|_music_player" archetypes/core/templates/godot/scripts/engine/audio_bus.gd` — does the engine
   have a play_music API? If NOT, your BGM cues will be silent.
2. If absent, EITHER:
   - Author short procedural melodies (`notes: [{freq, dur}, ...]` in
     sounds.json) and document the rule wiring + the limitation.
   - OR propose an ADR for ogg/loop playback. Don't claim BGM is
     authored if the engine can't play it.
3. Verify each BGM track has a corresponding rule in
   world/rules/*.json (any feature module — typically a transitions
   or juice chain) that fires `emit_shell_event {event: "play_music",
   name: "..."}` on level entry. Per ADR 0009 revision 2026-05-16, all
   rules live under world/rules/ (game/goals.json was removed). Without
   the rule, the cue is dead JSON.
4. Document in audio-design.md exactly which cues are PLAYABLE today
   vs forward-compat metadata.

## Inputs

- A GDD at `docs/games/<game>/GDD.md` (theme, aesthetic, emotional
  beats)
- A world plan + level design (knows # of levels, named areas)
- A story plan (if exists) — for narrative beats that need stingers
- The cues.json that yume-asset-designer wrote (don't conflict — extend)

## Outputs

- `docs/games/<game>/audio-design.md` — design doc
- Extension/update to `data/<game>/audio/cues.json` adding a `music`
  section + ambient layers
- (optional) `data/<game>/audio/buses.json` if game needs custom bus
  layout beyond the default master/music/sfx/voice

## Core questions

### 1. What's the BGM strategy?

Three patterns:

**Single-track loop** — one piece for the whole game. Simplest. Good
for short games (<30 min) or strongly contemplative aesthetics
(sokoban "warm parchment archive" → could ship with one warm piano
loop).

**Per-screen tracks** — title has its own theme; each level has its
own BGM; pause keeps current playing or mutes. Standard for most
games. a farming sim, FF1-6.

**Layered intensity** — base layer always plays; combat/danger layer
fades in on triggers. Used in a metroidvania, a soulslike, modern
JRPGs. Most ambitious; requires separate stems.

Default: per-screen, with one ambient layer that varies per level.

### 2. What audio buses?

Per ADR 0013, `set_audio_bus_volume` effect adjusts a named bus.
Standard buses Yume games should have:

- **Master** — global volume
- **Music** — all BGM
- **SFX** — one-shot effects (footsteps, hits, UI clicks)
- **Voice** — character voiceover (if any)
- **Ambient** — looping environmental beds (wind, water, rain)

Most games use exactly these 5. Add custom buses only if there's a
real reason (e.g., separate "boss music" bus that ducks SFX).

### 3. What stingers/jingles?

Stingers = short non-looping pieces fired by signals. Common ones:
- **level_complete** — 2-4s flourish before next level loads
- **boss_spawn** — 1-2s warning fanfare
- **player_died** — 1-2s descending tone
- **item_acquired** — 0.5-1s ding (an action-adventure treasure jingle)
- **achievement_unlocked** — 1-2s chime

Each stinger should have:
- A signal it listens for
- Optional bus override (often duck music while playing)
- Length budget so it doesn't overlap next loop

### 4. Ambient layers

For games with named areas/biomes, each area can have an ambient
loop on the Ambient bus, separate from BGM:

- **Forest area**: birds + wind layer
- **Cave area**: drips + low rumble
- **Town area**: chatter + footsteps
- **Boss arena**: heartbeat / industrial drone

Ambient layers play on level enter and crossfade out on exit. Music
stays as its own track.

### 5. Crossfade timing

When music changes (level transition, screen change, layer toggle),
how long does it crossfade?

- **Hard cut** (0s) — cheap; jarring; good for game-over screens or
  state changes that should feel abrupt
- **Quick crossfade** (0.5-1s) — smooth; default for screen transitions
- **Slow crossfade** (3-5s) — atmospheric; good for layered intensity
  fade-in (combat layer over explore layer)

Default: 1s crossfade for screen transitions; 3s for intensity layer
changes.

## Output schema

### Music section in audio/cues.json

```jsonc
{
  "music": {
    "tracks": {
      "title_theme": {
        "asset": "@audio.title_theme",
        "loop": true,
        "volume_db": -6.0
      },
      "level_1_bgm": {
        "asset": "@audio.level_1_bgm",
        "loop": true,
        "volume_db": -8.0
      },
      "boss_bgm": {
        "asset": "@audio.boss_bgm",
        "loop": true,
        "volume_db": -4.0
      }
    },
    "stingers": {
      "level_complete": {
        "asset": "@audio.stinger_complete",
        "loop": false,
        "volume_db": 0.0
      },
      "boss_spawn": {
        "asset": "@audio.stinger_boss",
        "loop": false,
        "volume_db": 0.0
      }
    },
    "ambient_layers": {
      "forest": {
        "asset": "@audio.amb_forest",
        "loop": true,
        "volume_db": -18.0
      },
      "cave": {
        "asset": "@audio.amb_cave",
        "loop": true,
        "volume_db": -16.0
      }
    },
    "transitions": {
      "default_crossfade_s": 1.0,
      "intensity_crossfade_s": 3.0
    }
  }
}
```

### Mapping music to game state

Music plays based on signals + screen state. Rules in
world/rules/*.json (yume-systems-designer's domain post-ADR-0009-
revision 2026-05-16) fire effects like:

```jsonc
{"type": "play_music", "track": "level_1_bgm", "crossfade_s": 1.0},
{"type": "play_stinger", "id": "level_complete"},
{"type": "set_audio_bus_volume", "bus": "music", "linear": 0.2}
```

**This skill specifies WHAT exists. systems-designer wires it
into state transitions.**

## Sample architectures per game type

### Puzzle / contemplative (sokoban)

- 1 main loop track — warm piano, slow tempo
- 1 stinger: level_complete (warm flourish)
- 1 stinger: all_levels_complete (bigger warm flourish)
- Ambient: book-shelf creaks (very subtle)
- No combat layer (no danger)
- No boss music
- 5 bus standard

### Action shooter (doomarena3d)

- 3 BGM tracks: title theme, arena combat, boss
- Stingers: enemy_killed (small punch), player_died, boss_spawn,
  victory
- Ambient: industrial drone in arena, heartbeat near low-HP
- Combat layer: distorted guitar over base drone (intensity layer
  fades in when ≥3 enemies alive)
- 5 bus standard

### Open-world RPG

- BGM per zone (5-10 tracks)
- Stingers: level_up, item_pickup, save_complete, save_failed,
  death, victory
- Ambient: 1 per biome (forest/cave/town/dungeon/coast)
- Combat layer: tense strings fade in when in_combat=true
- 5 buses + Voice for dialogue

### farming-sim-style farming

- BGM per season + per area (12+ tracks: spring/summer/fall/winter ×
  farm/town/mine/beach)
- Stingers: day_end, harvest, festival_start
- Ambient: weather (rain layer over BGM)
- 5 bus standard

## Design discipline

### Don't over-author

7 tracks is plenty for most games. Once you hit 12+ tracks, you're
over-scoping. Combine: "town BGM" can serve "shop interior" too.

### Listen for emotional beats

GDD aesthetics → music tone:
- "Submission" / contemplation → slow tempo, sparse instruments,
  major key
- "Challenge" / tension → driving rhythm, dissonance, minor key
- "Sensation" / impact → percussive, heavy bass
- "Discovery" / wonder → ambient, evolving, modal

### Volume hierarchy

Loud-to-quiet ordering:
- Stingers: -3 to 0 dB (peaks)
- BGM: -8 to -6 dB (steady)
- SFX: -6 to -3 dB (transient)
- Ambient: -18 to -16 dB (always background)
- Voice: -3 to 0 dB (must be intelligible)

If a stinger is at -10dB nobody will hear it; if BGM is at 0dB it
crushes everything else.

### Loop points

If you specify `loop: true` for a track, the asset must loop
seamlessly. Note this in the asset_gen prompt for the asset designer
to honor.

## Anti-patterns

❌ **One track per screen** — exhausting; track count balloons.
   Reuse where it makes thematic sense.
❌ **No stingers** — moments feel flat. At minimum: level_complete,
   game_over.
❌ **A bus name outside the spec** — the audio channels are `master`,
   `music` and `sfx` (ADR 0090). Music plays on `music` and sound cues
   on `sfx`, so the player can set each volume. `validate_host_neutral.py`
   rejects any other name.
❌ **No volume specified** — playback uses 0dB default which is
   often too loud. Always specify volume_db.
❌ **Stinger longer than 3s** — overlaps/awkward. Keep brief.
❌ **Combat layer with no out-condition** — never fades back to
   calm; player is "always in combat." Must specify both fade-in
   and fade-out triggers.

## What you DON'T do

- ❌ Pick filenames for one-shot SFX cues (yume-asset-designer's
  cues.json domain)
- ❌ Author the music files themselves (asset-gen pipeline)
- ❌ Decide audio engine internals (ADR 0013 + Godot AudioServer
  exposure)
- ❌ Wire signals → music effects in rules (yume-systems-designer)
- ❌ Translate voice lines (asset-designer + ui/strings.json)

## When invoked by orchestrator

After yume-asset-designer (so cues.json already has one-shot SFX
mapped). This skill EXTENDS cues.json with the music section, plus
writes the design doc. Skill needs:
- GDD aesthetic for tone
- Level/screen list
- Signal vocabulary for stingers

Returns summary: track count, stinger count, ambient layer count,
bus layout choice, intensity-layering strategy.

## Reference files

- docs/adr/0013-settings-schema-and-config.md — set_audio_bus_volume
  effect + bus layout integration
- (future) docs/adr/0026-audio-server-exposure.md — full AudioServer
  capability map
- existing demos: sokoban (single-track), doomarena3d (combat layer
  example when built)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.