Now that we have implemented the basic audio streaming system, it is time to use a couple of third-party libraries to read compressed audio files. Basically, what we need to do is to override the StreamWaveData()
function inside the clStreamingWaveDataProvider
class. This function, in turn, calls the ReadFromFile()
method where the actual decoding is done. The initialization of the decoder is done in the constructor and, for the abstract iDecodingProvider
class, we only store the reference to a data blob. All the compressed data for the file is stored in a clBlob
object:
class iDecodingProvider: public StreamingWaveDataProvider { protected: virtual int ReadFromFile( int Size, int BytesRead ) = 0; clPtr<clBlob> FRawData; public: bool FLoop; bool FEof; iDecodingProvider( const clPtr<clBlob>& Blob ) : FRawData( Blob ) , FLoop( false ) , FEof( false ) {} virtual bool IsEOF() const { return FEof; }
The StreamWaveData...