thedivergentai/godot-audio-systems
Expert patterns for Godot audio including AudioStreamPlayer variants (2D positional, 3D spatial), AudioBus mixing architecture, dynamic effects (reverb, EQ,compression), audio pooling for performance, music transitions (crossfade, bpm-sync), and procedural audio generation. Use for music systems, sound effects, spatial audio, or audio-reactive gameplay. Trigger keywords: AudioStreamPlayer, AudioStreamPlayer2D, AudioStreamPlayer3D, AudioBus, AudioServer, AudioEffect, music_crossfade, audio_pool, positional_audio, reverb, bus_volume.
npx skills add https://github.com/thedivergentai/GD-Agentic-Skills --skill godot-audio-systems
Expert mixing, spatial, pooling, and interactive-music patterns for Godot's audio engine.
set_bus_volume_db() is logarithmic. Use linear_to_db() for sliders OR everything will sound too loud until the last 5%.Inverse Distance, a whisper on the other side of the map will be global volume.0.1 units.DOPPLER_TRACKING_PHYSICS_STEP feels flat and static.Limiter (audio_voice_limiter_manager.gd).queue_free()ing causes frame-time spikes. Use a Pool.Tween to bridge tracks.AudioEffectSpectrumAnalyzer.tap_back_pos removed — migrate analyzers to alternative tap APIs.AudioStreamPlayer default area_mask is now 0 (disabled), not layer 1. If using Area2D/Area3D audio_bus_override, explicitly set area_mask to layer 1 or your bus layer.| Feature | AudioStreamPlayer | AudioStreamPlayer2D | AudioStreamPlayer3D |
|---------|------------------|---------------------|---------------------|
| Spatial | Global | 2D panning | 3D positioning |
| Doppler | No | No | Yes |
| Attenuation | No | Distance-based | 3D falloff |
| Reverb send | No | No | Yes |
| Use for | Music, UI, VO | 2D games | 3D games |
| Performance | Fastest | Medium | Slowest |
> MANDATORY — open only the script that matches the row. Do not reinvent pools, duckers, or interactive graphs from memory.
>
> Do NOT Load every script below for one mix task.
| Need | Script |
|------|--------|
| One-shot SFX spam / voice steal | MANDATORY audio_voice_pool_manager.gd |
| Cap identical SFX (ear-bleed) | MANDATORY audio_voice_limiter_manager.gd |
| Dialogue over music | MANDATORY audio_bus_ducker_logic.gd |
| Bus layout / runtime mute | audio_bus_manager.gd |
| Linear UI slider → dB | audio_linear_volume_interpolator.gd |
| Wall muffling | MANDATORY audio_occlusion_raycast.gd |
| Room reverb zones | audio_environmental_reverb_zone.gd |
| Vertical intensity stems | MANDATORY audio_interactive_music_manager.gd |
| Horizontal clip graph | interactive_music_graph.gd + references/interactive-music-deep-dive.md |
| Bus / pool WHY | references/audio-pooling-and-buses.md |
| Crossfade / BPM / duck | references/music-transitions.md |
| Adaptive music player wrapper | audio_adaptive_music_player.gd |
| Autoload SFX entry | audio_manager.gd |
| Footstep surface banks | audio_footstep_surface_selector.gd |
| Procedural hum / engine | audio_procedural_generator_synth.gd |
| Spectrum → gameplay / VFX | audio_reactive_visualizer_component.gd, audio_visualizer.gd |
| Dialogue subtitle sync | subtitle_sync_system.gd |
Priority voice pool with steal of lowest-priority oldest voice (hero voices protected).
Concurrency cap for identical SFX instances.
Sidechain-style dialogue-over-music ducking.
Runtime bus volume/mute helpers for Music/SFX/UI/Voice groups.
Autoload entry for play-one-shot routing onto the pool.
Musically-correct linear↔dB UI slider mapping.
Raycast muffling via attenuation filter cutoff.
Area3D-driven reverb/bus override zones.
AudioStreamSynchronized vertical stem intensity.
AudioStreamInteractive horizontal clip graph.
Adaptive music player wrapper for intensity-driven stems.
Physics-driven surface → sound-bank selection.
Realtime procedural tones for hums/engines/signals.
FFT spectrum → gameplay/visual driver.
Spectrum analyzer visualization helper.
Playback-position-accurate subtitle sync (latency-compensated).
Spawning AudioStreamPlayer.new() per footstep at 60 FPS ≈ 3600 nodes/minute and frame spikes. MANDATORY audio_voice_pool_manager.gd. Cap duplicate SFX with audio_voice_limiter_manager.gd — 50 same-frame explosions clip the mix.
Deep dive → audio-pooling-and-buses.md.
Master = final limiter only. Gameplay → Music / SFX / UI / Voice. set_bus_volume_db(0.5) is wrong — use linear_to_db() for sliders.
Never hard-cut tracks — 0.5–2.0s Tween crossfade or BPM-aligned handoff. Vertical/horizontal adaptive scores → interactive-music-deep-dive.md, music-transitions.md.
Ray source→listener; blocked → Tween attenuation_filter_cutoff_hz down — audio_occlusion_raycast.gd.
pos = get_playback_position() + AudioServer.get_time_since_last_mix() - AudioServer.get_output_latency() — subtitle_sync_system.gd.
> Progressive disclosure: open Official Documentation links only when researching a specific API; load Related Skills when routing to a peer domain — do not preload the whole lattice.
get_time_since_last_mix, latency) for BPM and subtitle sync.set_sync_stream_volume) for vertical intensity mixes.PhysicsRayQueryParameters3D masks from source to listener.linear_to_db) wired to bus indices, not raw slider values.Take thedivergentai/godot-audio-systems from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.