arduino-audio-tools
Loading...
Searching...
No Matches
CallbackStream Class Reference

CallbackStream: A Stream that allows to register callback methods for accessing and providing and updating data. The callbacks can be lambda expressions. The update callback can also be used just to read the data without changing it. Warning: this class does not propagate audio info changes to the target stream. You need to do this manually. More...

#include <CodecOpusOgg.h>

Inheritance diagram for CallbackStream:
ModifyingStream ModifyingStream AudioStream AudioStream AudioStream AudioStream AudioInfoSource AudioInfoSupport BaseStream AudioInfoSource AudioInfoSupport BaseStream AudioInfoSource AudioInfoSupport BaseStream AudioInfoSource AudioInfoSupport BaseStream AudioInfoSource AudioInfoSupport BaseStream AudioInfoSource AudioInfoSupport BaseStream AudioInfoSource AudioInfoSupport BaseStream AudioInfoSource AudioInfoSupport BaseStream

Public Member Functions

 CallbackStream ()=default
 CallbackStream ()=default
 CallbackStream (Print &out, size_t(*cb_update)(uint8_t *data, size_t len))
 Allows to change the audio before sending it to the output.
 CallbackStream (Print &out, size_t(*cb_update)(uint8_t *data, size_t len))
 Allows to change the audio before sending it to the output.
 CallbackStream (size_t(*cb_read)(uint8_t *data, size_t len), size_t(*cb_write)(const uint8_t *data, size_t len))
 CallbackStream (size_t(*cb_read)(uint8_t *data, size_t len), size_t(*cb_write)(const uint8_t *data, size_t len))
 CallbackStream (Stream &io, size_t(*cb_update)(uint8_t *data, size_t len))
 CallbackStream (Stream &io, size_t(*cb_update)(uint8_t *data, size_t len))
virtual void addNotifyAudioChange (AudioInfoSupport &bi)
 Adds target to be notified about audio changes.
virtual void addNotifyAudioChange (AudioInfoSupport &bi)
 Adds target to be notified about audio changes.
virtual AudioInfo audioInfo () override
 provides the actual input AudioInfo
virtual AudioInfo audioInfo () override
 provides the actual input AudioInfo
virtual AudioInfo audioInfoOut ()
virtual AudioInfo audioInfoOut ()
int available () override
int available () override
virtual int availableForWrite () override
virtual int availableForWrite () override
virtual bool begin () override
virtual bool begin () override
virtual bool begin (AudioInfo info)
virtual bool begin (AudioInfo info)
virtual void clearNotifyAudioChange ()
 Deletes all change notify subscriptions.
virtual void clearNotifyAudioChange ()
 Deletes all change notify subscriptions.
void end () override
void end () override
virtual void flush () override
virtual void flush () override
bool isNotifyActive ()
 Checks if the automatic AudioInfo update is active.
bool isNotifyActive ()
 Checks if the automatic AudioInfo update is active.
virtual operator bool ()
virtual operator bool ()
size_t readBytes (uint8_t *data, size_t len) override
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 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 bool removeNotifyAudioChange (AudioInfoSupport &bi)
 Removes a target in order not to be notified about audio changes.
void setAudioInfo (AudioInfo info) override
 Updates the audio info and calls the callback.
void setAudioInfo (AudioInfo info) override
 Updates the audio info and calls the callback.
void setAudioInfoCallback (void(*cb)(AudioInfo info))
 defines the callback to receive the actual audio info
void setAudioInfoCallback (void(*cb)(AudioInfo info))
 defines the callback to receive the actual audio info
void setAvailable (int val)
 optioinally define available bytes for next read
void setAvailable (int val)
 optioinally define available bytes for next read
void setAvailableCallback (int(*cb)())
void setAvailableCallback (int(*cb)())
void setNotifyActive (bool flag)
 Deactivate/Reactivate automatic AudioInfo updates: (default is active).
void setNotifyActive (bool flag)
 Deactivate/Reactivate automatic AudioInfo updates: (default is active).
void setOutput (Print &out) override
 Defines/Changes the output target.
void setOutput (Print &out) override
 Defines/Changes the output target.
void setOutput (Stream &in)
 same as setStream
void setOutput (Stream &in)
 same as setStream
virtual void setOutput (AudioOutput &out)
 Defines/Changes the output target and registers for audio change notifications.
void setReadCallback (size_t(*cb_read)(uint8_t *data, size_t len))
 Instead of reading from the input stream we call this method.
void setReadCallback (size_t(*cb_read)(uint8_t *data, size_t len))
 Instead of reading from the input stream we call this method.
void setStream (Print &out)
 same as set Output
void setStream (Print &out)
 same as set Output
void setStream (Stream &in) override
 Defines/Changes the input & output.
void setStream (Stream &in) override
 Defines/Changes the input & output.
virtual void setStream (AudioStream &io)
 Defines/Changes the input & output and registers for audio change notifications.
void setUpdateCallback (size_t(*cb_update)(uint8_t *data, size_t len))
 After Reading or before writing we call this method to allow to modify the data.
void setUpdateCallback (size_t(*cb_update)(uint8_t *data, size_t len))
 After Reading or before writing we call this method to allow to modify the data.
void setWriteBufferSize (int size)
void setWriteBufferSize (int size)
void setWriteCallback (size_t(*cb_write)(const uint8_t *data, size_t len))
 Instead of writing to the output stream we call this method.
void setWriteCallback (size_t(*cb_write)(const uint8_t *data, size_t len))
 Instead of writing to the output stream we call this method.
virtual size_t write (uint8_t ch) override
size_t write (const uint8_t *data, size_t len) override
size_t write (const uint8_t *data, size_t len) override
virtual void writeSilence (size_t len)
 Writes len bytes of silence (=0).
virtual void writeSilence (size_t len)
 Writes len bytes of silence (=0).

Protected Member Functions

virtual int not_supported (int out, const char *msg="")
virtual int not_supported (int out, const char *msg="")
void notifyAudioChange (AudioInfo info)
void notifyAudioChange (AudioInfo info)
void refillReadBuffer ()
 Refill small read buffer (e.g. 8 bytes) to avoid single byte reads when calling read().
void refillReadBuffer ()
 Refill small read buffer (e.g. 8 bytes) to avoid single byte reads when calling read().

Protected Attributes

int _timeout = 10
bool active = true
int available_bytes = -1
void(* cb_audio_info )(AudioInfo info) = nullptr
int(* cb_available )() = nullptr
size_t(* cb_read )(uint8_t *data, size_t len) = nullptr
size_t(* cb_update )(uint8_t *data, size_t len) = nullptr
size_t(* cb_write )(const uint8_t *data, size_t len) = nullptr
AudioInfo info
bool is_notify_active = true
Vector< AudioInfoSupport * > notify_vector
Print * p_out = nullptr
Stream * p_stream = nullptr
RingBuffer< uint8_t > tmp_in {0}
RingBuffer< uint8_t > tmp_out {0}
int write_buffer_size = 8

Detailed Description

CallbackStream: A Stream that allows to register callback methods for accessing and providing and updating data. The callbacks can be lambda expressions. The update callback can also be used just to read the data without changing it. Warning: this class does not propagate audio info changes to the target stream. You need to do this manually.

Author
Phil Schatzmann

Constructor & Destructor Documentation

◆ CallbackStream() [1/8]

CallbackStream ( )
default

◆ CallbackStream() [2/8]

CallbackStream ( Stream & io,
size_t(* cb_update )(uint8_t *data, size_t len) )
inline

Allows to change the audio before sending it to the output or before getting it from the original input

◆ CallbackStream() [3/8]

CallbackStream ( Print & out,
size_t(* cb_update )(uint8_t *data, size_t len) )
inline

Allows to change the audio before sending it to the output.

◆ CallbackStream() [4/8]

CallbackStream ( size_t(* cb_read )(uint8_t *data, size_t len),
size_t(* cb_write )(const uint8_t *data, size_t len) )
inline

◆ CallbackStream() [5/8]

CallbackStream ( )
default

◆ CallbackStream() [6/8]

CallbackStream ( Stream & io,
size_t(* cb_update )(uint8_t *data, size_t len) )
inline

Allows to change the audio before sending it to the output or before getting it from the original input

◆ CallbackStream() [7/8]

CallbackStream ( Print & out,
size_t(* cb_update )(uint8_t *data, size_t len) )
inline

Allows to change the audio before sending it to the output.

◆ CallbackStream() [8/8]

CallbackStream ( size_t(* cb_read )(uint8_t *data, size_t len),
size_t(* cb_write )(const uint8_t *data, size_t len) )
inline

Member Function Documentation

◆ addNotifyAudioChange() [1/2]

virtual void addNotifyAudioChange ( AudioInfoSupport & bi)
inlinevirtualinherited

Adds target to be notified about audio changes.

Reimplemented in CodecNOP, CodecNOP, EncodedAudioOutput, and EncodedAudioStream.

◆ addNotifyAudioChange() [2/2]

virtual void addNotifyAudioChange ( AudioInfoSupport & bi)
inlinevirtualinherited

Adds target to be notified about audio changes.

Reimplemented in CodecNOP, CodecNOP, EncodedAudioOutput, and EncodedAudioStream.

◆ audioInfo() [1/2]

◆ audioInfo() [2/2]

◆ audioInfoOut() [1/2]

◆ audioInfoOut() [2/2]

◆ available() [1/2]

int available ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ available() [2/2]

int available ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ availableForWrite() [1/2]

virtual int availableForWrite ( )
inlineoverridevirtualinherited

Reimplemented from Print.

Reimplemented in A2DPStream, AbstractURLStream, AnalogAudioStream, AudioStreamWrapper, AudioStreamWrapper, ConverterStream< T >, ConverterStream< T >, DynamicMemoryStream, DynamicMemoryStream, EncodedAudioStream, FilteredStream< T, TF >, FilteredStream< T, TF >, FilteredStream< int16_t, int16_t >, MemoryStream, MemoryStream, ProgressStream, ProgressStream, QueueStream< T >, QueueStream< T >, QueueStream< uint8_t >, ReformatBaseStream, RingBufferStream, RingBufferStream, Throttle, Throttle, TimedStream, AudioBLEClient, AudioBLEClient, AudioBLEServer, AudioBLEServer, AudioEffectStream, AudioEffectStreamT< T >, AudioFFTBase, AudioLoRa, AudioStreamWrapper, AutomaticGainControlStream, ChannelFormatConverterStream, ChannelFormatConverterStreamT< T >, ConverterStream< T >, DynamicMemoryStream, EncodedAudioStream, Equalizer3BandsPerChannelT< T >, Equalizer3BandsPerChannelT< float >, Equalizer3BandsT< T >, Equalizer3BandsT< float >, ESPNowStream, FadeStream, FaustStream< DSP >, FilteredStream< T, TF >, FrequencyDetectorAutoCorrelation, FrequencyDetectorZeroCrossing, HammingFEC< bytecount, block_t >, I2SCodecStream, I2SStream, MeasuringStream, MemoryStream, MiniAudioStream, NRF24Stream, NumberFormatConverterStream, NumberFormatConverterStreamT< TFrom, TTo >, Pipeline, ProgressStream, QualityAnalysisStream, QueueStream< T >, ReedSolomonFEC< bytecount, additional_bytes >, ReformatBaseStream, RingBufferStream, SPIAudioSlave, StdioStream, SupportedRatesStream, Throttle, TimedStream, UDPStream, URLStreamESP32, USBAudioStreamBase, VBANStream, and VolumeStream.

◆ availableForWrite() [2/2]

virtual int availableForWrite ( )
inlineoverridevirtualinherited

Reimplemented from Print.

Reimplemented in A2DPStream, AbstractURLStream, AnalogAudioStream, AudioStreamWrapper, AudioStreamWrapper, ConverterStream< T >, ConverterStream< T >, DynamicMemoryStream, DynamicMemoryStream, EncodedAudioStream, FilteredStream< T, TF >, FilteredStream< T, TF >, FilteredStream< int16_t, int16_t >, MemoryStream, MemoryStream, ProgressStream, ProgressStream, QueueStream< T >, QueueStream< T >, QueueStream< uint8_t >, ReformatBaseStream, RingBufferStream, RingBufferStream, Throttle, Throttle, TimedStream, AudioBLEClient, AudioBLEClient, AudioBLEServer, AudioBLEServer, AudioEffectStream, AudioEffectStreamT< T >, AudioFFTBase, AudioLoRa, AudioStreamWrapper, AutomaticGainControlStream, ChannelFormatConverterStream, ChannelFormatConverterStreamT< T >, ConverterStream< T >, DynamicMemoryStream, EncodedAudioStream, Equalizer3BandsPerChannelT< T >, Equalizer3BandsPerChannelT< float >, Equalizer3BandsT< T >, Equalizer3BandsT< float >, ESPNowStream, FadeStream, FaustStream< DSP >, FilteredStream< T, TF >, FrequencyDetectorAutoCorrelation, FrequencyDetectorZeroCrossing, HammingFEC< bytecount, block_t >, I2SCodecStream, I2SStream, MeasuringStream, MemoryStream, MiniAudioStream, NRF24Stream, NumberFormatConverterStream, NumberFormatConverterStreamT< TFrom, TTo >, Pipeline, ProgressStream, QualityAnalysisStream, QueueStream< T >, ReedSolomonFEC< bytecount, additional_bytes >, ReformatBaseStream, RingBufferStream, SPIAudioSlave, StdioStream, SupportedRatesStream, Throttle, TimedStream, UDPStream, URLStreamESP32, USBAudioStreamBase, VBANStream, and VolumeStream.

◆ begin() [1/4]

virtual bool begin ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ begin() [2/4]

virtual bool begin ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ begin() [3/4]

virtual bool begin ( AudioInfo info)
inlinevirtual

◆ begin() [4/4]

virtual bool begin ( AudioInfo info)
inlinevirtual

◆ clearNotifyAudioChange() [1/2]

virtual void clearNotifyAudioChange ( )
inlinevirtualinherited

◆ clearNotifyAudioChange() [2/2]

virtual void clearNotifyAudioChange ( )
inlinevirtualinherited

◆ end() [1/2]

void end ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ end() [2/2]

void end ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ flush() [1/2]

◆ flush() [2/2]

◆ isNotifyActive() [1/2]

bool isNotifyActive ( )
inlineinherited

Checks if the automatic AudioInfo update is active.

◆ isNotifyActive() [2/2]

bool isNotifyActive ( )
inlineinherited

Checks if the automatic AudioInfo update is active.

◆ not_supported() [1/2]

virtual int not_supported ( int out,
const char * msg = "" )
inlineprotectedvirtualinherited

◆ not_supported() [2/2]

virtual int not_supported ( int out,
const char * msg = "" )
inlineprotectedvirtualinherited

◆ notifyAudioChange() [1/2]

void notifyAudioChange ( AudioInfo info)
inlineprotectedinherited

◆ notifyAudioChange() [2/2]

void notifyAudioChange ( AudioInfo info)
inlineprotectedinherited

◆ operator bool() [1/2]

◆ operator bool() [2/2]

◆ readBytes() [1/2]

size_t readBytes ( uint8_t * data,
size_t len )
inlineoverridevirtual

Reimplemented from AudioStream.

◆ readBytes() [2/2]

size_t readBytes ( uint8_t * data,
size_t len )
inlineoverridevirtual

Reimplemented from AudioStream.

◆ readSilence() [1/2]

virtual size_t readSilence ( uint8_t * buffer,
size_t length )
inlinevirtualinherited

Source to generate silence: just sets the buffer to 0.

◆ readSilence() [2/2]

virtual size_t readSilence ( uint8_t * buffer,
size_t length )
inlinevirtualinherited

Source to generate silence: just sets the buffer to 0.

◆ refillReadBuffer() [1/2]

void refillReadBuffer ( )
inlineprotectedinherited

Refill small read buffer (e.g. 8 bytes) to avoid single byte reads when calling read().

◆ refillReadBuffer() [2/2]

void refillReadBuffer ( )
inlineprotectedinherited

Refill small read buffer (e.g. 8 bytes) to avoid single byte reads when calling read().

◆ removeNotifyAudioChange() [1/2]

virtual bool removeNotifyAudioChange ( AudioInfoSupport & bi)
inlinevirtualinherited

Removes a target in order not to be notified about audio changes.

◆ removeNotifyAudioChange() [2/2]

virtual bool removeNotifyAudioChange ( AudioInfoSupport & bi)
inlinevirtualinherited

Removes a target in order not to be notified about audio changes.

◆ setAudioInfo() [1/2]

void setAudioInfo ( AudioInfo info)
inlineoverridevirtual

Updates the audio info and calls the callback.

Reimplemented from AudioStream.

◆ setAudioInfo() [2/2]

void setAudioInfo ( AudioInfo info)
inlineoverridevirtual

Updates the audio info and calls the callback.

Reimplemented from AudioStream.

◆ setAudioInfoCallback() [1/2]

void setAudioInfoCallback ( void(* cb )(AudioInfo info))
inline

defines the callback to receive the actual audio info

◆ setAudioInfoCallback() [2/2]

void setAudioInfoCallback ( void(* cb )(AudioInfo info))
inline

defines the callback to receive the actual audio info

◆ setAvailable() [1/2]

void setAvailable ( int val)
inline

optioinally define available bytes for next read

◆ setAvailable() [2/2]

void setAvailable ( int val)
inline

optioinally define available bytes for next read

◆ setAvailableCallback() [1/2]

void setAvailableCallback ( int(* cb )())
inline

◆ setAvailableCallback() [2/2]

void setAvailableCallback ( int(* cb )())
inline

◆ setNotifyActive() [1/2]

void setNotifyActive ( bool flag)
inlineinherited

Deactivate/Reactivate automatic AudioInfo updates: (default is active).

◆ setNotifyActive() [2/2]

void setNotifyActive ( bool flag)
inlineinherited

Deactivate/Reactivate automatic AudioInfo updates: (default is active).

◆ setOutput() [1/5]

void setOutput ( Print & out)
inlineoverridevirtual

