arduino-audio-tools
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
SupportedRatesStream Class Reference

Resampling stream that is restricted to a fixed list of supported sample rates (e.g. the rates a DAC or codec chip can actually run at). On setAudioInfo() the closest supported rate is selected, the resampler is reconfigured to convert to it, and the corrected AudioInfo (with the supported sample rate) is forwarded to any subscribers/output. More...

#include <SupportedRatesStream.h>

Inheritance diagram for SupportedRatesStream:
AudioStream BaseStream AudioInfoSupport AudioInfoSource Stream Print

Public Member Functions

 SupportedRatesStream ()=default
 
 SupportedRatesStream (AudioOutput &out)
 
 SupportedRatesStream (AudioStream &io)
 
 SupportedRatesStream (Print &out)
 Support for resampling via write.
 
 SupportedRatesStream (Stream &io)
 Support for resampling via write and read.
 
virtual void addNotifyAudioChange (AudioInfoSupport &bi)
 Adds target to be notified about audio changes.
 
virtual AudioInfo audioInfo () override
 provides the actual input AudioInfo
 
AudioInfo audioInfoOut () override
 
int available () override
 
int availableForWrite () override
 
bool begin () override
 
bool begin (AudioInfo newInfo)
 
virtual void clearNotifyAudioChange ()
 Deletes all change notify subscriptions.
 
void end () override
 
void flush () override
 
bool isNotifyActive ()
 Checks if the automatic AudioInfo update is active.
 
virtual operator bool ()
 
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 bool removeNotifyAudioChange (AudioInfoSupport &bi)
 Removes a target in order not to be notified about audio changes.
 
void setAudioInfo (AudioInfo newInfo) override
 Defines the input AudioInfo.
 
void setNotifyActive (bool flag)
 Deactivate/Reactivate automatic AudioInfo updates: (default is active)
 
void setOutput (AudioOutput &out)
 
void setOutput (Print &out)
 Defines/Changes the output target.
 
void setStream (AudioStream &io)
 
void setStream (Stream &io)
 Defines/Changes the input & output.
 
void setSupportedSampleRates (std::vector< int > rates)
 Defines the list of sample rates that the downstream consumer supports.
 
void setWriteBufferSize (int size)
 
std::vector< int > & supportedSampleRates ()
 Provides the list of supported sample rates.
 
size_t write (const uint8_t *data, size_t len) override
 
virtual size_t write (uint8_t ch) override
 
virtual void writeSilence (size_t len)
 Writes len bytes of silence (=0).
 

Protected Member Functions

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

Protected Attributes

int _timeout = 10
 
AudioInfo info
 
bool is_notify_active = true
 
bool needs_resample = true
 
Vector< AudioInfoSupport * > notify_vector
 
Streamp_source = nullptr
 
ResampleStream resampler
 
std::vector< int > supported_rates
 
RingBuffer< uint8_t > tmp_in {0}
 
RingBuffer< uint8_t > tmp_out {0}
 
int write_buffer_size = MAX_SINGLE_CHARS
 

Detailed Description

Resampling stream that is restricted to a fixed list of supported sample rates (e.g. the rates a DAC or codec chip can actually run at). On setAudioInfo() the closest supported rate is selected, the resampler is reconfigured to convert to it, and the corrected AudioInfo (with the supported sample rate) is forwarded to any subscribers/output.

Author
Phil Schatzmann

Constructor & Destructor Documentation

◆ SupportedRatesStream() [1/5]

SupportedRatesStream ( )
default

◆ SupportedRatesStream() [2/5]

SupportedRatesStream ( Print out)
inline

Support for resampling via write.

◆ SupportedRatesStream() [3/5]

SupportedRatesStream ( AudioOutput out)
inline

Support for resampling via write. The audio information is copied from the io

◆ SupportedRatesStream() [4/5]

SupportedRatesStream ( Stream io)
inline

Support for resampling via write and read.

◆ SupportedRatesStream() [5/5]

