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

AudioFFT using RealFFT. More...

#include <AudioRealFFT.h>

Inheritance diagram for AudioRealFFT:
AudioFFTBase AudioStream BaseStream AudioInfoSupport AudioInfoSource Stream Print

Public Member Functions

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
 Data available for reverse fft.
 
int availableForWrite () override
 We try to fill the buffer at once.
 
bool begin () override
 starts the processing
 
bool begin (AudioFFTConfig info)
 starts the processing
 
void clearBins ()
 clears the fft data
 
virtual void clearNotifyAudioChange ()
 Deletes all change notify subscriptions.
 
AudioFFTConfigconfig ()
 Provides the actual configuration.
 
AudioFFTConfig defaultConfig (RxTxMode mode=TX_MODE)
 Provides the default configuration.
 
FFTDriverdriver ()
 
FFTDriverRealFFTdriverEx ()
 
void end () override
 Release the allocated memory.
 
virtual void flush () override
 
float frequency (int bin)
 Determines the frequency of the indicated bin.
 
int frequencyToBin (int freq)
 Determine the bin number from the frequency.
 
bool getBin (int pos, FFTBin &bin)
 gets the value of a bin
 
float * imgArray ()
 Provides the complex array returned by the FFT

 
bool isNotifyActive ()
 Checks if the automatic AudioInfo update is active.
 
int length ()
 The number of samples.
 
float magnitude (int bin)
 
float magnitudeFast (int bin)
 
float * magnitudes ()
 
float * magnitudesFast ()
 
 operator bool ()
 
float phase (int bin)
 calculates the phase
 
size_t readBytes (uint8_t *data, size_t len) override
 Provides the result of a reverse FFT.
 
virtual size_t readSilence (uint8_t *buffer, size_t length)
 Source to generate silence: just sets the buffer to 0.
 
float * realArray ()
 Provides the real array returned by the FFT.
 
virtual bool removeNotifyAudioChange (AudioInfoSupport &bi)
 Removes a target in order not to be notified about audio changes.
 
void reset ()
 Just resets the current_pos e.g. to start a new cycle.
 
AudioFFTResult result ()
 Determines the result values in the max magnitude bin.
 
template<int N>
void resultArray (AudioFFTResult(&result)[N])
 Determines the N biggest result values.
 
unsigned long resultTime ()
 
unsigned long resultTimeBegin ()
 time before the fft
 
void setAudioInfo (AudioInfo info) override
 Notify change of audio information.
 
bool setBin (int idx, float real, float img)
 sets the value of a bin
 
bool setBin (int pos, FFTBin &bin)
 sets the value of a bin
 
void setNotifyActive (bool flag)
 Deactivate/Reactivate automatic AudioInfo updates: (default is active)
 
int size ()
 The number of bins used by the FFT which are relevant for the result.
 
size_t write (const uint8_t *data, size_t len) override
 Provide the audio data as FFT input.
 
virtual size_t write (uint8_t ch) override
 
virtual void writeSilence (size_t len)
 Writes len bytes of silence (=0).
 

Protected Member Functions

int bytesPerSample ()
 
template<typename T >
void fft ()
 
template<int N>
void insertSorted (AudioFFTResult(&result)[N], AudioFFTResult tmp)
 make sure that we do not reuse already found results
 
bool isPowerOfTwo (uint16_t x)
 
virtual int not_supported (int out, const char *msg="")
 
void notifyAudioChange (AudioInfo info)
 
template<typename T >
void processSamples (const void *data, size_t count)
 
void refillReadBuffer ()
 
void rfft ()
 reverse fft
 
void rfftWriteData (BaseBuffer< uint8_t > &data)
 write reverse fft result to buffer to make it available for readBytes
 
template<typename T >
windowedSample (T sample, int pos)
 
template<typename T >
void writeIFFT (float *data, int len)
 
bool writeStrideBuffer (uint8_t *buffer, size_t len)
 

Protected Attributes

int _timeout = 10
 
int bins = 0
 
AudioFFTConfig cfg
 
int current_pos = 0
 
bool has_rfft_data = false
 
AudioInfo info
 
bool is_notify_active = true
 
Vector< float > l_magnitudes {0}
 
Vector< AudioInfoSupport * > notify_vector
 
FFTDriverp_driver = nullptr
 
FFTInverseOverlapAdder rfft_add {0}
 
RingBuffer< uint8_t > rfft_data {0}
 
Vector< float > step_data {0}
 
SingleBuffer< uint8_t > stride_buffer {0}
 
unsigned long timestamp = 0l
 
unsigned long timestamp_begin = 0l
 
RingBuffer< uint8_t > tmp_in {0}
 
RingBuffer< uint8_t > tmp_out {0}
 

Detailed Description

AudioFFT using RealFFT.

Author
Phil Schatzmann

Member Function Documentation

◆ addNotifyAudioChange()

virtual void addNotifyAudioChange ( AudioInfoSupport bi)
inlinevirtualinherited

◆ audioInfo()

virtual AudioInfo audioInfo ( )
inlineoverridevirtualinherited

◆ audioInfoOut()

virtual AudioInfo audioInfoOut ( )
inlinevirtualinherited

◆ available()

int available ( )
inlineoverridevirtualinherited

Data available for reverse fft.

Reimplemented from BaseStream.

◆ availableForWrite()

int availableForWrite ( )
inlineoverridevirtualinherited

We try to fill the buffer at once.

Reimplemented from BaseStream.

◆ begin()

bool begin ( )
inlineoverridevirtualinherited

starts the processing

Reimplemented from BaseStream.

◆ driver()

FFTDriver * driver ( )
inlineinherited

provides access to the FFTDriver which implements the basic FFT functionality

◆ end()

void end ( )
inlineoverridevirtualinherited

Release the allocated memory.

Reimplemented from BaseStream.

◆ flush()

virtual void flush ( )
inlineoverridevirtualinherited

Reimplemented from Print.

Reimplemented in ResampleStream, BufferedTaskStream, and BufferedStream.

◆ magnitude()

float magnitude ( int  bin)
inlineinherited

Calculates the magnitude of the fft result to determine the max value (bin is 0 to size())

◆ magnitudes()

float * magnitudes ( )
inlineinherited

Provides the magnitudes as array of size size(). Please note that this method is allocating additinal memory!

◆ magnitudesFast()

float * magnitudesFast ( )
inlineinherited

Provides the magnitudes w/o calling the square root function as array of size size(). Please note that this method is allocating additinal memory!

◆ operator bool()

operator bool ( )
inlinevirtualinherited

Reimplemented from AudioStream.

◆ readBytes()

size_t readBytes ( uint8_t *  data,
size_t  len 
)
inlineoverridevirtualinherited

Provides the result of a reverse FFT.

Reimplemented from AudioStream.

◆ resultTime()

unsigned long resultTime ( )
inlineinherited

time after the fft: time when the last result was provided - you can poll this to check if we have a new result

◆ setAudioInfo()

void setAudioInfo ( AudioInfo  info)
inlineoverridevirtualinherited

Notify change of audio information.

Reimplemented from AudioStream.

◆ write() [1/2]

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

Provide the audio data as FFT input.

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: