|
arduino-audio-tools
|
EffectsStreamT: the template class describes an input or output stream to which one or multiple effects are applied. Each channel is processed by its own independent clone of the effect chain (created via AudioEffect::clone()), so e.g. a stereo signal keeps its channel separation and effects that carry internal state (Delay's ring buffer, ADSRGain/Tremolo's envelope or oscillator phase, etc.) don't get confused by interleaved samples from different channels. addEffect() adds to a shared template chain that is cloned into every channel on begin() (and immediately cloned into all already-active channels if called afterwards); use addEffect(channel, effect) to register an effect directly on just one channel instead. Note that size()/operator[]/findEffect() operate on the template chain, not on the per-channel clones: mutating a pointer obtained from them after begin() has already cloned it does not retroactively change already-cloned per-channel copies. Currently only int16_t values are supported, so I recommend to use the AudioEffectStream class which is defined as using AudioEffectStream = AudioEffectStreamT<effect_t>;. More...
#include <AudioEffects.h>
Public Member Functions | |
| AudioEffectStreamT ()=default | |
| AudioEffectStreamT (const AudioEffectStreamT &)=delete | |
| AudioEffectStreamT (Print &out) | |
| AudioEffectStreamT (Stream &io) | |
| ~AudioEffectStreamT () | |
| void | addEffect (AudioEffect &effect) |
| Adds an effect object (by reference) to the template chain: cloned into every channel. | |
| void | addEffect (AudioEffect *effect) |
| Adds an effect using a pointer to the template chain: cloned into every channel. | |
| void | addEffect (int channel, AudioEffect &effect) |
| void | addEffect (int channel, AudioEffect *effect) |
| 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 | availableForWrite () override |
| bool | begin () |
| bool | begin (AudioInfo cfg) |
| int | channelCount () |
| Provides the number of channels that have their own effect chain (valid after begin()). | |
| AudioEffectCommon & | channelEffects (int channel) |
| Provides access to a single channel's own effect chain (valid after begin()). | |
| void | clear () |
| deletes all defined effects | |
| virtual void | clearNotifyAudioChange () |
| Deletes all change notify subscriptions. | |
| virtual void | clearNotifyAudioChange () |
| Deletes all change notify subscriptions. | |
| AudioInfo | defaultConfig () |
| void | end () override |
| AudioEffect * | findEffect (int id) |
| Finds an effect by id in the template chain. | |
| 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 () |
| AudioEffectStreamT & | operator= (const AudioEffectStreamT &)=delete |
| AudioEffect * | operator[] (int idx) |
| gets an effect by index from the template chain | |
| 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. | |
| virtual void | setAudioInfo (AudioInfo newInfo) override |
| Defines the input AudioInfo. | |
| virtual void | setAudioInfo (AudioInfo newInfo) override |
| Defines the input AudioInfo. | |
| void | setNotifyActive (bool flag) |
| Deactivate/Reactivate automatic AudioInfo updates: (default is active). | |
| void | setNotifyActive (bool flag) |
| Deactivate/Reactivate automatic AudioInfo updates: (default is active). | |
| virtual void | setOutput (AudioOutput &out) |
| Defines/Changes the output target and registers for audio change notifications. | |
| void | setOutput (Print &print) override |
| Defines/Changes the output target. | |
| virtual void | setStream (AudioStream &io) |
| Defines/Changes the input & output and registers for audio change notifications. | |
| void | setStream (Stream &io) override |
| Defines/Changes the input & output. | |
| void | setWriteBufferSize (int size) |
| void | setWriteBufferSize (int size) |
| size_t | size () |
| Provides the actual number of defined effects in the template chain. | |
| virtual size_t | write (uint8_t ch) 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 | |
| void | cloneInto (int ch, AudioEffect *effect) |
| clones a single effect into a single channel's chain, tracking ownership | |
| 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(). | |
| void | setupChannels () |
| (re)builds channel_effects from the template effects chain | |
Protected Attributes | |
| int | _timeout = 10 |
| bool | active = false |
| Vector< T > | buffer_out |
| Vector< AudioEffectCommon > | channel_effects |
| AudioEffectCommon | effects |
| AudioInfo | info |
| bool | is_notify_active = true |
| Vector< AudioInfoSupport * > | notify_vector |
| Vector< AudioEffect * > | owned_clones |
| Stream * | p_io =nullptr |
| Print * | p_out =nullptr |
| RingBuffer< uint8_t > | tmp_in {0} |
| RingBuffer< uint8_t > | tmp_out {0} |
| int | write_buffer_size = 8 |
EffectsStreamT: the template class describes an input or output stream to which one or multiple effects are applied. Each channel is processed by its own independent clone of the effect chain (created via AudioEffect::clone()), so e.g. a stereo signal keeps its channel separation and effects that carry internal state (Delay's ring buffer, ADSRGain/Tremolo's envelope or oscillator phase, etc.) don't get confused by interleaved samples from different channels. addEffect() adds to a shared template chain that is cloned into every channel on begin() (and immediately cloned into all already-active channels if called afterwards); use addEffect(channel, effect) to register an effect directly on just one channel instead. Note that size()/operator[]/findEffect() operate on the template chain, not on the per-channel clones: mutating a pointer obtained from them after begin() has already cloned it does not retroactively change already-cloned per-channel copies. Currently only int16_t values are supported, so I recommend to use the AudioEffectStream class which is defined as using AudioEffectStream = AudioEffectStreamT<effect_t>;.
|
default |
|
inline |
|
inline |
|
delete |
|
inline |
|
inline |
Adds an effect object (by reference) to the template chain: cloned into every channel.
|
inline |
Adds an effect using a pointer to the template chain: cloned into every channel.
|
inline |
Adds an effect object (by reference) directly to a single channel's own chain (not cloned, not owned by this class). Requires begin() to have already been called.
|
inline |
Adds an effect using a pointer directly to a single channel's own chain (not cloned, not owned by this class). Requires begin() to have already been called.
|
inlinevirtualinherited |
Adds target to be notified about audio changes.
Reimplemented in CodecNOP, CodecNOP, EncodedAudioOutput, and EncodedAudioStream.
|
inlinevirtualinherited |
Adds target to be notified about audio changes.
Reimplemented in CodecNOP, CodecNOP, EncodedAudioOutput, and EncodedAudioStream.
|
inlineoverridevirtualinherited |
provides the actual input AudioInfo
Implements AudioInfoSupport.
Reimplemented in AdapterAudioOutputToAudioStream, AdapterAudioOutputToAudioStream, EncodedAudioStream, GeneratedSoundStream< T >, GeneratedSoundStream< T >, GeneratedSoundStream< int16_t >, InputMerge< T >, InputMerge< T >, TimerCallbackAudioStream, TimerCallbackAudioStream, EncodedAudioStream, GeneratedSoundStream< T >, InputMerge< T >, JupyterAudioT< T >, JupyterAudioT< int16_t >, MozziStream, PureDataStream, and TimerCallbackAudioStream.
|
inlineoverridevirtualinherited |
provides the actual input AudioInfo
Implements AudioInfoSupport.
Reimplemented in AdapterAudioOutputToAudioStream, AdapterAudioOutputToAudioStream, EncodedAudioStream, GeneratedSoundStream< T >, GeneratedSoundStream< T >, GeneratedSoundStream< int16_t >, InputMerge< T >, InputMerge< T >, TimerCallbackAudioStream, TimerCallbackAudioStream, EncodedAudioStream, GeneratedSoundStream< T >, InputMerge< T >, JupyterAudioT< T >, JupyterAudioT< int16_t >, MozziStream, PureDataStream, and TimerCallbackAudioStream.
|
inlinevirtualinherited |
provides the actual output AudioInfo: this is usually the same as audioInfo() unless we use a transforming stream
Reimplemented in ChannelFormatConverterStream, ChannelFormatConverterStreamT< T >, FormatConverterStream, MP3EncoderShine, NumberFormatConverterStream, NumberFormatConverterStreamT< TFrom, TTo >, Pipeline, PureDataStream, PWMAudioOutput< PWMDriverT >, ResampleStream, ResampleStreamT< TInterpolator >, and SupportedRatesStream.
|
inlinevirtualinherited |
provides the actual output AudioInfo: this is usually the same as audioInfo() unless we use a transforming stream
Reimplemented in ChannelFormatConverterStream, ChannelFormatConverterStreamT< T >, FormatConverterStream, MP3EncoderShine, NumberFormatConverterStream, NumberFormatConverterStreamT< TFrom, TTo >, Pipeline, PureDataStream, PWMAudioOutput< PWMDriverT >, ResampleStream, ResampleStreamT< TInterpolator >, and SupportedRatesStream.
|
inlineoverridevirtual |
Reimplemented from BaseStream.
|
inlineoverridevirtual |
Reimplemented from BaseStream.
|
inlinevirtual |
Reimplemented from BaseStream.
|
inline |
|
inline |
Provides the number of channels that have their own effect chain (valid after begin()).
|
inline |
Provides access to a single channel's own effect chain (valid after begin()).
|
inline |
deletes all defined effects
|
inlinevirtualinherited |
Deletes all change notify subscriptions.
Reimplemented in RTSPClient< TcpClient, UdpSocket >, RTSPClient< EthernetClient, EthernetUDP >, and RTSPClient< WiFiClient, WiFiUDP >.
|
inlinevirtualinherited |
Deletes all change notify subscriptions.
Reimplemented in RTSPClient< TcpClient, UdpSocket >, RTSPClient< EthernetClient, EthernetUDP >, and RTSPClient< WiFiClient, WiFiUDP >.
|
inlineprotected |
clones a single effect into a single channel's chain, tracking ownership
|
inline |
|
inlineoverridevirtual |
Reimplemented from BaseStream.
|
inline |
Finds an effect by id in the template chain.
|
inlineoverridevirtual |
Reimplemented from BaseStream.
|
inlineinherited |
Checks if the automatic AudioInfo update is active.
|
inlineinherited |
Checks if the automatic AudioInfo update is active.
|
inlineprotectedvirtualinherited |
|
inlineprotectedvirtualinherited |
|
inlineprotectedinherited |
|
inlineprotectedinherited |
|
inlinevirtualinherited |
Reimplemented in A2DPStream, AdapterAudioOutputToAudioStream, AdapterAudioOutputToAudioStream, GeneratedSoundStream< T >, GeneratedSoundStream< T >, GeneratedSoundStream< int16_t >, MemoryStream, MemoryStream, TimedStream, AudioBLEStream, AudioFFTBase, GeneratedSoundStream< T >, I2SStream, ICYStreamT< T >, ICYStreamT< URLStream >, ICYStreamT< URLStreamESP32 >, MemoryStream, Pipeline, PortAudioStream, TimedStream, URLStream, and USBAudioStreamBase.
|
inlinevirtualinherited |
Reimplemented in A2DPStream, AdapterAudioOutputToAudioStream, AdapterAudioOutputToAudioStream, GeneratedSoundStream< T >, GeneratedSoundStream< T >, GeneratedSoundStream< int16_t >, MemoryStream, MemoryStream, TimedStream, AudioBLEStream, AudioFFTBase, GeneratedSoundStream< T >, I2SStream, ICYStreamT< T >, ICYStreamT< URLStream >, ICYStreamT< URLStreamESP32 >, MemoryStream, Pipeline, PortAudioStream, TimedStream, URLStream, and USBAudioStreamBase.
|
delete |
|
inline |
gets an effect by index from the template chain
|
inlineoverridevirtual |
Provides the audio data by reading the assinged Stream and applying the effects on that input
Reimplemented from AudioStream.
|
inlinevirtualinherited |
Source to generate silence: just sets the buffer to 0.
|
inlinevirtualinherited |
Source to generate silence: just sets the buffer to 0.
|
inlineprotectedinherited |
Refill small read buffer (e.g. 8 bytes) to avoid single byte reads when calling read().
|
inlineprotectedinherited |
Refill small read buffer (e.g. 8 bytes) to avoid single byte reads when calling read().
|
inlinevirtualinherited |
Removes a target in order not to be notified about audio changes.
|
inlinevirtualinherited |
Removes a target in order not to be notified about audio changes.
|
inlineoverridevirtualinherited |
Defines the input AudioInfo.
Implements AudioInfoSupport.
Reimplemented in AdapterAudioOutputToAudioStream, AudioInputMonitor, AudioInputMonitor, CallbackStream, CallbackStream, EncodedAudioStream, GeneratedSoundStream< T >, GeneratedSoundStream< T >, GeneratedSoundStream< int16_t >, ProgressStream, ProgressStream, TimedStream, TimerCallbackAudioStream, TimerCallbackAudioStream, VolumeMeter, and VolumeMeter.
|
inlineoverridevirtualinherited |
Defines the input AudioInfo.
Implements AudioInfoSupport.
Reimplemented in AdapterAudioOutputToAudioStream, AudioInputMonitor, AudioInputMonitor, CallbackStream, CallbackStream, EncodedAudioStream, GeneratedSoundStream< T >, GeneratedSoundStream< T >, GeneratedSoundStream< int16_t >, ProgressStream, ProgressStream, TimedStream, TimerCallbackAudioStream, TimerCallbackAudioStream, VolumeMeter, and VolumeMeter.
|
inlineinherited |
Deactivate/Reactivate automatic AudioInfo updates: (default is active).
|
inlineinherited |
Deactivate/Reactivate automatic AudioInfo updates: (default is active).
|
inlinevirtualinherited |
Defines/Changes the output target and registers for audio change notifications.
Reimplemented in AudioInputMonitor, AudioInputMonitor, EncodedAudioStream, ReformatBaseStream, TimedStream, VolumeMeter, and VolumeMeter.
|
inlineoverridevirtual |
Defines/Changes the output target.
Implements ModifyingStream.
|
inlinevirtualinherited |
Defines/Changes the input & output and registers for audio change notifications.
Reimplemented in AudioInputMonitor, AudioInputMonitor, EncodedAudioStream, ReformatBaseStream, TimedStream, VolumeMeter, and VolumeMeter.
|
inlineoverridevirtual |
Defines/Changes the input & output.
Implements ModifyingStream.
|
inlineprotected |
(re)builds channel_effects from the template effects chain
|
inlineinherited |
|
inlineinherited |
|
inline |
Provides the actual number of defined effects in the template chain.
|
inlineoverridevirtualinherited |
|
inlineoverridevirtual |
Writes the samples passed in the buffer and applies the effects before writing the result to the output defined in the constructor. The processed block is written in a single call to the downstream Stream/Print (instead of one call per sample) to avoid the per-sample dispatch overhead that would otherwise starve a real-time producer such as a Bluetooth A2DP sink.
Reimplemented from AudioStream.
|
inlinevirtualinherited |
Writes len bytes of silence (=0).
|
inlinevirtualinherited |
Writes len bytes of silence (=0).
|
protectedinherited |
|
protected |
|
protected |
|
protected |
|
protected |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protected |
|
protected |
|
protected |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |