Quick answer: Crossfade using an equal-power curve (sqrt of the mix factor) on each track's linear gain so the summed loudness stays constant through the transition.

Halfway through your music transition the sound noticeably drops then comes back. Linear crossfades don't preserve perceived loudness at the midpoint.

How to fix it

1. Use equal-power gains

Set outgoing gain to sqrt(1 - t) and incoming to sqrt(t) in linear amplitude, so the combined power is constant across the fade.

2. Convert to dB last

Compute the curve in linear space, then convert with linear_to_db() before assigning volume_db so the math stays correct.

3. Match the fade duration

Drive both players from the same tween/timer so their curves are mirror images and never both dip together.

Catching the ones you can't reproduce

The hardest version of this to fix is the one you can't reproduce — it only happens on a player's hardware, OS, driver, or save state, under conditions that simply aren't present on your machine. A report that says “it crashed” or “it froze” gives you nothing to act on, so the bug survives release after release while quietly costing you players.

Automatic error capture closes that gap. Each failure arrives with its full stack trace, the device and OS, the build number, and a breadcrumb trail of what the player did right before it broke, so even a failure you have never seen becomes a specific, reproducible issue. Fold identical failures into one signature ranked by how many players each hits, and your worklist sorts itself worst-first instead of arriving as a stream of vague complaints.

This is where a tool like Bugnet earns its place. Its SDK captures every Godot error automatically with the full stack trace plus device, OS, memory, build, and game-state context, folds duplicates into one grouped issue with an occurrence count, and ties each to the build it first appeared on — so you fix the problem that hurts the most players first and confirm it is gone when its signature disappears from the next release.

A crash you can name from its stack trace is a crash you can usually fix in minutes.