arduino-audio-tools
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
InputMixer< T > Class Template Reference

MixerStream is mixing the input from Multiple Input Streams. All streams must have the same audo format (sample rate, channels, bits per sample). More...

#include <AudioStreams.h>

Inheritance diagram for InputMixer< T >:
AudioStream BaseStream AudioInfoSupport AudioInfoSource Stream Print

Public Member Functions

void add (Stream &in, int weight=100)
 Adds a new 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 ()
 provides the actual output AudioInfo: this is usually the same as audioInfo() unless we use a transforming stream
 
virtual int available () override
 
virtual int availableForWrite () override
 
virtual bool begin ()
 
virtual bool begin (AudioInfo info)
 
virtual void clearNotifyAudioChange ()
 Deletes all change notify subscriptions.
 
void end () override
 Remove all input streams.
 
virtual 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
 Provides the data from all streams mixed together.
 
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 set (int channel, Stream &in)
 Replaces a stream at the indicated channel.
 
virtual void setAudioInfo (AudioInfo newInfo) override
 Defines the input AudioInfo.
 
void setLimitToAvailableData (bool flag)
 Limit the copy to the available data of all streams: stops to provide data when any stream has ended.
 
void setNotifyActive (bool flag)
 Deactivate/Reactivate automatic AudioInfo updates: (default is active)
 
void setRetryCount (int retry)
 Defines the maximum number of retrys to get data from an input before we abort the read and provide empty data.
 
void setWeight (int channel, int weight)
 Dynamically update the new weight for the indicated channel: If you set it to 0 it is muted (and the stream is not read any more). We recommend to use values between 1 and 100.
 
int size ()
 Number of stremams to which are mixed together.
 
virtual 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 availableBytes ()
 Provides the available bytes from the first stream with data.
 
virtual int not_supported (int out, const char *msg="")
 
void notifyAudioChange (AudioInfo info)
 
int readBytesVector (T *p_data, int byteCount)
 mixing using a vector of samples
 
void refillReadBuffer ()
 
void resultAdd (float fact)
 
void resultClear ()
 

Protected Attributes

int _timeout = 10
 
Vector< T > current_vect
 
int frame_size = 4
 
AudioInfo info
 
bool is_notify_active = true
 
bool limit_available_data = false
 
Vector< AudioInfoSupport * > notify_vector
 
Vector< int > result_vect
 
int retry_count = 5
 
Vector< Stream * > streams {0}
 
RingBuffer< uint8_t > tmp_in {0}
 
RingBuffer< uint8_t > tmp_out {0}
 
int total_weights = 0
 
Vector< int > weights {0}
 

Detailed Description

template<typename T>
class audio_tools::InputMixer< T >

MixerStream is mixing the input from Multiple Input Streams. All streams must have the same audo format (sample rate, channels, bits per sample).

Author
Phil Schatzmann

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