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

Decoder for FLAC. Depends on https://github.com/pschatzmann/arduino-libflac. We support an efficient streaming API and an very memory intensitiv standard interface. So you should prefer the streaming interface where you call setOutput() before the begin and copy() in the loop. Validated with http://www.2l.no/hires/. More...

#include <CodecFLAC.h>

Inheritance diagram for FLACDecoder:
StreamingDecoder AudioInfoSource AudioInfoSupport

Public Member Functions

 FLACDecoder (bool isOgg=false)
 Default Constructor.
 
 ~FLACDecoder ()
 Destructor - calls end();.
 
virtual void addNotifyAudioChange (AudioInfoSupport &bi)
 Adds target to be notified about audio changes.
 
AudioInfo audioInfo ()
 Provides the audio information for the current stream.
 
virtual AudioInfo audioInfoOut ()
 
bool begin ()
 Starts the processing.
 
virtual void clearNotifyAudioChange ()
 Deletes all change notify subscriptions.
 
bool copy ()
 Stream Interface: Process a single frame - only relevant when input stream has been defined.
 
bool copyAll ()
 Process all available data.
 
void end ()
 Releases the reserved memory.
 
void flush ()
 Process all data in the buffer.
 
bool isNotifyActive ()
 Checks if the automatic AudioInfo update is active.
 
bool isOgg () const
 returns true of the stream is ogg
 
const char * mime () override
 Provides "audio/flac" or "audio/ogg".
 
 operator bool ()
 Checks if the class is active.
 
virtual bool removeNotifyAudioChange (AudioInfoSupport &bi)
 Removes a target in order not to be notified about audio changes.
 
void setInput (Stream &inStream)
 Stream Interface: Decode directly by taking data from the stream.
 
void setMD5 (bool flag)
 Activate/deactivate md5 checking: call this before calling begin()
 
void setNotifyActive (bool flag)
 Deactivate/Reactivate automatic AudioInfo updates: (default is active)
 
void setOgg (bool isOgg)
 
virtual void setOutput (AudioOutput &out_stream)
 Defines the output streams and register to be notified.
 
virtual void setOutput (AudioStream &out_stream)
 Defines the output streams and register to be notified.
 
virtual void setOutput (Print &out_stream)
 Defines the output Stream.
 
void setTimeout (uint64_t readTimeout=10000)
 

Protected Member Functions

bool isEof (int bytes)
 We return eof when we were subsequently getting 0 bytes for the timeout period.
 
bool isInputFromStream ()
 Check if input is directly from stream - instead of writes.
 
void notifyAudioChange (AudioInfo info)
 
size_t readBytes (uint8_t *data, size_t len) override
 Reads bytes from the input stream.
 
void setAudioInfo (AudioInfo newInfo) override
 Defines the input AudioInfo.
 

Static Protected Member Functions

static void error_callback (const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
 Error callback.
 
static FLAC__StreamDecoderReadStatus read_callback (const FLAC__StreamDecoder *decoder, FLAC__byte result_buffer[], size_t *bytes, void *client_data)
 Callback which reads from stream.
 
static FLAC__StreamDecoderWriteStatus write_callback (const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 *const buffer[], void *client_data)
 Output decoded result to final output stream.
 

Protected Attributes

FLAC__StreamDecoder * decoder = nullptr
 
AudioInfo info
 
FLAC__StreamDecoderInitStatus init_status
 
bool is_active = false
 
bool is_md5_checing = false
 
bool is_notify_active = true
 
bool is_ogg = false
 
Vector< AudioInfoSupport * > notify_vector
 
Streamp_input = nullptr
 Input stream for encoded audio data.
 
Printp_print = nullptr
 Output stream for decoded PCM data.
 
uint64_t read_timeout_ms = 10000
 
uint64_t time_last_read = 0
 

Detailed Description

Decoder for FLAC. Depends on https://github.com/pschatzmann/arduino-libflac. We support an efficient streaming API and an very memory intensitiv standard interface. So you should prefer the streaming interface where you call setOutput() before the begin and copy() in the loop. Validated with http://www.2l.no/hires/.

Author
Phil Schatzmann

Member Function Documentation

◆ addNotifyAudioChange()

virtual void addNotifyAudioChange ( AudioInfoSupport bi)
inlinevirtualinherited

◆ audioInfo()

AudioInfo audioInfo ( )
inlinevirtual

Provides the audio information for the current stream.

Returns audio format information such as sample rate, channels, and bits per sample that was determined from the decoded audio stream.

Returns
AudioInfo structure containing format information

Implements StreamingDecoder.

◆ audioInfoOut()

virtual AudioInfo audioInfoOut ( )
inlinevirtualinherited

◆ begin()

bool begin ( )
inlinevirtual

Starts the processing.

Initializes the decoder and prepares it for processing audio data. Must be called before any copy() operations.

Returns
true if initialization was successful, false otherwise

Implements StreamingDecoder.

◆ copy()

bool copy ( )
inlinevirtual

Stream Interface: Process a single frame - only relevant when input stream has been defined.

Implements StreamingDecoder.

◆ copyAll()

bool copyAll ( )
inlineinherited

Process all available data.

Convenience method that calls copy() repeatedly until all available data has been processed.

Returns
true if any data was processed, false if no data was available

◆ end()

void end ( )
inlinevirtual

Releases the reserved memory.

Cleans up any resources allocated by the decoder and stops processing.

Implements StreamingDecoder.

◆ mime()

const char * mime ( )
inlineoverridevirtual

Provides "audio/flac" or "audio/ogg".

Implements StreamingDecoder.

◆ operator bool()

operator bool ( )
inlinevirtual

Checks if the class is active.

Returns
true if the decoder is ready and active, false otherwise

Implements StreamingDecoder.

◆ readBytes()

size_t readBytes ( uint8_t *  data,
size_t  len 
)
inlineoverrideprotectedvirtual

Reads bytes from the input stream.

Derived classes must implement this to read data from their input source.

Parameters
dataBuffer to store the read data
lenMaximum number of bytes to read
Returns
Number of bytes actually read

Implements StreamingDecoder.

◆ setAudioInfo()

void setAudioInfo ( AudioInfo  info)
inlineoverrideprotectedvirtualinherited

Defines the input AudioInfo.

Implements AudioInfoSupport.

◆ setInput()

void setInput ( Stream inStream)
inlineinherited

Stream Interface: Decode directly by taking data from the stream.

This is more efficient than feeding the decoder with write: just call copy() in the loop to process data from the input stream.

Parameters
inStreamThe input stream containing encoded audio data

◆ setOutput() [1/3]

virtual void setOutput ( AudioOutput out_stream)
inlinevirtualinherited

Defines the output streams and register to be notified.

Sets the output stream and registers for audio info change notifications.

Parameters
out_streamThe AudioOutput to write decoded audio data to

Reimplemented in MultiStreamingDecoder.

◆ setOutput() [2/3]

virtual void setOutput ( AudioStream out_stream)
inlinevirtualinherited

Defines the output streams and register to be notified.

Sets the output stream and registers for audio info change notifications.

Parameters
out_streamThe AudioStream to write decoded audio data to

Reimplemented in MultiStreamingDecoder.

◆ setOutput() [3/3]

virtual void setOutput ( Print out_stream)
inlinevirtualinherited

Defines the output Stream.

Sets where the decoded PCM audio data will be written to.

Parameters
out_streamThe Print stream to write decoded audio data to

Reimplemented in StreamingDecoderAdapter, and MultiStreamingDecoder.


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