Quick answer: Use player.pitch_scale for per-sound pitch. Bus effects (PitchShift on a shared bus) affect everything routed through that bus — route only specific sounds to a dedicated bus.

A slow-motion power-up lowers sound pitch. You add an AudioEffectPitchShift to the Master bus. Now every sound — music, voice, ambient — is pitch-shifted. The effect was supposed to apply only to gameplay SFX.

Bus vs Player Pitch

Two ways to pitch in Godot:

If you apply PitchShift to Master, everything pitches. To pitch only specific sounds, either use per-player scale or create a dedicated bus.

Per-Player Pitch

$SfxPlayer.pitch_scale = 0.7   # lower pitch on this player only
$SfxPlayer.play()

# Music player untouched, plays at normal pitch
$MusicPlayer.play()

Each player has its own pitch_scale. Simple and isolated.

Dedicated Bus for Group Effects

If you want all SFX pitched together:

  1. Audio bus layout → add a “SFX” bus.
  2. Add AudioEffectPitchShift to the SFX bus.
  3. Route gameplay AudioStreamPlayers to the SFX bus (bus property).
  4. Music players stay on Master or a Music bus — unaffected.
# Pitch only SFX bus at runtime
var bus_idx = AudioServer.get_bus_index("SFX")
var effect = AudioServer.get_bus_effect(bus_idx, 0) as AudioEffectPitchShift
effect.pitch_scale = 0.7

Slow-Mo Pattern

For a slow-motion effect:

Verifying

Trigger your slow-mo. Music should play normally; SFX should be slower and pitched down. If everything slows together, your effect is on Master — move it.

“Pitch goes on the bus or the player. Decide which scope; route accordingly.”

Music, Voice, and SFX should always live on separate buses — future effects target the right thing automatically.