Defines/Changes the output target.

Implements ModifyingStream.

◆ setOutput() [2/5]

void setOutput ( Print & out)
inlineoverridevirtual

Defines/Changes the output target.

Implements ModifyingStream.

◆ setOutput() [3/5]

void setOutput ( Stream & in)
inline

same as setStream

◆ setOutput() [4/5]

void setOutput ( Stream & in)
inline

same as setStream

◆ setOutput() [5/5]

virtual void setOutput ( AudioOutput & out)
inlinevirtualinherited

Defines/Changes the output target and registers for audio change notifications.

Reimplemented in AudioInputMonitor, AudioInputMonitor, EncodedAudioStream, ReformatBaseStream, TimedStream, VolumeMeter, and VolumeMeter.

◆ setReadCallback() [1/2]

void setReadCallback ( size_t(* cb_read )(uint8_t *data, size_t len))
inline

Instead of reading from the input stream we call this method.

◆ setReadCallback() [2/2]

void setReadCallback ( size_t(* cb_read )(uint8_t *data, size_t len))
inline

Instead of reading from the input stream we call this method.

◆ setStream() [1/5]

void setStream ( Print & out)
inline

same as set Output

◆ setStream() [2/5]

void setStream ( Print & out)
inline

same as set Output

◆ setStream() [3/5]

void setStream ( Stream & in)
inlineoverridevirtual

Defines/Changes the input & output.

Implements ModifyingStream.

◆ setStream() [4/5]

void setStream ( Stream & in)
inlineoverridevirtual

Defines/Changes the input & output.

Implements ModifyingStream.

◆ setStream() [5/5]

virtual void setStream ( AudioStream & io)
inlinevirtualinherited

Defines/Changes the input & output and registers for audio change notifications.

Reimplemented in AudioInputMonitor, AudioInputMonitor, EncodedAudioStream, ReformatBaseStream, TimedStream, VolumeMeter, and VolumeMeter.

◆ setUpdateCallback() [1/2]

void setUpdateCallback ( size_t(* cb_update )(uint8_t *data, size_t len))
inline

After Reading or before writing we call this method to allow to modify the data.

◆ setUpdateCallback() [2/2]

void setUpdateCallback ( size_t(* cb_update )(uint8_t *data, size_t len))
inline

After Reading or before writing we call this method to allow to modify the data.

◆ setWriteBufferSize() [1/2]

void setWriteBufferSize ( int size)
inlineinherited

◆ setWriteBufferSize() [2/2]

void setWriteBufferSize ( int size)
inlineinherited

◆ setWriteCallback() [1/2]

void setWriteCallback ( size_t(* cb_write )(const uint8_t *data, size_t len))
inline

Instead of writing to the output stream we call this method.

◆ setWriteCallback() [2/2]

void setWriteCallback ( size_t(* cb_write )(const uint8_t *data, size_t len))
inline

Instead of writing to the output stream we call this method.

◆ write() [1/3]

◆ write() [2/3]

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

Reimplemented from AudioStream.

◆ write() [3/3]

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

Reimplemented from AudioStream.

◆ writeSilence() [1/2]

virtual void writeSilence ( size_t len)
inlinevirtualinherited

Writes len bytes of silence (=0).

◆ writeSilence() [2/2]

virtual void writeSilence ( size_t len)
inlinevirtualinherited

Writes len bytes of silence (=0).

Member Data Documentation

◆ _timeout

int _timeout = 10
protectedinherited

◆ active

bool active = true
protected

◆ available_bytes

int available_bytes = -1
protected

◆ cb_audio_info

void(* cb_audio_info)(AudioInfo info) = nullptr
protected

◆ cb_available

int(* cb_available)() = nullptr
protected

◆ cb_read

size_t(* cb_read)(uint8_t *data, size_t len) = nullptr
protected

◆ cb_update

size_t(* cb_update)(uint8_t *data, size_t len) = nullptr
protected

◆ cb_write

size_t(* cb_write)(const uint8_t *data, size_t len) = nullptr
protected

◆ info

AudioInfo info
protectedinherited

◆ is_notify_active

bool is_notify_active = true
protectedinherited

◆ notify_vector

Vector< AudioInfoSupport * > notify_vector
protectedinherited

◆ p_out

Print * p_out = nullptr
protected

◆ p_stream

Stream * p_stream = nullptr
protected

◆ tmp_in

RingBuffer< uint8_t > tmp_in {0}
protectedinherited

◆ tmp_out

RingBuffer< uint8_t > tmp_out {0}
protectedinherited

◆ write_buffer_size

int write_buffer_size = 8
protectedinherited

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