Support for resampling via write and read. The audio information is copied from the io

Member Function Documentation

◆ addNotifyAudioChange()

virtual void addNotifyAudioChange ( AudioInfoSupport bi)
inlinevirtualinherited

◆ audioInfo()

virtual AudioInfo audioInfo ( )
inlineoverridevirtualinherited

◆ audioInfoOut()

AudioInfo audioInfoOut ( )
inlineoverridevirtual

provides the actual output AudioInfo: this is usually the same as audioInfo() unless we use a transforming stream

Reimplemented from AudioInfoSupport.

◆ available()

int available ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ availableForWrite()

int availableForWrite ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ begin() [1/2]

bool begin ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ begin() [2/2]

bool begin ( AudioInfo  newInfo)
inline

◆ clearNotifyAudioChange()

virtual void clearNotifyAudioChange ( )
inlinevirtualinherited

Deletes all change notify subscriptions.

Reimplemented in RTSPClient< TcpClient, UdpSocket >.

◆ closestSampleRate()

int closestSampleRate ( int  rate)
inlineprotected

Determines the supported sample rate closest to the requested rate.

◆ end()

void end ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ flush()

void flush ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ isNotifyActive()

bool isNotifyActive ( )
inlineinherited

Checks if the automatic AudioInfo update is active.

◆ not_supported()

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

◆ notifyAudioChange()

void notifyAudioChange ( AudioInfo  info)
inlineprotectedinherited

◆ operator bool()

virtual operator bool ( )
inlinevirtualinherited

◆ readBytes()

size_t readBytes ( uint8_t *  data,
size_t  len 
)
inlineoverridevirtual

Reimplemented from AudioStream.

◆ readSilence()

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

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

◆ refillReadBuffer()

void refillReadBuffer ( )
inlineprotectedinherited

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

◆ removeNotifyAudioChange()

virtual bool removeNotifyAudioChange ( AudioInfoSupport bi)
inlinevirtualinherited

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

Reimplemented in RTSPClient< TcpClient, UdpSocket >.

◆ setAudioInfo()

void setAudioInfo ( AudioInfo  info)
inlineoverridevirtual

Defines the input AudioInfo.

Reimplemented from AudioStream.

◆ setNotifyActive()

void setNotifyActive ( bool  flag)
inlineinherited

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

◆ setOutput() [1/2]

void setOutput ( AudioOutput out)
inline

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

◆ setOutput() [2/2]

void setOutput ( Print out)
inline

Defines/Changes the output target.

◆ setStream() [1/2]

void setStream ( AudioStream io)
inline

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

◆ setStream() [2/2]

void setStream ( Stream io)
inline

Defines/Changes the input & output.

◆ setSupportedSampleRates()

void setSupportedSampleRates ( std::vector< int >  rates)
inline

Defines the list of sample rates that the downstream consumer supports.

◆ setWriteBufferSize()

void setWriteBufferSize ( int  size)
inlineinherited

◆ supportedSampleRates()

std::vector< int > & supportedSampleRates ( )
inline

Provides the list of supported sample rates.

◆ write() [1/2]

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

Reimplemented from AudioStream.

◆ write() [2/2]

virtual size_t write ( uint8_t  ch)
inlineoverridevirtualinherited

◆ writeSilence()

virtual void writeSilence ( size_t  len)
inlinevirtualinherited

Writes len bytes of silence (=0).

Member Data Documentation

◆ _timeout

int _timeout = 10
protectedinherited

◆ info

AudioInfo info
protectedinherited

◆ is_notify_active

bool is_notify_active = true
protectedinherited

◆ needs_resample

bool needs_resample = true
protected

◆ notify_vector

Vector<AudioInfoSupport*> notify_vector
protectedinherited

◆ p_source

Stream* p_source = nullptr
protected

◆ resampler

ResampleStream resampler
protected

◆ supported_rates

std::vector<int> supported_rates
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 = MAX_SINGLE_CHARS
protectedinherited

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