arduino-audio-tools
|
Detects frequency using autocorrelation on audio samples. More...
#include <FrequencyDetector.h>
Public Member Functions | |
FrequencyDetectorAutoCorrelation (int bufferSize) | |
Construct with buffer size. | |
FrequencyDetectorAutoCorrelation (int bufferSize, Print &out) | |
Construct with buffer size and output stream. | |
FrequencyDetectorAutoCorrelation (int bufferSize, Stream &in) | |
Construct with buffer size and input stream. | |
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 |
Returns the number of bytes available for reading. | |
int | availableForWrite () override |
Returns the number of bytes available for writing. | |
bool | begin () |
Initialize internal buffers based on audio info. | |
bool | begin (AudioInfo info) |
Initialize with audio configuration. | |
virtual void | clearNotifyAudioChange () |
Deletes all change notify subscriptions. | |
AudioInfo | defaultConfig () |
Returns a default AudioInfo configuration. | |
virtual void | end () |
virtual void | flush () override |
float | frequency (int channel) |
Returns the last detected frequency for the given channel. | |
bool | isNotifyActive () |
Checks if the automatic AudioInfo update is active. | |
virtual | operator bool () |
size_t | readBytes (uint8_t *data, size_t len) override |
Reads bytes from the input stream and processes them for frequency detection. | |
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 newInfo) override |
Defines the input AudioInfo. | |
void | setFrequencyCallback (void(*callback)(int channel, float freq)) |
Sets a callback function to be called when a new frequency is detected. | |
void | setNotifyActive (bool flag) |
Deactivate/Reactivate automatic AudioInfo updates: (default is active) | |
void | setWriteBufferSize (int size) |
virtual size_t | write (const uint8_t *data, size_t len) override |
Writes bytes to the output stream and processes them for frequency detection. | |
virtual size_t | write (uint8_t ch) override |
virtual void | writeSilence (size_t len) |
Writes len bytes of silence (=0). | |
Protected Member Functions | |
template<class T > | |
void | detect (T *samples, size_t len) |
Detects frequency for all channels using autocorrelation. | |
template<class T > | |
float | detectFrequencyForChannel (int ch, T *samples, size_t len) |
Performs autocorrelation to estimate frequency for a single channel. | |
virtual int | not_supported (int out, const char *msg="") |
void | notifyAudioChange (AudioInfo info) |
void | refillReadBuffer () |
Protected Attributes | |
int | _timeout = 10 |
SingleBuffer< uint8_t > | buffer |
Buffer for incoming audio data. | |
int | buffer_size = 0 |
Buffer size in samples. | |
Vector< float > | freq |
Stores detected frequency for each channel. | |
void(* | freq_callback )(int channel, float freq) |
Frequency callback function. | |
AudioInfo | info |
bool | is_notify_active = true |
Vector< AudioInfoSupport * > | notify_vector |
Stream * | p_in = nullptr |
Input stream pointer. | |
Print * | p_out = nullptr |
Output stream pointer. | |
RingBuffer< uint8_t > | tmp_in {0} |
RingBuffer< uint8_t > | tmp_out {0} |
int | write_buffer_size = MAX_SINGLE_CHARS |
Detects frequency using autocorrelation on audio samples.
This class analyzes audio data to estimate the dominant frequency by applying the autocorrelation method. It supports multiple audio channels and different sample formats (16, 24, 32 bits).
Usage:
|
inline |
Construct with buffer size.
bufferSize | Number of samples to buffer for analysis. |
|
inline |
Construct with buffer size and output stream.
bufferSize | Number of samples to buffer for analysis. |
out | Output stream for writing audio data. |
|
inline |
Construct with buffer size and input stream.
bufferSize | Number of samples to buffer for analysis. |
in | Input stream for reading audio data. |
|
inlinevirtualinherited |
Adds target to be notified about audio changes.
Reimplemented in CodecNOP, EncodedAudioOutput, EncodedAudioStream, AACDecoderFDK, DecoderBasic, MP3DecoderHelix, MP3DecoderMAD, OggContainerDecoder, Pipeline, and Pipeline::ModifyingStreamAdapter.
|
inlineoverridevirtualinherited |
provides the actual input AudioInfo
Implements AudioInfoSupport.
Reimplemented in JupyterAudioT< T >, MozziStream, TimerCallbackAudioStream, PureDataStream, AdapterAudioOutputToAudioStream, GeneratedSoundStream< T >, GeneratedSoundStream< int16_t >, and InputMerge< T >.
|
inlinevirtualinherited |
provides the actual output AudioInfo: this is usually the same as audioInfo() unless we use a transforming stream
Reimplemented in PureDataStream, PWMAudioOutput, ChannelFormatConverterStreamT< T >, ChannelFormatConverterStream, NumberFormatConverterStreamT< TFrom, TTo >, NumberFormatConverterStream, FormatConverterStream, Pipeline, ResampleStream, and ResampleStreamT< TInterpolator >.
|
inlineoverridevirtual |
Returns the number of bytes available for reading.
Reimplemented from BaseStream.
|
inlineoverridevirtual |
Returns the number of bytes available for writing.
Reimplemented from BaseStream.
|
inlinevirtual |
Initialize internal buffers based on audio info.
Reimplemented from BaseStream.
|
inline |
Initialize with audio configuration.
info | AudioInfo structure describing the audio format. |
|
inlineprotected |
Detects frequency for all channels using autocorrelation.
T | Sample type (int16_t, int24_t, int32_t) |
samples | Pointer to audio samples. |
len | Number of samples. |
|
inlineprotected |
Performs autocorrelation to estimate frequency for a single channel.
T | Sample type. |
ch | Channel index. |
samples | Pointer to audio samples. |
len | Number of samples. |
|
inlinevirtualinherited |
Reimplemented in FaustStream< DSP >, I2SCodecStream, VS1053Stream, WM8960Stream, ESPNowStream, I2SStream, TimerCallbackAudioStream, AudioFFTBase, AudioKitStream, HLSStreamT< URLStream >, AnalogAudioStream, HttpRequest, ICYStreamT< T >, GeneratedSoundStream< T >, GeneratedSoundStream< int16_t >, InputMixer< T >, InputMerge< T >, QueueStream< T >, QueueStream< uint8_t >, and Pipeline.
|
inlineoverridevirtualinherited |
Reimplemented from Print.
Reimplemented in ResampleStream, BufferedTaskStream, and BufferedStream.
|
inline |
Returns the last detected frequency for the given channel.
channel | Channel index. |
|
inlinevirtualinherited |
Reimplemented in A2DPStream, I2SStream, MemoryStream, and Pipeline.
|
inlineoverridevirtual |
Reads bytes from the input stream and processes them for frequency detection.
data | Buffer to store read bytes. |
len | Number of bytes to read. |
Reimplemented from AudioStream.
|
inlineoverridevirtualinherited |
Defines the input AudioInfo.
Implements AudioInfoSupport.
Reimplemented in VS1053Stream, WM8960Stream, ChannelFormatConverterStreamT< T >, ChannelFormatConverterStream, VolumeStream, MiniAudioStream, PortAudioStream, I2SCodecStream, MozziStream, SPDIFOutput, AudioLoRa, AnalogAudioStream, I2SStream, TimerCallbackAudioStream, AudioBLEStream, LoRaStream, AudioFFTBase, AudioKitStream, VBANStream, AnalogAudioArduino, Equalizer3Bands, AdapterAudioOutputToAudioStream, TimedStream, MeasuringStream, ProgressStream, CallbackStream, VolumeMeter, FormatConverterStream, FadeStream, Pipeline::ModifyingStreamAdapter, PureDataStream, GeneratedSoundStream< T >, GeneratedSoundStream< int16_t >, NumberFormatConverterStreamT< TFrom, TTo >, NumberFormatConverterStream, Pipeline, ResampleStream, and ResampleStreamT< TInterpolator >.
|
inline |
Sets a callback function to be called when a new frequency is detected.
callback | Function pointer: void callback(int channel, float freq) |
|
inlineoverridevirtual |
Writes bytes to the output stream and processes them for frequency detection.
data | Buffer containing audio data. |
len | Number of bytes to write. |
Reimplemented from AudioStream.
|
inlineoverridevirtualinherited |
Reimplemented in BufferedTaskStream, and BufferedStream.