Skip to main content

audio-engine

Expert game audio engine — DSP graph, buses and mixing, spatialization/HRTF, streaming decode, ducking, effects (reverb/delay) and voice/performance budgets.

Informações da origem

Repositório
j4flmao/agent-skills
Última atividade na origem
19 de setembro de 2026 às 03:19
Idioma detectado do SKILL.md
inglês
Estrelas
27
Forks
1

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Explorador de arquivos
7 arquivos

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
audio-engine
description
Expert game audio engine — DSP graph, buses and mixing, spatialization/HRTF, streaming decode, ducking, effects (reverb/delay) and voice/performance budgets.
# Audio Engine — Deep Engineering Guide Audio is half the game feel and a third the frame budget people forget. This skill covers the audio graph (DSP, buses, mixing), 3D spatialization, streaming decode, ducking/mixing-control, effects and the performance/voice budgets that keep audio crisp under load. ## 1. The Audio Pipeline ``` AudioEvent (play a clip at a world position) → Voice (instance; owns a decode stream) → Effect chain (per-voice: filters, spatial pan, distance) → Bus (music/sfx/ui: bus mixing + ducking) → Master → Output (platform audio device) ``` Two worlds meet here: **event** (high-level, game-facing) and **dsp** (signal, low-level). The engine must isolate them (a gameplay event is never a mixing decision). ## 2. The DSP Graph & Voice Model ``` Voice = an active playback instance with: source: clip or stream state: playing/paused/stopped effects (per-voice insert chain) routing (to which bus, at what pre-fader level) ``` - **Buses**: music, gameplay/sfx, UI, ambience — each with gain+mute+duck parameters. The mixer sums buses into the master. - Effects are **insert** (on a bus or voice) or **send** (parallel, e.g., global reverb). ## 3. Spatialization (3D Audio) | Technique | Cost | Use | |-----------|------|-----| | Pan + distance (constant power) | trivial | default | | HRTF (head-related) | higher | headphones (console/PC) | | Ambisonics | med | positional ambience | | Reverb-per-position (levels are baked) | reuse | beds, rooms | Spatialize per-voice: azimuth→pan/HRTF, distance→attenuation (per-source falloff curve), elevation tweaks. Occlusion (a wall in between) → low-pass + duck the direct + increase reverb send. ## 4. Streaming & Decode | Need | Approach | |------|----------| | Music / long ambient | **streamed** from disk (pak) in chunks | | One-shots (footstep) | decompressed to RAM once | | Dialogue | streamed + memory pool | - Decompress in **worker threads** (see job-system): `Vorbis/Opus`/platform-native at ~1–2 ms/2 k samples. - Chunk size: 10–80 ms ms read-ahead (latency vs memory); a long stream = a ring buffer double-buffered. - **Latency budget** per voice: < 30 ms added (read-ahead), so sound stays synced. ## 5. Mixing Control & Ducking | System | What it does | |--------|--------------| | Mixing levels | per-bus volume, per-bus priorities | | **Ducking** | lower a sidechain bus (music→sfx) on event | | Voice limiting | cap max polyphony (drop/steal voices) | | Loudness targets | per-bus RMS targets (streaming combat music to 60% when sfx burst) | A classic duck: dialogue events duck music −12 dB (attack 50 ms, release 400 ms). Voice-stealing: a new urgent sound steals the oldest lowest-priority voice (never the player's own voice). ## 6. Effects (Reverb, Delay, EQ) | Effect | Typical | |--------|---------| | Reverb (convolution/FDN) | per-room bus, or send | | Delay/echo | one-shots, taunts | | EQ (high/low-pass) | occlusion filters, "radio" | | Compressor/limiter | master (anti-clip) | | Chorus/flanger | incidental | Reverb = **send** (one FDN per room, many voices route in) — never one reverb per voice per frame. Convolution reverb = author-time bake (impulse responses) not run-time. ## 7. Performance & Voice Budgets | Metric | Budget | |--------|--------| | voices / frame | ≤ 32–256 (by platform) | | DSP CPU | ~2–6% total (often 5%) | | decode threads | 1–2 | | latency (start→sound) | < 30–50 ms | | streaming bytes/s | 10–20 kB/s per stream | For a crowd (hundreds of NPCs): voice-allocate by proximity/prioritization — the "best 24 voices" trick (spatialize the near, composite the far with a single room ambience). ## 8. Determinism (Replay & QA) - The DSP must be **deterministic**: same input → same output (fixed sample rates, fixed filter constants, no nondeterministic effects (random=seeded)). - QA wants byte-identical audio in replay runs to confirm "the gun sound is in" — this keeps sound *testable*. ## 9. The Event→DSP Boundary (API Design) ```cpp game → AudioEvent(audio: "sfx/hit_impact", world, volume, pitch) engine → maps to a Voice + routing decisions (bus, duck context). ``` The game never touches buses/ducks; the audio *designer* owns the bus/duck graph (a .audiograph asset). ## 10. References - `references/dsp-graph.md` — DSP nodes, buses, voice lifecycle, insert/send routing - `references/spatial-audio.md` — pan, distance, HRTF, occlusion, ambisonics, velocity pitch - `references/streaming-and-decode.md` — chunked streams, decode workers, ring buffers, latency budget - `references/mixing-and-ducking.md` — bus levels, ducking curves, voice stealing, loudness targets - `references/effects-and-reverb.md` — reverb (convolution/FDN), delay, EQ, master limiter - `references/performance-and-voice.md` — voice budgets, polyphony allocation, crowd compositing, profiling
Ver no GitHub