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

Interrupt-driven MP3 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 <BackgroundAudioMP3.h>

Public Member Functions

 BackgroundAudioMP3Class (AudioOutputBase &d)
 Construct an MP3 output device using the specified physical audio output.
 
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 MP3 decoder/player. Will initialize the output device and start sending silence immediately.
 
void end ()
 Stops the MP3 decoder process and the calls the output device's end to shut it down, too.
 
bool playing ()
 Determines if the MP3 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 MP3 file is present in the buffer.
 
uint32_t frames ()
 Get number of "frames" (1152 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 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.
 
void flush ()
 Flushes any existing raw data, resets the processor to start a new MP3.
 

Detailed Description

template<class DataBuffer>
class BackgroundAudioMP3Class< DataBuffer >

Interrupt-driven MP3 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

◆ BackgroundAudioMP3Class()

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

Construct an MP3 output device using the specified physical audio output.

Parameters
[in]dAudioOutputBase device to send data to (or AudioMixerInput)

Member Function Documentation

◆ available()

template<class DataBuffer >
size_t BackgroundAudioMP3Class< 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 BackgroundAudioMP3Class< 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 BackgroundAudioMP3Class< DataBuffer >::begin ( )
inline

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

Returns
True on success, false if already started.

◆ done()

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

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

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

◆ dumps()

template<class DataBuffer >
uint32_t BackgroundAudioMP3Class< 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 BackgroundAudioMP3Class< DataBuffer >::errors ( )
inline

Get the number of decoder errors since begin

Returns
Number of decode errors encountered

◆ flush()

template<class DataBuffer >
void BackgroundAudioMP3Class< 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 BackgroundAudioMP3Class< DataBuffer >::frames ( )
inline

Get number of "frames" (1152 stereo samples) processed by decoder.

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

◆ paused()

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

Determine if the playback is paused.

Returns
True of WAV playback has been paused

◆ playing()

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

Determines if the MP3 decoder has been started.

Returns
True if running

◆ setDevice()

template<class DataBuffer >
bool BackgroundAudioMP3Class< 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 BackgroundAudioMP3Class< 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 BackgroundAudioMP3Class< 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 BackgroundAudioMP3Class< 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 BackgroundAudioMP3Class< 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: