arduino-audio-tools
|
Detects frequency using upward zero crossings in audio samples. More...
#include <FrequencyDetector.h>
Classes | |
struct | ChannelState |
Holds state for each channel during zero crossing detection. More... | |
Public Member Functions | |
FrequencyDetectorZeroCrossing ()=default | |
Default constructor. | |
FrequencyDetectorZeroCrossing (Print &out) | |
Construct with output stream. | |
FrequencyDetectorZeroCrossing (Stream &in) | |
Construct with 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. | |
virtual bool | begin () |
bool | begin (AudioInfo info) |
Initialize with audio configuration. | |
virtual void | clearNotifyAudioChange () |
Deletes all change notify subscriptions. | |
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 zero crossing method. | |
template<class T > | |
void | detectChannel (int channel, T *samples, size_t len) |
Detects frequency for a single channel by counting upward zero crossings. | |
virtual int | not_supported (int out, const char *msg="") |
void | notifyAudioChange (AudioInfo info) |
void | refillReadBuffer () |
Protected Attributes | |
int | _timeout = 10 |
bool | active = false |
Counting active flag (unused, kept for compatibility) | |
int | count = 0 |
Sample count (unused, kept for compatibility) | |
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. | |
Vector< ChannelState > | states |
State for each channel. | |
RingBuffer< uint8_t > | tmp_in {0} |
RingBuffer< uint8_t > | tmp_out {0} |
int | write_buffer_size = MAX_SINGLE_CHARS |
Detects frequency using upward zero crossings in audio samples.
This class estimates the frequency by counting the number of samples between upward zero crossings (negative to positive transitions). It supports multiple channels and different sample formats.
Usage:
|
inline |
Construct with output stream.
out | Output stream for writing audio data. |
|
inline |
Construct with input stream.
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.
|
inlinevirtualinherited |
Reimplemented in AudioOutputWithCallback, SPDIFOutput, VS1053Stream, WM8960Stream, ESPNowStream, TimerCallbackAudioStream, FrequencyDetectorAutoCorrelation, AudioFFTBase, HLSStreamT< URLStream >, AnalogAudioArduino, AnalogAudioStream, MemoryStream, GeneratedSoundStream< T >, GeneratedSoundStream< int16_t >, FormatConverterStream, QueueStream< T >, QueueStream< uint8_t >, DynamicMemoryStream, and Pipeline.
|
inline |
Initialize with audio configuration.
info | AudioInfo structure describing the audio format. |
|
inlineprotected |
Detects frequency for all channels using zero crossing method.
T | Sample type (int16_t, int24_t, int32_t) |
samples | Pointer to audio samples. |
len | Number of samples. |
|
inlineprotected |
Detects frequency for a single channel by counting upward zero crossings.
T | Sample type. |
channel | 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.