arduino-audio-tools
All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Macros Modules Pages
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Equalizer3Bands Class Reference

3 Band Equalizer with identical settings for all channels More...

#include <Equalizer.h>

Inheritance diagram for Equalizer3Bands:
ModifyingStream AudioStream BaseStream AudioInfoSupport AudioInfoSource Stream Print

Classes

struct  EQSTATE
 Filter state for each channel. More...
 

Public Member Functions

 Equalizer3Bands (AudioOutput &out)
 
 Equalizer3Bands (AudioStream &stream)
 
 Equalizer3Bands (Print &out)
 
 Equalizer3Bands (Stream &in)
 
virtual void addNotifyAudioChange (AudioInfoSupport &bi)
 Adds target to be notified about audio changes.
 
virtual AudioInfo audioInfo () override
 provides the actual input AudioInfo
 
virtual AudioInfo audioInfoOut ()
 
int available () override
 
int availableForWrite () override
 
bool begin ()
 
bool begin (ConfigEqualizer3Bands &config)
 
virtual void clearNotifyAudioChange ()
 Deletes all change notify subscriptions.
 
ConfigEqualizer3Bandsconfig ()
 
ConfigEqualizer3BandsdefaultConfig ()
 
void end ()
 
virtual void flush () override
 
bool isNotifyActive ()
 Checks if the automatic AudioInfo update is active.
 
virtual operator bool ()
 
size_t readBytes (uint8_t *data, size_t len) override
 
virtual size_t readSilence (uint8_t *buffer, size_t length)
 Source to generate silence: just sets the buffer to 0.
 
virtual bool removeNotifyAudioChange (AudioInfoSupport &bi)
 Removes a target in order not to be notified about audio changes.
 
virtual void setAudioInfo (AudioInfo info) override
 
void setNotifyActive (bool flag)
 Deactivate/Reactivate automatic AudioInfo updates: (default is active)
 
void setOutput (Print &out) override
 
void setStream (Stream &io) override
 
void setWriteBufferSize (int size)
 
size_t write (const uint8_t *data, size_t len) override
 
virtual size_t write (uint8_t ch) override
 
virtual void writeSilence (size_t len)
 Writes len bytes of silence (=0).
 

Protected Member Functions

void filterSamples (const uint8_t *data, size_t len)
 
virtual int not_supported (int out, const char *msg="")
 
void notifyAudioChange (AudioInfo info)
 
void refillReadBuffer ()
 
float sample (EQSTATE &es, float sample)
 

Protected Attributes

int _timeout = 10
 
ConfigEqualizer3Bands cfg
 Default configuration instance.
 
AudioInfo info
 
bool is_active = false
 Indicates if the equalizer is active.
 
bool is_notify_active = true
 
int max_state_count = 0
 Maximum number of allocated channel states.
 
Vector< AudioInfoSupport * > notify_vector
 
ConfigEqualizer3Bandsp_cfg = &cfg
 Pointer to active configuration.
 
Printp_print = nullptr
 Output stream for write operations.
 
Streamp_stream = nullptr
 Input/output stream for read operations.
 
struct audio_tools::Equalizer3Bands::EQSTATEstate = nullptr
 
RingBuffer< uint8_t > tmp_in {0}
 
RingBuffer< uint8_t > tmp_out {0}
 
const float vsa = (1.0 / 4294967295.0)
 Very small amount for denormal fix.
 
int write_buffer_size = MAX_SINGLE_CHARS
 

Detailed Description

3 Band Equalizer with identical settings for all channels

Digital 3-band equalizer implementation inspired from https://www.musicdsp.org/en/latest/Filters/236-3-band-equaliser.html

This equalizer applies the same frequency response and gain settings to all audio channels. The audio spectrum is divided into three bands:

Each band uses a 4-pole filter implementation for smooth frequency response. If you need different settings per channel, use Equalizer3BandsPerChannel instead.

After calling begin() you can update the gain parameters of the ConfigEqualizer3Bands directly w/o calling any other methods. If you change the freq. parameters, you need to call begin() again.

Author
pschatzmann

Constructor & Destructor Documentation

◆ Equalizer3Bands() [1/4]

Equalizer3Bands ( Print out)
inline

Constructor with Print output stream

Parameters
outPrint stream where processed audio will be written

