#include <CodedAudioFileReader.h>

Inheritance diagram for CodedAudioFileReader:
Inheritance graph
Collaboration diagram for CodedAudioFileReader:
Collaboration graph

Public Types

enum  CacheMode { CacheInTemporaryFile, CacheInMemory }
 
enum  DecodeMode { DecodeAtOnce, DecodeThreaded }
 
typedef std::map< QString, QString > TagMap
 Return any tag pairs picked up from the audio file. More...
 

Signals

void progress (int)
 
void frameCountChanged ()
 

Public Member Functions

virtual ~CodedAudioFileReader ()
 
floatvec_t getInterleavedFrames (sv_frame_t start, sv_frame_t count) const override
 Return interleaved samples for count frames from index start. More...
 
sv_samplerate_t getNativeRate () const override
 Return the native samplerate of the file. More...
 
QString getLocalFilename () const override
 Return the local file path of the audio data. More...
 
bool isQuicklySeekable () const override
 Intermediate cache means all CodedAudioFileReaders are quickly seekable. More...
 
bool isOK () const
 Return true if the file was opened successfully and no error has subsequently occurred. More...
 
virtual QString getError () const
 If isOK() is false, return an error string. More...
 
sv_frame_t getFrameCount () const
 Return the number of audio sample frames (i.e. More...
 
int getChannelCount () const
 Return the number of channels in the file. More...
 
sv_samplerate_t getSampleRate () const
 Return the samplerate at which the file is being read. More...
 
virtual QString getLocation () const =0
 Return the location of the audio data in the reader (as passed in to the FileSource constructor, for example). More...
 
virtual QString getTitle () const =0
 Return the title of the work in the audio file, if known. More...
 
virtual QString getMaker () const =0
 Return the "maker" of the work in the audio file, if known. More...
 
virtual TagMap getTags () const
 
virtual int getDecodeCompletion () const
 Return a percentage value indicating how far through decoding the audio file we are. More...
 
virtual bool isUpdating () const
 Return true if decoding is still in progress and the frame count may change. More...
 
virtual std::vector< floatvec_tgetDeInterleavedFrames (sv_frame_t start, sv_frame_t count) const
 Return de-interleaved samples for count frames from index start. More...
 

Protected Member Functions

 CodedAudioFileReader (CacheMode cacheMode, sv_samplerate_t targetRate, bool normalised)
 
void initialiseDecodeCache ()
 
void setFramesToTrim (sv_frame_t fromStart, sv_frame_t fromEnd)
 
void addSamplesToDecodeCache (float **samples, sv_frame_t nframes)
 
void addSamplesToDecodeCache (float *samplesInterleaved, sv_frame_t nframes)
 
void addSamplesToDecodeCache (const floatvec_t &interleaved)
 
void finishDecodeCache ()
 
bool isDecodeCacheInitialised () const
 
void startSerialised (QString id, const std::atomic< bool > *cancelled)
 
void endSerialised ()
 

Protected Attributes

QMutex m_cacheMutex
 
CacheMode m_cacheMode
 
floatvec_t m_data
 
QMutex m_dataLock
 
bool m_initialised
 
Serialiserm_serialiser
 
sv_samplerate_t m_fileRate
 
QString m_cacheFileName
 
SNDFILE * m_cacheFileWritePtr
 
WavFileReaderm_cacheFileReader
 
float * m_cacheWriteBuffer
 
sv_frame_t m_cacheWriteBufferIndex
 
sv_frame_t m_cacheWriteBufferFrames
 
breakfastquay::Resampler * m_resampler
 
float * m_resampleBuffer
 
int m_resampleBufferFrames
 
sv_frame_t m_fileFrameCount
 
bool m_normalised
 
float m_max
 
float m_gain
 
sv_frame_t m_trimFromStart
 
sv_frame_t m_trimFromEnd
 
sv_frame_t m_clippedCount
 
sv_frame_t m_firstNonzero
 
sv_frame_t m_lastNonzero
 
sv_frame_t m_frameCount
 
int m_channelCount
 
sv_samplerate_t m_sampleRate
 

Private Member Functions

void pushCacheWriteBufferMaybe (bool final)
 
sv_frame_t pushBuffer (float *interleaved, sv_frame_t sz, bool final)
 
void pushBufferResampling (float *interleaved, sv_frame_t sz, double ratio, bool final)
 
void pushBufferNonResampling (float *interleaved, sv_frame_t sz)
 

Detailed Description

Definition at line 40 of file CodedAudioFileReader.h.

Member Typedef Documentation

typedef std::map<QString, QString> AudioFileReader::TagMap
inherited

Return any tag pairs picked up from the audio file.

See also getTitle and getMaker, and note that a reader which does not implement getTags may still return values from those.

Definition at line 117 of file AudioFileReader.h.

Member Enumeration Documentation

Enumerator
CacheInTemporaryFile 
CacheInMemory 

Definition at line 47 of file CodedAudioFileReader.h.

Enumerator
DecodeAtOnce 
DecodeThreaded 

Definition at line 52 of file CodedAudioFileReader.h.

Constructor & Destructor Documentation

CodedAudioFileReader::CodedAudioFileReader ( CacheMode  cacheMode,
sv_samplerate_t  targetRate,
bool  normalised 
)
protected

Member Function Documentation

floatvec_t CodedAudioFileReader::getInterleavedFrames ( sv_frame_t  start,
sv_frame_t  count 
) const
overridevirtual

Return interleaved samples for count frames from index start.

The resulting vector will contain count * getChannelCount() samples (or fewer if end of file is reached).

The subclass implementations of this function must be thread-safe – that is, safe to call from multiple threads with different arguments on the same object at the same time.

Implements AudioFileReader.

Definition at line 550 of file CodedAudioFileReader.cpp.

References CacheInMemory, CacheInTemporaryFile, WavFileReader::getInterleavedFrames(), AudioFileReader::isOK(), m_cacheFileReader, m_cacheMode, AudioFileReader::m_channelCount, m_data, m_dataLock, m_gain, m_initialised, m_normalised, and SVDEBUG.

sv_samplerate_t CodedAudioFileReader::getNativeRate ( ) const
inlineoverridevirtual

Return the native samplerate of the file.

This will differ from getSampleRate() if the file is being resampled because it was requested to open at a different rate from native.

Reimplemented from AudioFileReader.

Definition at line 59 of file CodedAudioFileReader.h.

QString CodedAudioFileReader::getLocalFilename ( ) const
inlineoverridevirtual

Return the local file path of the audio data.

This is the filesystem location most likely to contain readable audio data, but it may be in a different place or format from the originally specified location - for example, if the file has been retrieved and decoded, then it will be the (possibly temporary) decode target file.

This returns a non-empty value only if there is some local filename that contains exactly the audio data being provided by this reader. In some cases this may not exist, for example when a file has been resampled or normalised directly into a memory buffer. In this case, return an empty string.

See also getLocation().

Implements AudioFileReader.

Definition at line 61 of file CodedAudioFileReader.h.

bool CodedAudioFileReader::isQuicklySeekable ( ) const
inlineoverridevirtual

Intermediate cache means all CodedAudioFileReaders are quickly seekable.

Implements AudioFileReader.

Definition at line 64 of file CodedAudioFileReader.h.

void CodedAudioFileReader::progress ( int  )
signal
void CodedAudioFileReader::setFramesToTrim ( sv_frame_t  fromStart,
sv_frame_t  fromEnd 
)
protected

Definition at line 101 of file CodedAudioFileReader.cpp.

References m_trimFromEnd, and m_trimFromStart.

Referenced by MP3FileReader::filter(), and MP3FileReader::MP3FileReader().

void CodedAudioFileReader::addSamplesToDecodeCache ( float **  samples,
sv_frame_t  nframes 
)
protected
void CodedAudioFileReader::addSamplesToDecodeCache ( float *  samplesInterleaved,
sv_frame_t  nframes 
)
protected
void CodedAudioFileReader::addSamplesToDecodeCache ( const floatvec_t interleaved)
protected
bool CodedAudioFileReader::isDecodeCacheInitialised ( ) const
inlineprotected
void CodedAudioFileReader::startSerialised ( QString  id,
const std::atomic< bool > *  cancelled 
)
protected

Definition at line 108 of file CodedAudioFileReader.cpp.

References m_serialiser.

Referenced by MP3FileReader::accept().

void CodedAudioFileReader::endSerialised ( )
protected
sv_frame_t CodedAudioFileReader::pushBuffer ( float *  interleaved,
sv_frame_t  sz,
bool  final 
)
private
void CodedAudioFileReader::pushBufferResampling ( float *  interleaved,
sv_frame_t  sz,
double  ratio,
bool  final 
)
private
bool AudioFileReader::isOK ( ) const
inlineinherited
virtual QString AudioFileReader::getError ( ) const
inlinevirtualinherited

If isOK() is false, return an error string.

Reimplemented in MP3FileReader, WavFileReader, BQAFileReader, and DecodingWavFileReader.

Definition at line 43 of file AudioFileReader.h.

sv_frame_t AudioFileReader::getFrameCount ( ) const
inlineinherited
int AudioFileReader::getChannelCount ( ) const
inlineinherited
sv_samplerate_t AudioFileReader::getSampleRate ( ) const
inlineinherited

Return the samplerate at which the file is being read.

This is the rate requested when the file was opened, which may differ from the native rate of the file (in which case the file will be resampled as it is read).

Definition at line 62 of file AudioFileReader.h.

References AudioFileReader::m_sampleRate.

Referenced by AudioFileReaderFactory::createReader(), DecodingWavFileReader::DecodingWavFileReader(), AudioFileSizeEstimator::estimate(), ReadOnlyWaveFileModel::getSampleRate(), and ReadOnlyWaveFileModel::ReadOnlyWaveFileModel().

virtual QString AudioFileReader::getLocation ( ) const
pure virtualinherited

Return the location of the audio data in the reader (as passed in to the FileSource constructor, for example).

This might be a remote URL.

See also getLocalFilename().

Implemented in MP3FileReader, WavFileReader, BQAFileReader, and DecodingWavFileReader.

Referenced by ReadOnlyWaveFileModel::getLocation(), and AudioFileReader::getNativeRate().

virtual QString AudioFileReader::getTitle ( ) const
pure virtualinherited

Return the title of the work in the audio file, if known.

This may be implemented by subclasses that support file tagging. This is not the same thing as the file name.

Implemented in MP3FileReader, WavFileReader, BQAFileReader, and DecodingWavFileReader.

Referenced by AudioFileReader::getNativeRate(), ReadOnlyWaveFileModel::getTitle(), and ReadOnlyWaveFileModel::ReadOnlyWaveFileModel().

virtual QString AudioFileReader::getMaker ( ) const
pure virtualinherited

Return the "maker" of the work in the audio file, if known.

This could represent almost anything (band, composer, conductor, artist etc).

Implemented in MP3FileReader, WavFileReader, BQAFileReader, and DecodingWavFileReader.

Referenced by ReadOnlyWaveFileModel::getMaker(), and AudioFileReader::getNativeRate().

virtual TagMap AudioFileReader::getTags ( ) const
inlinevirtualinherited

Reimplemented in MP3FileReader.

Definition at line 118 of file AudioFileReader.h.

References AudioFileReader::isQuicklySeekable().

virtual int AudioFileReader::getDecodeCompletion ( ) const
inlinevirtualinherited

Return a percentage value indicating how far through decoding the audio file we are.

This should be implemented by subclasses that will not know exactly how long the audio file is (in sample frames) until it has been completely decoded. A reader that initialises the frame count directly within its constructor should always return 100 from this.

Reimplemented in MP3FileReader, WavFileReader, BQAFileReader, and DecodingWavFileReader.

Definition at line 135 of file AudioFileReader.h.

Referenced by ReadOnlyWaveFileModel::isReady().

virtual bool AudioFileReader::isUpdating ( ) const
inlinevirtualinherited

Return true if decoding is still in progress and the frame count may change.

Reimplemented in MP3FileReader, WavFileReader, BQAFileReader, and DecodingWavFileReader.

Definition at line 141 of file AudioFileReader.h.

References AudioFileReader::frameCountChanged(), AudioFileReader::getDeInterleavedFrames(), and AudioFileReader::getInterleavedFrames().

Referenced by ReadOnlyWaveFileModel::isReady().

vector< floatvec_t > AudioFileReader::getDeInterleavedFrames ( sv_frame_t  start,
sv_frame_t  count 
) const
virtualinherited

Return de-interleaved samples for count frames from index start.

Implemented in this class (it calls getInterleavedFrames and de-interleaves). The resulting vector will contain getChannelCount() sample blocks of count samples each (or fewer if end of file is reached).

Definition at line 21 of file AudioFileReader.cpp.

References AudioFileReader::getChannelCount(), and AudioFileReader::getInterleavedFrames().

Referenced by AudioFileReader::isUpdating().

void AudioFileReader::frameCountChanged ( )
signalinherited

Member Data Documentation

QMutex CodedAudioFileReader::m_cacheMutex
protected
CacheMode CodedAudioFileReader::m_cacheMode
protected
floatvec_t CodedAudioFileReader::m_data
protected
QMutex CodedAudioFileReader::m_dataLock
mutableprotected

Definition at line 107 of file CodedAudioFileReader.h.

Referenced by getInterleavedFrames(), and pushBufferNonResampling().

bool CodedAudioFileReader::m_initialised
protected
Serialiser* CodedAudioFileReader::m_serialiser
protected

Definition at line 109 of file CodedAudioFileReader.h.

Referenced by endSerialised(), startSerialised(), and ~CodedAudioFileReader().

QString CodedAudioFileReader::m_cacheFileName
protected

Definition at line 112 of file CodedAudioFileReader.h.

Referenced by initialiseDecodeCache(), and ~CodedAudioFileReader().

SNDFILE* CodedAudioFileReader::m_cacheFileWritePtr
protected
WavFileReader* CodedAudioFileReader::m_cacheFileReader
protected
float* CodedAudioFileReader::m_cacheWriteBuffer
protected
sv_frame_t CodedAudioFileReader::m_cacheWriteBufferIndex
protected
sv_frame_t CodedAudioFileReader::m_cacheWriteBufferFrames
protected

Definition at line 117 of file CodedAudioFileReader.h.

Referenced by initialiseDecodeCache(), and pushCacheWriteBufferMaybe().

breakfastquay::Resampler* CodedAudioFileReader::m_resampler
protected
float* CodedAudioFileReader::m_resampleBuffer
protected
int CodedAudioFileReader::m_resampleBufferFrames
protected

Definition at line 121 of file CodedAudioFileReader.h.

Referenced by initialiseDecodeCache(), and pushBufferResampling().

sv_frame_t CodedAudioFileReader::m_fileFrameCount
protected

Definition at line 122 of file CodedAudioFileReader.h.

Referenced by finishDecodeCache(), pushBuffer(), and pushBufferResampling().

bool CodedAudioFileReader::m_normalised
protected
float CodedAudioFileReader::m_max
protected

Definition at line 125 of file CodedAudioFileReader.h.

Referenced by finishDecodeCache(), and pushBufferNonResampling().

float CodedAudioFileReader::m_gain
protected
sv_frame_t CodedAudioFileReader::m_trimFromStart
protected

Definition at line 128 of file CodedAudioFileReader.h.

Referenced by addSamplesToDecodeCache(), and setFramesToTrim().

sv_frame_t CodedAudioFileReader::m_trimFromEnd
protected
sv_frame_t CodedAudioFileReader::m_clippedCount
protected

Definition at line 131 of file CodedAudioFileReader.h.

Referenced by finishDecodeCache(), and pushBufferNonResampling().

sv_frame_t CodedAudioFileReader::m_firstNonzero
protected

Definition at line 132 of file CodedAudioFileReader.h.

Referenced by finishDecodeCache(), and pushBufferNonResampling().

sv_frame_t CodedAudioFileReader::m_lastNonzero
protected

Definition at line 133 of file CodedAudioFileReader.h.

Referenced by finishDecodeCache(), and pushBufferNonResampling().


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