
Mixing · 2 November 2026 · 7 min
Mix leans to one side? Check the balance band by band
If your mix feels like it leans to one side but the meters look nearly even, measure left against right in separate frequency bands. The lean usually lives in the top end, where hi-hats, shakers and bright guitars are often all panned the same way. Fix it by re-panning or counterweighting those parts, not with the master balance knob, which shifts the whole mix, kick and 808 included, to cover a problem that’s only in the highs.
You’re listening back on headphones and something feels off. The vocal’s in the middle, the 808 is in the middle, but the whole song seems to pull a little to the left. You check the meters and the two channels are close, maybe a dB or two apart. So is it the mix, the headphones, or your ears?
It can be any of the three, and it’s worth ruling out the last two first. Swap the headphones around, so left goes on your right ear. If the lean moves with the headphones, it’s the headphones or your hearing. If it stays on the same side of the song, it’s the mix. On speakers, move your chair first, because the room can tilt things too, as in your low end changing when you move your chair.
Why the meter looks fine
A level meter adds up the whole spectrum, and most of a mix’s energy sits in the low end and the low mids. The kick, the 808, the bass and the body of the vocal are almost always in the center, so they put the same level in both channels and drag the reading toward even. A bright part panned left can be far louder on one side up top and barely move the overall number.
Your ears don’t work that way. You place sounds by the highs a lot more than the lows, so a hat or a shaker that’s all on one side pulls the whole picture over, even when the meter says the channels are close.
To show it, we wrote balance_check.py. It builds a synthetic mix with a kick and 808 and a vocal-range part in the center, hi-hats panned 70% left, a bright rhythm guitar 60% left, and a darker pad 50% right. Then it prints left minus right, overall and in each octave band. Positive numbers mean the left is louder.
#!/usr/bin/env python3
"""Does the mix lean to one side? Left-minus-right level, overall and per octave band.
python3 balance_check.py [hat_pan]
Synthetic 8 s mix, constant-power pan law (-3 dB centre): kick + 808 and a vocal-range tone in the
centre, hi-hats and a bright rhythm guitar on the left, a darker pad on the right. Pan runs -1 (hard left)
to +1 (hard right). Overall level is BS.1770 K-weighted per channel; bands are octave-wide (63 Hz..8 kHz).
Positive numbers = louder on the left."""
import sys, numpy as np
from scipy.signal import lfilter, butter, sosfilt
SR = 48000; N = SR * 8; t = np.arange(N) / SR; rng = np.random.default_rng(7)
def bp(x, lo, hi): return sosfilt(butter(2, [lo, hi], "bandpass", fs=SR, output="sos"), x)
def pan(x, p): # constant power
a = (p + 1) * np.pi / 4; return np.cos(a) * x, np.sin(a) * x
def kw(x):
y = lfilter([1.53512485958697, -2.69169618940638, 1.19839281085285], [1, -1.69065929318241, 0.73248077421585], x)
return lfilter([1, -2, 1], [1, -1.99004745483398, 0.99007225036621], y)
db = lambda x: 10 * np.log10(np.mean(x ** 2) + 1e-20)
def parts():
k = np.arange(int(.35 * SR)) / SR; low = np.zeros(N)
for s in range(0, N - len(k), SR // 2):
low[s:s + len(k)] += np.sin(2 * np.pi * (48 + 90 * np.exp(-k / .02)) * k) * np.exp(-k / .2)
low += 0.5 * np.sin(2 * np.pi * 49 * t) * (0.6 + 0.4 * np.sin(2 * np.pi * 0.5 * t)) # 808 sustain
f0 = 220 * 2 ** (np.round(2 * np.sin(2 * np.pi * .25 * t)) / 12); ph = 2 * np.pi * np.cumsum(f0) / SR
voc = bp(sum(np.sin(k * ph) / k for k in range(1, 30)), 150, 5000) * 0.6
hats = bp(rng.standard_normal(N), 6000, 16000) * (np.sin(2 * np.pi * 8 * t) > 0.3) * 0.5
gtr = bp(sum(np.sin(2 * np.pi * h * 196 * t) / h for h in range(1, 30)), 800, 6000) * (np.sin(2 * np.pi * 2 * t) > 0) * 0.5
pad = bp(rng.standard_normal(N), 200, 900) * 0.5
return low, voc, hats, gtr, pad
def mix(hat_pan, gtr_pan=-0.6, pad_pan=0.5, shaker=False):
low, voc, hats, gtr, pad = parts(); L = np.zeros(N); R = np.zeros(N)
for x, p in ((low, 0), (voc, 0), (hats, hat_pan), (gtr, gtr_pan), (pad, pad_pan)):
l, r = pan(x, p); L += l; R += r
if shaker:
sh = bp(np.random.default_rng(3).standard_normal(N), 5000, 14000) * (np.sin(2 * np.pi * 8 * t + 1.5) > 0.3) * 0.35
l, r = pan(sh, 0.6); L += l; R += r
return L, R
def report(name, L, R):
bands = [63 * 2 ** i for i in range(8)]
d = [db(bp(L, fc / 2 ** .5, min(fc * 2 ** .5, 23000))) - db(bp(R, fc / 2 ** .5, min(fc * 2 ** .5, 23000))) for fc in bands]
print(f"{name:<34}{db(kw(L)) - db(kw(R)):+6.1f} " + " ".join(f"{v:+5.1f}" for v in d))
def main():
hp = float(sys.argv[1]) if len(sys.argv) > 1 else -0.7
print("Left minus right, dB (positive = leans left)")
print(f"{'':<34}{'overall':>7} " + " ".join(f"{n:>5}" for n in ("63", "125", "250", "500", "1k", "2k", "4k", "8k")))
L, R = mix(hp); report(f"As mixed (hats at {hp:+g})", L, R)
g = 10 ** ((db(kw(L)) - db(kw(R))) / 20); report("Master balance knob (R matched)", L, R * g)
report("Hats moved to -0.3", *mix(-0.3))
report("Hats -0.3 + shaker at +0.6", *mix(-0.3, shaker=True))
report("Hats -0.3, shaker +0.6, gtr -0.4", *mix(-0.3, gtr_pan=-0.4, shaker=True))
if __name__ == "__main__": main()
$ python3 balance_check.py
Left minus right, dB (positive = leans left)
overall 63 125 250 500 1k 2k 4k 8k
As mixed (hats at -0.7) +2.0 +0.0 +0.0 -0.0 -0.2 +0.7 +1.6 +3.5 +11.5
Master balance knob (R matched) +0.0 -2.0 -2.0 -2.1 -2.2 -1.3 -0.5 +1.5 +9.5
Hats moved to -0.3 +1.1 -0.0 -0.0 -0.0 -0.2 +0.7 +1.6 +2.4 +4.2
Hats -0.3 + shaker at +0.6 +0.4 +0.0 -0.0 -0.0 -0.2 +0.7 +1.5 +0.7 +0.2
Hats -0.3, shaker +0.6, gtr -0.4 +0.3 +0.0 -0.0 -0.1 -0.2 +0.4 +1.0 +0.3 +0.2
Reading the table
As mixed, the whole song is 2.0 dB louder on the left. But look where that comes from. From 63 to 500 Hz it’s even, within 0.2 dB. At 2 kHz the left is up 1.6 dB, at 4 kHz 3.5 dB, and at 8 kHz it’s 11.5 dB louder. The lean is almost all hats and guitar.
The master balance knob is the tempting fix. Turn the right side up 2 dB and the overall reading goes to 0.0. But now the bottom of the mix leans right by 2.0 dB from 63 to 250 Hz, 2.2 dB at 500 Hz, and the 8 kHz band still leans left by 9.5 dB. You moved the kick, 808 and vocal off center to hide a problem that only lived in the highs. That’s worse than where you started.
Moving the hats from 70% to 30% left halves the overall lean to 1.1 dB and takes the 8 kHz band from 11.5 down to 4.2 dB. Adding a shaker 60% right as a counterweight brings 8 kHz to 0.2 dB and the whole mix to 0.4. Pulling the guitar in to 40% left finishes it: 0.3 dB overall, and no band more than 1.0 dB off.
These are synthetic parts, so take the exact numbers as a model. On a real song the problem band might be 3 kHz or 10 kHz. The idea holds: balance is a per-band question, and the fix goes on the parts that cause it.
How to check your own mix
- Rule out your gear first. Swap the headphones, or on speakers move a little and listen again. If the lean moves with you, it isn’t the mix.
- Look at the highs on their own. Put an analyzer that can show left and right separately on the master, or high-pass the master at around 3 kHz just for listening. Bright parts are where a lean hides.
- Make a list of what’s panned where. It’s common to have hats, shaker, ride, guitar and a vocal ad-lib all drifting the same way because each one felt right on its own.
- Counterweight instead of centering. You don’t need everything in the middle. Pair the hat with something of similar brightness on the other side: a shaker, a second guitar, a tambourine, a delay throw. Wide mixes still need to hold up in mono, which wide mixes fail in mono covers.
- Leave the low end in the center. If anything below about 150 Hz is off center, fix that first. A lopsided 808 shifts the whole mix and eats headroom on one channel.
Genre habits that cause this
In hip-hop and trap, it’s usually the hats and the percussion loop, panned to one side to make room for the vocal. In rock and indie, it’s often one rhythm guitar with no partner, or a ride cymbal miked close on one side. In house and techno, an off-beat open hat or a top loop on one side does it. Live recordings lean when the drummer’s kit is panned from the audience view on some tracks and the drummer’s view on others.
Panning also changes level in ways that are easy to miss. A part panned hard sits a few dB differently than it does in the center depending on the pan law, which pan law explains.
When you only have the stereo file
If you’re mastering a song someone else mixed, you can’t re-pan the hats. You can still find out what’s leaning, though. Split the bounce into drums, bass, vocals and other with StemSplit and check each stem left against right. That tells you whether the lean is the drums or a guitar, and you can send a specific note back to the mixer instead of reaching for the balance knob. That’s the kind of thing stems are good for, the same idea as in stems diagnose mixes, they don’t replace them.
- Why does my mix sound like it leans to one side?
- Usually because bright parts like hi-hats, shakers and guitars are panned the same way. In our test the overall difference was 2.0 dB, but the 8 kHz band was 11.5 dB louder on the left.
- Should I use the balance knob on the master to fix a lopsided mix?
- No. It moves everything, including the kick and 808. In our test it zeroed the overall reading but pushed the low end 2.0 dB to the right and left the 8 kHz band 9.5 dB off.
- How do I fix a mix that leans left?
- Re-pan or counterweight the bright parts. Moving the hats from 70% to 30% left and adding a shaker at 60% right brought our test mix from 2.0 dB to 0.4 dB overall.
- Is it my headphones or my mix?
- Swap the headphones around. If the lean moves with them, it’s the headphones or your ears. If it stays on the same side of the song, it’s the mix.