arduino-audio-tools
Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
audio_tools::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 setOutputStream() before the begin and copy() in the loop. Validated with http://www.2l.no/hires/. More...

#include <CodecFLAC.h>

Inheritance diagram for audio_tools::FLACDecoder:
audio_tools::StreamingDecoder

Public Member Functions

 FLACDecoder (bool isFLAC=false)
 
AudioBaseInfo audioInfo ()
 Provides the last available MP3FrameInfo.
 
void begin ()
 Starts the processing.
 
bool copy ()
 Stream Interface: Process a single frame - only relevant when input stream has been defined.
 
void end ()
 Releases the reserved memory.
 
void flush ()
 Process all data in the buffer.
 
 operator bool ()
 checks if the class is active
 
void setInputStream (Stream &input)
 
void setNotifyAudioChange (AudioBaseInfoDependent &bi)
 Register Output Stream to be notified about changes.
 
void setOgg (bool isOgg)
 
virtual void setOutputStream (Print &out_stream)
 Defines the output Stream.
 
void setTimeout (uint64_t readTimeout=FLAC_READ_TIMEOUT_MS)
 
- Public Member Functions inherited from audio_tools::StreamingDecoder
virtual void setOutputStream (AudioPrint &out_stream)
 Defines the output streams and register to be notified.
 
virtual void setOutputStream (AudioStream &out_stream)
 Defines the output streams and register to be notified.
 

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.
 
size_t readBytes (uint8_t *buffer, size_t len) override
 

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
 
AudioBaseInfo info
 
FLAC__StreamDecoderInitStatus init_status
 
bool is_active = false
 
bool is_ogg = false
 
Streamp_input = nullptr
 
AudioBaseInfoDependentp_notify = nullptr
 
Printp_print = nullptr
 
uint64_t read_timeout_ms = FLAC_READ_TIMEOUT_MS
 
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 setOutputStream() before the begin and copy() in the loop. Validated with http://www.2l.no/hires/.

Author
Phil Schatzmann

Member Function Documentation

◆ setInputStream()

void audio_tools::FLACDecoder::setInputStream ( Stream input)
inlinevirtual

Stream Interfce: Decode directly by taking data from the stream. This is more efficient then feeding the decoder with write: just call copy() in the loop

Implements audio_tools::StreamingDecoder.


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