Overview
Discord Player features a professional 15-band equalizer running at 48kHz sampling rate. The equalizer provides precise control over audio frequencies and includes 18 built-in presets for common audio profiles.
Technical Specifications
Band Count 15 frequency bands
Presets 18 professional presets
Processing Real-time PCM transformation
Equalizer Bands
The 15-band equalizer divides the audio spectrum into distinct frequency ranges:
interface EqualizerBand {
band : number ; // Band index (0-14)
gain : number ; // Gain multiplier
}
Band Configuration
const bands : EqualizerBand [] = [
{ band: 0 , gain: 0.25 }, // 25 Hz
{ band: 1 , gain: 0.40 }, // 40 Hz
{ band: 2 , gain: 0.63 }, // 63 Hz
{ band: 3 , gain: 0.10 }, // 100 Hz
{ band: 4 , gain: 0.16 }, // 160 Hz
{ band: 5 , gain: 0.25 }, // 250 Hz
{ band: 6 , gain: 0.40 }, // 400 Hz
{ band: 7 , gain: 0.63 }, // 630 Hz
{ band: 8 , gain: 0.10 }, // 1 kHz
{ band: 9 , gain: 0.16 }, // 1.6 kHz
{ band: 10 , gain: 0.25 }, // 2.5 kHz
{ band: 11 , gain: 0.40 }, // 4 kHz
{ band: 12 , gain: 0.63 }, // 6.3 kHz
{ band: 13 , gain: 0.10 }, // 10 kHz
{ band: 14 , gain: 0.16 } // 16 kHz
];
await queue . filters . equalizer ?. setEQ ( bands );
Built-in Presets
Discord Player includes 18 professionally tuned equalizer presets:
Music Genres
import { EqualizerConfigurationPreset } from 'discord-player' ;
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . Rock
);
Profile: Enhanced bass and treble with reduced mids
Heavy low-end punch
Clear high frequencies
Reduced mid-range for clarity
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . Pop
);
Profile: Balanced with enhanced vocals
Moderate bass boost
Enhanced mid-range for vocals
Smooth high-end
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . Classical
);
Profile: Natural, reduced highs
Flat low frequencies
Reduced upper-mids and treble
Preserve acoustic instrument balance
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . Dance
);
Profile: Heavy bass, enhanced highs
Strong bass presence
Reduced mid-range
Enhanced kick drum and hi-hats
Bass Presets
Full Bass EqualizerConfigurationPreset . FullBass
Maximum bass with reduced treble
Full Bass + Treble EqualizerConfigurationPreset . FullBassTreble
Enhanced bass and treble, V-shaped curve
Listening Environments
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . Headphones
);
Optimized for headphone listening with enhanced spatial characteristics.
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . LargeHall
);
Simulates large hall acoustics with enhanced reverb-friendly frequencies.
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . Live
);
Live performance sound with enhanced presence.
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . Party
);
Exciting bass and treble boost for energetic listening.
Specialty Presets
Techno
Reggae
Ska
Soft
Soft Rock
Club
Full Treble
Flat
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . Techno
);
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . Reggae
);
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . Ska
);
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . Soft
);
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . SoftRock
);
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . Club
);
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . FullTreble
);
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . Flat
);
No equalization - neutral sound
Usage Examples
Apply Preset
import { EqualizerConfigurationPreset } from 'discord-player' ;
// Apply rock preset
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . Rock
);
Custom Equalizer
// Create custom EQ curve
const customEQ : EqualizerBand [] = Array . from (
{ length: 15 },
( _ , i ) => ({
band: i ,
gain: i < 5 ? 0.8 : 0.2 // Boost bass, reduce treble
})
);
await queue . filters . equalizer ?. setEQ ( customEQ );
Get Current EQ
const currentEQ = queue . filters . equalizer ?. getEQ ();
console . log ( currentEQ );
// [
// { band: 0, gain: 0.25 },
// { band: 1, gain: 0.40 },
// ...
// ]
Get Band Multipliers
const multipliers = queue . filters . equalizer ?. bandMultipliers ;
console . log ( multipliers ); // [0.25, 0.40, 0.63, ...]
Disable Equalizer
You can disable the equalizer at queue creation:
const queue = player . queues . create ( guild , {
disableEqualizer: true // Disable 15-band EQ
});
Advanced Configuration
Helper Function for Presets
The preset system uses a helper function to convert gain values:
const makeBands = ( arr : number []) => {
return Array . from (
{ length: 15 }, // 15 bands
( _ , i ) => ({
band: i ,
gain: arr [ i ] ? arr [ i ] / 30 : 0 // Normalize gain
})
);
};
// Example: Create bass-heavy preset
const heavyBass = makeBands ([
12.0 , 10.0 , 8.0 , 6.0 , 4.0 , // High bass
2.0 , 0 , 0 , 0 , 0 , // Neutral mids
0 , 0 , 0 , 0 , 0 // Neutral highs
]);
Access Presets Object
// All presets are available on the filters object
const presets = queue . filters . equalizerPresets ;
// Access any preset
const rockPreset = presets . Rock ;
const popPreset = presets . Pop ;
const flatPreset = presets . Flat ;
Integration with Other Filters
Combine with FFmpeg Filters
// Apply EQ preset
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . Rock
);
// Add FFmpeg filters on top
await queue . filters . ffmpeg . setFilters ([ 'bassboost' , 'normalizer' ]);
Use with Volume Control
// Set EQ
await queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset . FullBass
);
// Adjust volume to compensate
queue . node . setVolume ( 80 );
Real-time Updates
// EQ changes are applied in real-time without interruption
const eqPresets = [
'Rock' , 'Pop' , 'Dance' , 'Classical'
] as const ;
let currentIndex = 0 ;
setInterval (() => {
const presetName = eqPresets [ currentIndex ];
queue . filters . equalizer ?. setEQ (
EqualizerConfigurationPreset [ presetName ]
);
currentIndex = ( currentIndex + 1 ) % eqPresets . length ;
}, 10000 ); // Change preset every 10 seconds
Events
queue . on ( 'eqBands' , ( filters ) => {
console . log ( 'Equalizer bands updated:' , filters );
});
Graph Representation
Get equalizer state for visualization:
const graph = queue . filters . graph . dump ();
console . log ( 'Equalizer:' , graph . equalizer );
// [
// { band: 0, gain: 0.267 },
// { band: 1, gain: 0.160 },
// ...
// ]
Best Practices
Performance
Equalizer processing happens in real-time on PCM audio
No latency or stream interruption when changing EQ
Minimal CPU overhead
Recommendations
Start with presets before creating custom curves
Use Flat preset to disable EQ without disabling the feature
Combine with normalizer filter to prevent clipping
Test EQ changes with different audio sources
Gain values are multipliers (1.0 = no change)
Gain Values
Gain values in presets are normalized (divided by 30). A raw value of 9.6 becomes a gain of 0.32.
Complete Preset List
const allPresets = [
'Flat' ,
'Classical' ,
'Club' ,
'Dance' ,
'FullBass' ,
'FullBassTreble' ,
'FullTreble' ,
'Headphones' ,
'LargeHall' ,
'Live' ,
'Party' ,
'Pop' ,
'Reggae' ,
'Rock' ,
'Ska' ,
'Soft' ,
'SoftRock' ,
'Techno'
];
Audio Filters FFmpeg audio filters and effects
Volume Control Manage playback volume
Stream Config Configure audio stream processing