◆ Equalizer3Bands() [2/4]

Equalizer3Bands ( Stream in)
inline

Constructor with bidirectional Stream

Parameters
inStream for both input and output

◆ Equalizer3Bands() [3/4]

Equalizer3Bands ( AudioOutput out)
inline

Constructor with AudioOutput (includes automatic audio format notifications)

Parameters
outAudioOutput where processed audio will be written

◆ Equalizer3Bands() [4/4]

Equalizer3Bands ( AudioStream stream)
inline

Constructor with AudioStream (includes automatic audio format notifications)

Parameters
streamAudioStream for both input and output

Member Function Documentation

◆ addNotifyAudioChange()

virtual void addNotifyAudioChange ( AudioInfoSupport bi)
inlinevirtualinherited

◆ audioInfo()

virtual AudioInfo audioInfo ( )
inlineoverridevirtualinherited

◆ audioInfoOut()

virtual AudioInfo audioInfoOut ( )
inlinevirtualinherited

◆ available()

int available ( )
inlineoverridevirtual

Get available data for reading

Returns
Number of bytes available for reading

Reimplemented from BaseStream.

◆ availableForWrite()

int availableForWrite ( )
inlineoverridevirtual

Get available space for writing

Returns
Number of bytes available for writing

Reimplemented from BaseStream.

◆ begin() [1/2]

bool begin ( )
inlinevirtual

Reimplemented from BaseStream.

◆ begin() [2/2]

bool begin ( ConfigEqualizer3Bands config)
inline

Initialize the equalizer with the provided configuration

Parameters
configConfiguration settings including frequencies and gains
Returns
true if initialization was successful

◆ config()

ConfigEqualizer3Bands & config ( )
inline

Access to the current configuration

Returns
Reference to the configuration object

◆ defaultConfig()

ConfigEqualizer3Bands & defaultConfig ( )
inline

Access to the default configuration

Returns
Reference to the default configuration object

◆ end()

void end ( )
inlinevirtual

Reimplemented from BaseStream.

◆ filterSamples()

void filterSamples ( const uint8_t *  data,
size_t  len 
)
inlineprotected

Apply 3-band equalization to audio samples

Parameters
dataPointer to audio data buffer (modified in-place)
lenLength of data buffer in bytes

◆ flush()

virtual void flush ( )
inlineoverridevirtualinherited

Reimplemented from Print.

Reimplemented in ResampleStream, BufferedTaskStream, and BufferedStream.

◆ operator bool()

virtual operator bool ( )
inlinevirtualinherited

Reimplemented in A2DPStream, I2SStream, MemoryStream, and Pipeline.

◆ readBytes()

size_t readBytes ( uint8_t *  data,
size_t  len 
)
inlineoverridevirtual

Read and process audio data through the equalizer

Parameters
dataBuffer to store processed audio data
lenMaximum number of bytes to read
Returns
Number of bytes actually read and processed

Reimplemented from AudioStream.

◆ sample()

float sample ( EQSTATE es,
float  sample 
)
inlineprotected

Process a single audio sample through the 3-band equalizer

Parameters
esReference to the filter state for this channel
sampleInput sample value (normalized float)
Returns
Processed sample value with equalization applied

◆ setAudioInfo()

virtual void setAudioInfo ( AudioInfo  info)
inlineoverridevirtual

Called automatically when audio format changes

Parameters
infoNew audio format information

Reimplemented from AudioStream.

◆ setOutput()

void setOutput ( Print out)
inlineoverridevirtual

Defines/Changes the output target

Parameters
outPrint stream where processed audio will be written

Implements ModifyingStream.

◆ setStream()

void setStream ( Stream io)
inlineoverridevirtual

Defines/Changes the input & output stream

Parameters
ioStream to use for both reading and writing audio data

Implements ModifyingStream.

◆ write() [1/2]

size_t write ( const uint8_t *  data,
size_t  len 
)
inlineoverridevirtual

Process and write audio data through the equalizer

Parameters
dataPointer to audio data buffer
lenLength of data in bytes
Returns
Number of bytes written

Reimplemented from AudioStream.

◆ write() [2/2]

virtual size_t write ( uint8_t  ch)
inlineoverridevirtualinherited

Reimplemented in BufferedTaskStream, and BufferedStream.


The documentation for this class was generated from the following file: