BackgroundAudio 1.3.3
Loading...
Searching...
No Matches
Public Member Functions | List of all members
BackgroundAudioAACClass< DataBuffer > Class Template Reference

Interrupt-driven AAC decoder. Generates a full frame of samples each cycle and uses the RawBuffer to safely hand data from the app to the decompressor. More...

#include <BackgroundAudioAAC.h>

Public Member Functions

 BackgroundAudioAACClass (AudioOutputBase &d)
 Construct an AAC decoder with a given AudioOutputBase.
 
bool setDevice (AudioOutputBase *d)
 Set an output device before begin
 
void setGain (float scale)
 Set the gain multiplier (volume) for the stream. Takes effect immediately.
 
bool begin ()
 Starts the background AAC decoder/player. Will initialize the output device and start sending silence immediately.
 
void end ()
 Stops the AAC decoder process and the calls the output device's end to shut it down, too.
 
bool playing ()
 Determines if the AAC decoder has been started.
 
size_t write (const void *data, size_t len)
 Writes a block of raw data to the decoder's buffer.
 
size_t availableForWrite ()
 Gets number of bytes available to write to raw buffer.
 
size_t available ()
 Gets number of bytes already in the raw buffer.
 
bool done ()
 Determine if no more AAC file is present in the buffer.
 
uint32_t frames ()
 Get number of "frames" (1024 or 2048 stereo samples) processed by decoder.
 
uint32_t shifts ()
 Get the number of input data shifts processed by decoder since begin
 
uint32_t underflows ()
 Get the number of times the MP3 decoder has underflowed waiting on raw data since begin
 
uint32_t errors ()
 Get the number of decoder errors since begin
 
uint32_t dumps ()
 Get the number of full buffer dumps (catastrophic data error) since begin
 
void flush ()
 Flushes any existing raw data, resets the processor to start a new MP3.
 
void pause ()
 Pause the decoder. Won't process raw input data and will transmit silence.
 
bool paused ()
 Determine if the playback is paused.
 
void unpause ()
 Unpause previously paused playback. Will start processing input data again.
 

Detailed Description

template<class DataBuffer>
class BackgroundAudioAACClass< DataBuffer >

Interrupt-driven AAC decoder. Generates a full frame of samples each cycle and uses the RawBuffer to safely hand data from the app to the decompressor.

Template Parameters
DataBufferThe type of raw data buffer, either normal RawDataBuffer or ROMDataBuffer as appropriate.

Constructor & Destructor Documentation

◆ BackgroundAudioAACClass()

template<class DataBuffer >
BackgroundAudioAACClass< DataBuffer >::BackgroundAudioAACClass ( AudioOutputBase &  d)
inline

Construct an AAC decoder with a given AudioOutputBase.

Parameters
[in]dAudioOutputBase device (MixerInput or I2S or PWM, etc.) to decode tp

Member Function Documentation

◆ available()

template<class DataBuffer >
size_t BackgroundAudioAACClass< DataBuffer >::available ( )
inline

Gets number of bytes already in the raw buffer.

Returns
Bytes of raw data in the buffer

◆ availableForWrite()

template<class DataBuffer >
size_t BackgroundAudioAACClass< DataBuffer >::availableForWrite ( )
inline

Gets number of bytes available to write to raw buffer.

For ROM buffers, this is always 0 after a write has happened. Because ROM buffers don't actually allocate any RAM for buffering and simply store the pointer passed in from write there is no real space available for an app to write to. An app can simply flush and write a new complete buffer if needed ignoring availableForWrite in the ROM case.

Returns
Bytes that can be written

◆ begin()

template<class DataBuffer >
bool BackgroundAudioAACClass< DataBuffer >::begin ( )
inline

Starts the background AAC decoder/player. Will initialize the output device and start sending silence immediately.

Note that this needs to allocate a significant large and contiguout amount of heap to function, so it should be called early on in the program to ensure that allocation can succeed.

Returns
True on success, false if already started.

◆ done()

template<class DataBuffer >
bool BackgroundAudioAACClass< DataBuffer >::done ( )
inline

Determine if no more AAC file is present in the buffer.

Returns
True if no raw AAC data is still left to process

◆ dumps()

template<class DataBuffer >
uint32_t BackgroundAudioAACClass< DataBuffer >::dumps ( )
inline

Get the number of full buffer dumps (catastrophic data error) since begin

Returns
Number of complete buffer throw-aways

◆ errors()

template<class DataBuffer >
uint32_t BackgroundAudioAACClass< DataBuffer >::errors ( )
inline

Get the number of decoder errors since begin

Returns
Number of decode errors encountered

◆ flush()

template<class DataBuffer >
void BackgroundAudioAACClass< DataBuffer >::flush ( )
inline

Flushes any existing raw data, resets the processor to start a new MP3.

This is only needed to abort a currently playing MP3 file (i.e. skipping a track in the middle). Multiple MP3 files can just be concatenated together in the input buffer with write

◆ frames()

template<class DataBuffer >
uint32_t BackgroundAudioAACClass< DataBuffer >::frames ( )
inline

Get number of "frames" (1024 or 2048 stereo samples) processed by decoder.

Returns
Number of frames, where frames are framelen stereo samples in size

◆ paused()

template<class DataBuffer >
bool BackgroundAudioAACClass< DataBuffer >::paused ( )
inline

Determine if the playback is paused.

Returns
True of WAV playback has been paused

◆ playing()

template<class DataBuffer >
bool BackgroundAudioAACClass< DataBuffer >::playing ( )
inline

Determines if the AAC decoder has been started.

Returns
True if running

◆ setDevice()

template<class DataBuffer >
bool BackgroundAudioAACClass< DataBuffer >::setDevice ( AudioOutputBase *  d)
inline

Set an output device before begin

Parameters
[in]dPointer to AudioOutputDevice to send decoded data to
Returns
True on success

◆ setGain()

template<class DataBuffer >
void BackgroundAudioAACClass< DataBuffer >::setGain ( float  scale)
inline

Set the gain multiplier (volume) for the stream. Takes effect immediately.

Parameters
[in]scaleFloating point value from 0.0....16.0 to multiply all audio data by

◆ shifts()

template<class DataBuffer >
uint32_t BackgroundAudioAACClass< DataBuffer >::shifts ( )
inline

Get the number of input data shifts processed by decoder since begin

Returns
Number of times data has been shifted in the raw input buffer

◆ underflows()

template<class DataBuffer >
uint32_t BackgroundAudioAACClass< DataBuffer >::underflows ( )
inline

Get the number of times the MP3 decoder has underflowed waiting on raw data since begin

Returns
Number of frames of underflow data have occurred

◆ write()

template<class DataBuffer >
size_t BackgroundAudioAACClass< DataBuffer >::write ( const void *  data,
size_t  len 
)
inline

Writes a block of raw data to the decoder's buffer.

Copies up to len bytes into the raw buffer for the object. Can be called before begin, and can write less fewer than the number of bytes requested if there is not enough space. Will not block.

For ROM buffers this does not actually copy data, only the pointer. Therefore, for ROM buffers you cannot concatenate data by calling multiple writes because the second write will throw out all the data from the first one. Use flush and write when ready for a completely new buffer.

Parameters
[in]dataUncompressed input data
[in]lenNumber of bytes to write
Returns
Number of bytes written

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