Install Godot Audio
Pick your agent. Every command is ready to paste.
npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-audioThe open skills CLI detects your agents (Claude Code, Cursor, Codex and 70+ more) and installs to the right folder. Add -g to install globally.
01
Install it
Run the command above, or upload the folder in Claude.
02
Ask naturally
Describe the task. Your agent loads godot-audio when the request matches its description.
03
Name it if needed
If it does not trigger, say “use the godot-audio skill”. In Codex, type $godot-audio.
The skill itself
SKILL.md
Godot Audio (4.x)
Play SFX and music, route them through buses, control volume in decibels, and time gameplay to the beat. Targets Godot 4.7.
When to use
- Use when playing sound effects or music, routing audio to buses (Master/Music/SFX), adjusting volume/mute from code, adding bus effects (reverb, compressor), positional 3D audio, or syncing events to music.
When not to use: engine-agnostic audio design (adaptive music structure, mixing
philosophy, ducking patterns) → audio-design; importing/encoding assets outside Godot.
Core workflow
- Pick the player node:
AudioStreamPlayer— non-positional (music, UI, global SFX).AudioStreamPlayer2D/AudioStreamPlayer3D— positional; volume/pan from distance.
- Assign an
AudioStreamtostream(.oggfor music/loops,.wavfor short SFX) andplay(). Setautoplayfor music that starts with the scene. - Route to a bus. Set the player's
busto a named bus (e.g."Music","SFX"). Define buses in the Audio panel (bottom dock); each can have volume, mute, solo, and effects. - Control volume in dB, not linear (audio is logarithmic).
0 dB= unchanged,-80 dB≈ silent. Convert withlinear_to_db/db_to_linear, or use the linear helpers (volume_linearon players,AudioServer.set_bus_volume_linear()), which convert for you. - Drive volume/mute from code with
AudioServerby bus index. - For rhythm, compute precise playback time using output latency compensation.
Patterns
1. One-shot SFX (fire-and-forget)
@onready var sfx: AudioStreamPlayer = $Sfx # stream assigned in the editor
func play_jump() -> void:
sfx.pitch_scale = randf_range(0.95, 1.05) # slight variation avoids fatigue
sfx.play()
# For overlapping copies, raise sfx.max_polyphony (default 1), use an
# AudioStreamPolyphonic stream, or spawn short-lived players and free on `finished`.
2. Set a bus's volume and mute via AudioServer
func set_music_volume(linear_0_to_1: float) -> void:
var bus := AudioServer.get_bus_index("Music")
# Convert a 0..1 slider to decibels; clamp avoids -inf at 0.
AudioServer.set_bus_volume_db(bus, linear_to_db(maxf(linear_0_to_1, 0.0001)))
func toggle_sfx(muted: bool) -> void:
AudioServer.set_bus_mute(AudioServer.get_bus_index("SFX"), muted)
3. Crossfade between two music tracks
@onready var a: AudioStreamPlayer = $MusicA
@onready var b: AudioStreamPlayer = $MusicB
func crossfade_to(stream: AudioStream, secs := 1.5) -> void:
b.stream = stream
b.volume_db = -40.0
b.play()
var tw := create_tween().set_parallel(true)
tw.tween_property(a, "volume_db", -40.0, secs) # fade out current
tw.tween_property(b, "volume_db", 0.0, secs) # fade in next
tw.chain().tween_callback(a.stop)
var tmp := a; a = b; b = tmp # swap roles
4. Beat-accurate timing (compensate for output latency)
@onready var music: AudioStreamPlayer = $Music
func get_playback_time() -> float:
# Add time since the last audio mix, subtract output latency, for sub-frame accuracy.
var t := music.get_playback_position() + AudioServer.get_time_since_last_mix()
return t - AudioServer.get_output_latency()
Pitfalls
- Treating volume as linear.
volume_db/set_bus_volume_dbare decibels. Settingvolume_db = 0.5is nearly full volume, not half. Map sliders withlinear_to_db. linear_to_db(0.0)is-inf. It is silent, but tweening or doing math from-infproduces NaN. Clamp the linear value to a small minimum (e.g.0.0001) before converting, or special-case 0 → mute.set_bus_volume_linear(bus, 0.0)stores-inftoo.- Bus name typos fail quietly.
get_bus_index("Muisc")returns-1; calls then error or no-op. Match the exact bus name from the Audio panel. - Short SFX cut off when the same player is retriggered →
max_polyphonydefaults to 1. Raise it (e.g. 4) soplay()overlaps copies, or use anAudioStreamPolyphonic/ separate players freed onfinished. - Music doesn't loop unless the import/stream loop is enabled (
.oggimport has a Loop option;AudioStreamWAVhasloop_mode). - Syncing to
get_playback_position()alone is jittery — it updates per audio mix, not per frame; addget_time_since_last_mix()and subtractget_output_latency(). - 3D audio inaudible → no
AudioListener3D/Camera3Dto hear it, ormax_distance/ attenuation too tight, or wrong bus muted.
References
- For the bus layout (
.tres), adding effects (reverb/compressor/EQ) and side-chain ducking,AudioStreamPolyphonic/AudioStreamInteractive, microphone capture, and procedural audio withAudioStreamGenerator, readreferences/buses-and-effects.md.
Related skills
audio-design— engine-agnostic adaptive music, mixing, and ducking practice.godot-animation— syncing animation/Tween toget_playback_position().godot-ui-control— volume sliders wired toAudioServer.
Tips for Godot Audio
- • Start a fresh session after installing so your agent picks up the new skill.
- • It bundles reference files. The agent reads them only when needed, so they cost no context until then.
- • It is part of a pack with 40 skills. Install only the ones you need with --skill to keep triggers precise.
- • If two skills overlap, mention the one you want by name.
Questions about Godot Audio
What does the Godot Audio skill do?
Play and mix audio in Godot 4.7: AudioStreamPlayer (2D/3D variants), audio buses with volume/mute and effects, music vs SFX routing, db/linear volume, and precise sync-to-beat playback timing. Use when playing sounds or music in a Godot project, routing AudioStreamPlayer nodes to buses, adjusting bus volume via AudioServer, or syncing gameplay to the beat.
How do I install Godot Audio?
Run "npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill godot-audio" in your project. The skills CLI installs it for Claude Code, Cursor, Codex and 70+ other agents. In Claude on the web, upload the skill folder as a ZIP under Customize > Skills.
Does Godot Audio work in Cursor and Codex?
Yes. Godot Audio uses the open SKILL.md format, so it works in Claude Code, Claude, Cursor, OpenAI Codex, Gemini CLI, GitHub Copilot and other agents that support agent skills.
Is Godot Audio free?
Godot Audio is open source on GitHub under the Apache-2.0 license. It is free to install; check the license before commercial use.
Who made Godot Audio?
Godot Audio is published by gamedev-skills in the gamedev-skills/awesome-gamedev-agent-skills repository, together with 39 other skills.

