Skip to main content
Glama

Audio

audio

Set up Godot sound buses with effects, add AudioStreamPlayer nodes, inspect stream/import info, configure looping, and generate placeholder .wav sound effects for prototypes.

Instructions

Sound and music: audio buses with effects (saved to the project's default_bus_layout.tres, undoable), AudioStreamPlayer nodes, stream/import info, looping via import settings, and instant procedural placeholder sound effects (jump, coin, laser, explosion...) generated as .wav files so prototypes have sound without any assets.

Actions:

  • buses: {} list buses: volume, send target, mute/solo, effects with their changed properties.

  • add_bus: {name, send?='Master', volume_db? | volume? (linear 0..1), mute?, solo?, bypass_effects?, index?, effects?: ['reverb', {type: 'lowpass', cutoff_hz: 2000}, {type: 'compressor', props: {threshold: -12}}]} add a bus. Effect types: reverb, delay, compressor, limiter, eq/eq6/eq21, chorus, distortion, phaser, lowpass, highpass, bandpass, notch, lowshelf, highshelf, amplify, panner, pitch_shift, stereo_enhance, spectrum_analyzer, record, capture.

  • set_bus: {name, rename?, send?, volume_db?|volume?, mute?, solo?, bypass_effects?, effects? (replace all), add_effects?, remove_effects?: [index | type], effect_props?: {index|type: {prop: value}}} edit a bus (Master included, except send). Effect props accept aliases: cutoff -> cutoff_hz, mix -> wet (reverb), gain -> volume_db (amplify). Undoable.

  • remove_bus: {name} remove a bus; buses that sent to it are rerouted to Master.

  • player: {stream: res://x.wav|ogg|mp3 (or inline AudioStream), parent?='.', name?, type?: 1d|2d|3d, bus?='Master', autoplay?, volume_db?, pitch_scale?, loop?, max_distance?, props?} add an AudioStreamPlayer(2D/3D). type defaults to 1d (music/UI) at the scene root or for music, 2d/3d under a Node2D/Node3D entity. loop=true edits the file's import settings (wav/ogg/mp3) so it loops everywhere.

  • stream_info: {path} length, format, mix rate, stereo, loop settings, BPM and import parameters of an audio file.

  • import_loop: {path, loop, loop_offset? (ogg/mp3, seconds), loop_begin?/loop_end? (wav, frames), mode?: forward|pingpong|backward (wav)} set looping in the .import file and reimport.

  • generate_tone: {path: res://sfx/jump.wav, preset?: beep|blip|click|select|jump|coin|pickup|powerup|laser|shoot|hit|hurt|explosion|death|step|error, variation?: 0..1 (+seed) for random variants, wave?: square|sine|saw|triangle|noise (numbers only for the rest), freq?, freq_end? (exponential slide), duration?, attack?, decay?, duty?, volume?=0.6, vibrato_rate?, vibrato_depth?, arp_mult?, arp_time?, noise_mix?, lowpass?, lowpass_end?, loop?, overwrite?=true} synthesize a placeholder sound effect (sfxr-style, 16-bit mono 44.1 kHz) and import it. Preset values can be overridden individually.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
busNoBus the player outputs to.
dutyNogenerate_tone: square wave duty cycle 0.05..0.95.
freqNoStart frequency in Hz.
loopNoLoop the audio (import setting for wav/ogg/mp3).
modeNoWAV loop mode: forward, pingpong, backward.
muteNoMute the bus.
nameNoBus name, or player node name.
pathNores:// audio file path (stream_info, import_loop, generate_tone output).
seedNoRandom seed for noise/variation.
sendNoBus this bus sends its output to (default Master).
soloNoSolo the bus.
typeNoPlayer type: 1d (non-positional), 2d, 3d.
waveNogenerate_tone waveform.
decayNogenerate_tone: fade-out seconds at the end.
indexNoBus position (1 = right after Master).
propsNoProperty map. Values are coerced to the property type: numbers, [x,y], 'Vector2(1,2)', '#ff8800', 'res://file', {"type":"RectangleShape2D","size":[32,32]} for new resources, enum names as strings.
sceneNores:// scene to operate on; opened in the editor if needed. Defaults to the currently edited scene.
actionYesWhat to do. See the tool description for each action's parameters.
attackNogenerate_tone: fade-in seconds.
parentNoParent node path for the player (default '.').
presetNogenerate_tone preset name.
renameNoNew bus name.
streamNores:// audio file, or an inline AudioStream spec {type: ...}.
volumeNoLinear volume 0..1 (alternative to volume_db).
effectsNoEffects: names or {type, props?, enabled?, ...props}.
lowpassNogenerate_tone: low-pass cutoff in Hz at the start.
arp_multNogenerate_tone: pitch multiplier applied after arp_time (coin-style jump).
arp_timeNogenerate_tone: seconds before the arp_mult pitch jump.
autoplayNoStart playing when the scene starts.
durationNoLength in seconds.
freq_endNoEnd frequency in Hz.
loop_endNoimport_loop (wav): loop end in frames (-1 = end).
mix_rateNogenerate_tone: sample rate (default 44100).
noise_mixNogenerate_tone: 0..1 blend of noise into the tone.
overwriteNogenerate_tone: replace an existing file (default true).
variationNo0..1 randomisation of the preset (use different seeds for variants).
volume_dbNoVolume in dB (0 = unchanged, -6 = half as loud).
loop_beginNoimport_loop (wav): loop start in frames.
add_effectsNoEffects to append.
loop_offsetNoSeconds to jump back to when looping (ogg/mp3).
lowpass_endNogenerate_tone: low-pass cutoff in Hz at the end.
pitch_scaleNoPitch multiplier.
effect_propsNo{effect index or type: {prop: value}} to edit existing effects.
max_distanceNoPositional players: distance at which the sound becomes inaudible.
vibrato_rateNogenerate_tone: vibrato speed in Hz.
vibrato_depthNogenerate_tone: vibrato depth (fraction of the pitch, e.g. 0.05).
bypass_effectsNoBypass the bus effects.
remove_effectsNoEffect indices or type names to remove.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (readOnly=false, destructive=false, openWorld=false), while the description adds substantial extra behavior: bus edits are saved to default_bus_layout.tres and are undoable, remove_bus reroutes senders to Master, loop=true modifies import settings so it loops everywhere, overwrite defaults to true, and Master cannot be re-sent. This is rich disclosure beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The one-paragraph overview is front-loaded, and the action list is organized per-action with parameters inline, which is efficient for an 8-action tool. It is dense and long, but nearly every clause carries actionable detail rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 actions, 48 parameters, nested objects, and no output schema, the description covers every action's inputs and side effects (undo, file writes, import reimports) so an agent can invoke each correctly. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema baseline is 3, but the description adds real value the schema lacks: the full effect-type list (reverb, delay, lowpass, ...), property aliases (cutoff->cutoff_hz, mix->wet, gain->volume_db), and preset-override semantics ('Preset values can be overridden individually'). These go beyond per-parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb+resource scope (audio buses, players, stream info, looping, procedural SFX) and names concrete artifacts like default_bus_layout.tres and .wav output. It is clearly distinguishable from sibling tools such as animation, shader, and particles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Each action is documented with its parameters and usage context, e.g. generate_tone is motivated ('so prototypes have sound without any assets') and player type selection is explained ('1d at scene root for music, 2d/3d under a Node2D/Node3D entity'). It does not, however, explicitly name external alternatives or state when NOT to use a given action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.