import numpy as np
from scipy.signal import butter, filtfilt
def equalize(audio, gains_db, fs):
# gains_db = [low_gain_db, mid_gain_db, high_gain_db], e.g., [3, -2, 0]
gains = 10 ** (np.array(gains_db) / 20.0)
# Low band: lowpass 250 Hz
b_low, a_low = butter(5, 250 / (fs / 2), btype='low')
low_sig = filtfilt(b_low, a_low, audio) * gains[0]
# Mid band: bandpass 250-4000 Hz
b_mid, a_mid = butter(5, [250 / (fs / 2), 4000 / (fs / 2)], btype='band')
mid_sig = filtfilt(b_mid, a_mid, audio) * gains[1]
# High band: highpass 4000 Hz
b_high, a_high = butter(5, 4000 / (fs / 2), btype='high')
high_sig = filtfilt(b_high, a_high, audio) * gains[2]
equalized_audio = low_sig + mid_sig + high_sig
return equalized_audioThis code splits audio into low (0-250 Hz), mid (250-4000 Hz), and high (4000+ Hz) bands using Butterworth filters, applies gains in dB converted to linear scale, and sums them for equalization.