DEV505 / START HERE
Find out why the sound is missing.
A practical path from play results to clips, graph flow, 3D direction, parameters, and cleanup.
Start with the result of the play request. If it was refused, fix that reason first. If it was accepted, check what the running graph and voices are doing.
There is no manager or the key is unknown
Section titled “There is no manager or the key is unknown”For NoManager, make sure the scene has an enabled Sound Manager and your code runs after it becomes active. For NotRegistered, make sure the event or its library is assigned to that manager. A generated Sounds name helps you spell a key; it does not register the asset by itself.
Check duplicate key diagnostics. The first asset keeps a key, so a conflicting second event can be registered without a usable key. See manager, library, and key setup.
It says Accepted but I hear nothing
Section titled “It says Accepted but I hear nothing”- Check whether the result was Queued, whether clips are still loading, and whether the service is being updated.
- Check for an enabled AudioListener, the Editor’s audio mute, application output volume, and a muted mixer group.
- Check the event’s Volume, the Play Audio volume input, and any parameter or fade driving them.
- Follow execution from On Start. A clip wire chooses audio but does not send a Play command. A gate or Delay may intentionally keep the graph silent.
- Check missing Wave Assets, Asset Parameter defaults, and every declared allowed clip. A missing unused branch can still prevent preparation for this event.
- Check voice capacity and node trace diagnostics. A branch can fail to allocate a voice while the play itself stays alive.
- For a 3D event, temporarily inspect source/listener distance and rolloff. A distant source can be playing correctly but be too quiet to hear.
Do not repeatedly start another loop to make the first one audible. Retain one accepted handle and diagnose it. Voice counts and node states can distinguish waiting from playback.
The sound comes from the wrong direction
Section titled “The sound comes from the wrong direction”Position is not enough: the event must have a nonzero Spatial Blend for spatial behavior. .At(position) is a fixed snapshot. .Following(transform) uses a moving Transform; the backend refreshes its position during updates. Ownership and follow position are separate choices.
Check the AudioListener’s actual position and orientation. In Bee, the listener represents the player at the island center; do not assume an angled overview camera should also be the listener. Use the Bee scene and position and ownership to compare the setup.
The first step or branch uses the wrong parameter
Section titled “The first step or branch uses the wrong parameter”A play may execute On Start inside the Play call. Setting Surface, Tool, or another startup value after Play can be too late. Put starting values in SoundPlayContext.With(...), then pass that context to Play.
Use the right type and generated ID, check the allowed range, and remember that graph indexes usually start at 0. Live Float updates with positive rates take time; read Current and Target separately. See parameters and the surface mapping example.
The handle looks valid but commands fail
Section titled “The handle looks valid but commands fail”IsValid checks the handle’s shape, not whether its play still exists. Use IsAlive on the service that created it. Finished/cancelled plays, old Play Mode sessions, and replaced managers leave stale handles.
A handle from an independent service must be controlled through that service. SoundBus and handle extensions address the active scene service. Also check the signal name, parameter type, and fade: NoTarget can mean a command was not eligible, not just an unknown handle.
A new music clip is refused or does not switch
Section titled “A new music clip is refused or does not switch”Add the exact clip to the Asset Parameter’s Allowed Clips and provide a valid default. A scene reference to another clip is not enough. Accepted asset changes affect the next Play Audio start, not a voice already playing.
To hear a smooth transition, start the other voice with the new clip and overlap the two volume ramps. Jukebox’s crossfade includes this wiring and the gameplay code. Volume crossfading does not automatically align tempo, beats, or musical phrases.
Too many sounds are refused
Section titled “Too many sounds are refused”Distinguish Cooldown, ConcurrencyLimit, and CapacityExceeded before changing settings. Instance capacity, startup queue capacity, event maxInstances, and backend voice capacity are separate limits. One graph can use several voices, and fading voices still occupy capacity.
Increasing the event’s instance limit does not create AudioSources. Repeated retries can make contention worse. The Arcade request example reports refusals without a retry storm. The complete status table explains later queued failures too.
A sound stops too soon—or never stops
Section titled “A sound stops too soon—or never stops”Check event Length, owner-loss policy, and whether the followed object was destroyed. For unwanted persistence, inspect Loop, Keep Alive, armed Repeat/Idle Loop/Track Condition, and pending waits. An On Signal entry does not keep a silent event alive by itself.
Call Stop or StopOwned while the owner is still available when you want a graceful release. Under Detach, owner loss can deliberately leave sound playing at its last position. Release unbound owner tokens yourself. Keep ticking during fades and release clips; immediate service disposal cuts them.
Compare Portals’ Stop and Detach behavior and cleanup and pause.
My completion callback never fires
Section titled “My completion callback never fires”Check which notification you are waiting for. End Event and normal stops produce Cancelled, not Finished. Use IsTerminal for cleanup that should happen on any ending. If you need natural completion to trigger the next action, remove unintended loops/Keep Alive and use a graph designed to finish naturally.
Play Audio Stopped is also not “the fade finished.” It fires immediately after a stop command. Review outcome examples before changing the callback.
The graph preview is different, or FPS drops while debugging
Section titled “The graph preview is different, or FPS drops while debugging”Save/import your edits and start a fresh scene play. Existing plays retain their old revision; an unsaved editor preview may be different. Check the graph’s import diagnostic before debugging gameplay code.
Turn off Show counters, live graph inspection, and tracing when measuring normal performance. These debug tools perform extra runtime and UI work and may reduce FPS. See graph validation and debugging for the exact distinctions and limits.