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

Dynamic Resampling. We can use a variable factor to speed up or slow down the playback. More...

#include <ResampleStream.h>

Inheritance diagram for ResampleStream:
ReformatBaseStream ModifyingStream AudioStream BaseStream AudioInfoSupport AudioInfoSource Stream Print

Public Member Functions

 ResampleStream ()=default
 
 ResampleStream (AudioOutput &out)
 
 ResampleStream (AudioStream &io)
 
 ResampleStream (Print &out)
 Support for resampling via write.
 
 ResampleStream (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 from, AudioInfo to)
 
bool begin (AudioInfo from, int toRate)
 
bool begin (AudioInfo from, sample_rate_t toRate)
 
virtual bool begin (AudioInfo info)
 
bool begin (AudioInfo info, float step)
 
bool begin (ResampleConfig cfg)
 
virtual void clearNotifyAudioChange ()
 Deletes all change notify subscriptions.
 
ResampleConfig defaultConfig ()
 Provides the default configuraiton.
 
void end () override
 
void flush ()
 When buffering is active, writes the buffered audio to the output.
 
float getByteFactor () override
 
virtual PrintgetPrint ()
 
float getStepSize ()
 Returns the actual step size.
 
float getStepSize (float sampleRateFrom, float sampleRateTo)
 
virtual StreamgetStream ()
 
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 resizeReadResultQueue (int size)
 
void setAudioInfo (AudioInfo newInfo) override
 Defines the input AudioInfo.
 
void setBuffered (bool active)
 Activates buffering to avoid small incremental writes.
 
void setNotifyActive (bool flag)
 Deactivate/Reactivate automatic AudioInfo updates: (default is active)
 
virtual void setOutput (AudioOutput &print)
 
virtual void setOutput (Print &print) override
 Defines/Changes the output target.
 
void setStepSize (float step)
 influence the sample rate
 
virtual void setStream (AudioStream &stream)
 
virtual void setStream (Stream &stream) override
 Defines/Changes the input & output.
 
void setTargetSampleRate (int rate)
 
void setWriteBufferSize (int size)
 
virtual TransformationReader< ReformatBaseStream > & transformationReader ()
 Provides access to the TransformationReader.
 
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

template<typename T >
T getValue (T *data, float frame_idx, int channel)
 get the interpolated value for indicated (float) index value
 
template<typename T >
T lookup (T *data, int frame, int channel)
 lookup value for indicated frame & channel: index starts with -1;
 
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()
 
void setupLastSamples (AudioInfo cfg)
 Sets up the buffer for the rollover samples.
 
template<typename T >
void setupLastSamples (T *data, int frame)
 store last samples to provide values for index -1
 
void setupReader ()
 
template<typename T >
size_t write (Print *p_out, const uint8_t *buffer, size_t bytes, size_t &written)
 Writes the buffer to defined output after resampling.
 

Protected Attributes

int _timeout = 10
 
int bytes_per_frame = 0
 
float idx = 0
 
AudioInfo info
 
bool is_buffer_active = USE_RESAMPLE_BUFFER
 
bool is_first = true
 
bool is_notify_active = true
 
Vector< uint8_tlast_samples {0}
 
Vector< AudioInfoSupport * > notify_vector
 
SingleBuffer< uint8_tout_buffer {0}
 
Printp_out = nullptr
 
Printp_print = nullptr
 
Streamp_stream = nullptr
 
TransformationReader< ReformatBaseStreamreader
 
float step_size = 1.0
 
RingBuffer< uint8_ttmp_in {0}
 
RingBuffer< uint8_ttmp_out {0}
 
int to_sample_rate = 0
 
int write_buffer_size = MAX_SINGLE_CHARS
 

Detailed Description

Dynamic Resampling. We can use a variable factor to speed up or slow down the playback.

Author
Phil Schatzmann
Template Parameters
T

Constructor & Destructor Documentation

◆ ResampleStream() [1/5]

ResampleStream ( )
default

◆ ResampleStream() [2/5]

ResampleStream ( Print out)
inline

Support for resampling via write.

◆ ResampleStream() [3/5]

ResampleStream ( AudioOutput out)
inline

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

◆ ResampleStream() [4/5]

ResampleStream ( Stream io)
inline

Support for resampling via write and read.

◆ ResampleStream() [5/5]

ResampleStream ( AudioStream io)
inline

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 ( )
inlineoverridevirtualinherited

Reimplemented from BaseStream.

◆ availableForWrite()

int availableForWrite ( )
inlineoverridevirtualinherited

Reimplemented from BaseStream.

◆ begin() [1/7]

bool begin ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ begin() [2/7]

bool begin ( AudioInfo  from,
AudioInfo  to 
)
inline

◆ begin() [3/7]

bool begin ( AudioInfo  from,
int  toRate 
)
inline

◆ begin() [4/7]

bool begin ( AudioInfo  from,
sample_rate_t  toRate 
)
inline

◆ begin() [5/7]

virtual bool begin ( AudioInfo  info)
inlinevirtual

◆ begin() [6/7]

bool begin ( AudioInfo  info,
float  step 
)
inline

◆ begin() [7/7]

bool begin ( ResampleConfig  cfg)
inline

◆ clearNotifyAudioChange()

virtual void clearNotifyAudioChange ( )
inlinevirtualinherited

Deletes all change notify subscriptions.

Reimplemented in RTSPClient< TcpClient, UdpSocket >.

◆ defaultConfig()

ResampleConfig defaultConfig ( )
inline

Provides the default configuraiton.

◆ end()

void end ( )
inlineoverridevirtualinherited

Reimplemented from BaseStream.

◆ flush()

void flush ( )
inlinevirtual

When buffering is active, writes the buffered audio to the output.

Reimplemented from BaseStream.

◆ getByteFactor()

float getByteFactor ( )
inlineoverridevirtual

Implements ReformatBaseStream.

◆ getPrint()

virtual Print * getPrint ( )
inlinevirtualinherited

◆ getStepSize() [1/2]

float getStepSize ( )
inline

Returns the actual step size.

◆ getStepSize() [2/2]

float getStepSize ( float  sampleRateFrom,
float  sampleRateTo 
)
inline

calculate the step size the sample rate: e.g. from 44200 to 22100 gives a step size of 2 in order to provide fewer samples

◆ getStream()

virtual Stream * getStream ( )
inlinevirtualinherited

◆ getValue()

template<typename T >
T getValue ( T data,
float  frame_idx,
int  channel 
)
inlineprotected

get the interpolated value for indicated (float) index value

◆ isNotifyActive()

bool isNotifyActive ( )
inlineinherited

Checks if the automatic AudioInfo update is active.

◆ lookup()

template<typename T >
T lookup ( T data,
int  frame,
int  channel 
)
inlineprotected

lookup value for indicated frame & channel: index starts with -1;

◆ 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 
)
inlineoverridevirtualinherited

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 >.

◆ resizeReadResultQueue()

void resizeReadResultQueue ( int  size)
inlineinherited

Define the size of the interal read result queue: same as transformationReader().resizeResultQueue(size)

◆ setAudioInfo()

void setAudioInfo ( AudioInfo  info)
inlineoverridevirtual

Defines the input AudioInfo.

Reimplemented from AudioStream.

◆ setBuffered()

void setBuffered ( bool  active)
inline

Activates buffering to avoid small incremental writes.

◆ setNotifyActive()

void setNotifyActive ( bool  flag)
inlineinherited

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

◆ setOutput() [1/2]

virtual void setOutput ( AudioOutput print)
inlinevirtualinherited

Reimplemented in FormatConverterStream, and EncodedAudioStream.

◆ setOutput() [2/2]

virtual void setOutput ( Print out)
inlineoverridevirtualinherited

Defines/Changes the output target.

Implements ModifyingStream.

Reimplemented in EncodedAudioStream, and FormatConverterStream.

◆ setStepSize()

void setStepSize ( float  step)
inline

influence the sample rate

◆ setStream() [1/2]

virtual void setStream ( AudioStream stream)
inlinevirtualinherited

Reimplemented in FormatConverterStream, and EncodedAudioStream.

◆ setStream() [2/2]

virtual void setStream ( Stream in)
inlineoverridevirtualinherited

Defines/Changes the input & output.

Implements ModifyingStream.

Reimplemented in FormatConverterStream, and EncodedAudioStream.

◆ setTargetSampleRate()

void setTargetSampleRate ( int  rate)
inline

◆ setupLastSamples() [1/2]

void setupLastSamples ( AudioInfo  cfg)
inlineprotected

Sets up the buffer for the rollover samples.

◆ setupLastSamples() [2/2]

template<typename T >
void setupLastSamples ( T data,
int  frame 
)
inlineprotected

store last samples to provide values for index -1

◆ setupReader()

void setupReader ( )
inlineprotectedinherited

◆ setWriteBufferSize()

void setWriteBufferSize ( int  size)
inlineinherited

◆ transformationReader()

virtual TransformationReader< ReformatBaseStream > & transformationReader ( )
inlinevirtualinherited

Provides access to the TransformationReader.

◆ write() [1/3]

size_t write ( const uint8_t data,
size_t  len 
)
inlineoverridevirtual

Reimplemented from AudioStream.

◆ write() [2/3]

template<typename T >
size_t write ( Print p_out,
const uint8_t buffer,
size_t  bytes,
size_t written 
)
inlineprotected

Writes the buffer to defined output after resampling.

◆ write() [3/3]

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

◆ bytes_per_frame

int bytes_per_frame = 0
protected

◆ idx

float idx = 0
protected

◆ info

AudioInfo info
protectedinherited

◆ is_buffer_active

bool is_buffer_active = USE_RESAMPLE_BUFFER
protected

◆ is_first

bool is_first = true
protected

◆ is_notify_active

bool is_notify_active = true
protectedinherited

◆ last_samples

Vector<uint8_t> last_samples {0}
protected

◆ notify_vector

Vector<AudioInfoSupport*> notify_vector
protectedinherited

◆ out_buffer

SingleBuffer<uint8_t> out_buffer {0}
protected

◆ p_out

Print* p_out = nullptr
protected

◆ p_print

Print* p_print = nullptr
protectedinherited

◆ p_stream

Stream* p_stream = nullptr
protectedinherited

◆ reader

TransformationReader<ReformatBaseStream> reader
protectedinherited

◆ step_size

float step_size = 1.0
protected

◆ tmp_in

RingBuffer<uint8_t> tmp_in {0}
protectedinherited

◆ tmp_out

RingBuffer<uint8_t> tmp_out {0}
protectedinherited

◆ to_sample_rate

int to_sample_rate = 0
protected

◆ write_buffer_size

int write_buffer_size = MAX_SINGLE_CHARS
protectedinherited

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