Quick answer: Use audio_play_sound_ext with the bus parameter, or set Default Audio Bus on the sound asset itself. Sounds without an assigned bus skip the effects chain entirely.
An underwater area should apply a low-pass filter to all sound effects. You created an AudioBus with a LowPass effect; routed master through it. Sounds play but unfiltered. The bus exists; the effect is configured; the routing doesn’t reach the sounds.
How Buses and Sounds Connect
An AudioBus is a routing destination. Sounds choose their bus either:
- Per-play via
audio_play_sound_ext(sound, priority, loop, gain, offset, pitch, listener_mask, audio_bus). - Per-asset via the sound’s Default Audio Bus property in the IDE.
Without one of these, the sound routes directly to the master output, bypassing your filter bus.
Fix 1: audio_play_sound_ext
var snd = audio_play_sound_ext(
snd_splash,
1, // priority
false, // loop
1.0, // gain
0, // offset
1.0, // pitch
0, // listener mask
audio_bus_lowpass // bus reference
);
The sound now routes through audio_bus_lowpass and inherits its effects.
Fix 2: Per-Asset Default Bus
Open the sound asset in the IDE. Find the Audio Bus property. Set to audio_bus_lowpass. Save. Now plain audio_play_sound calls on this sound also route through the bus — no per-call argument needed.
Switching Bus at Runtime
/// On entering underwater area
for (var i = 0; i < array_length(active_sfx_emitters); i++) {
var e = active_sfx_emitters[i];
audio_emitter_bus(e, audio_bus_underwater);
}
For currently-playing sounds, re-route via the emitter API. New plays use the default bus (or the per-play argument).
Verify the Effect Chain
Open the AudioBus asset. Inspector shows the effect chain. Each effect has parameters — LowPass with cutoff at 22000 Hz (sample rate ceiling) is effectively bypassed. Set cutoff to 800 Hz for a noticeable muffled effect.
Diagnose with audio_bus_get_emitters
var emitters = audio_bus_get_emitters(audio_bus_lowpass);
show_debug_message("Active emitters on lowpass: " + string(array_length(emitters)));
Run during play. Empty array = no sounds routed = the bus isn’t being used. Confirms the routing layer is broken, not the effect parameters.
Verifying
Play a sound while underwater. With the bus routing fixed and the LowPass at low cutoff, the sound should be muffled. Switch to a normal area; subsequent plays route through the dry bus and sound clear.
“Effects live on buses. Sounds need to opt into the bus. Without opting in, they bypass and you hear nothing applied.”
Set Default Audio Bus on sound assets where the bus is permanent — saves per-call arguments at every play site.