caudio/Source/cwavdecoder.cpp
Raynaldo Rivera 9cac8153da
2009-06-21 03:24:30 +00:00

83 lines
1.8 KiB
C++

#include "../Headers/cWavDecoder.h"
namespace cAudio{
cWavDecoder::cWavDecoder(IDataSource* stream) : IAudioDecoder(stream)
{
Stream->seek(4,false);
Stream->read(&mChunkSize,4);
Stream->seek(16,false);
Stream->read(&mSubChunk1Size,4);
Stream->read(&mFormat,sizeof(short));
Stream->read(&mChannels,sizeof(short));
Stream->read(&mSampleRate,sizeof(int));
Stream->read(&mByteRate,sizeof(int));
Stream->read(&mBlockAlign,sizeof(short));
Stream->read(&mBitsPerSample,sizeof(short));
Stream->seek(40,false);
Stream->read(&mDataSize,sizeof(int));
Stream->seek(44,false);
mSampleRate += mSampleRate;
}
cWavDecoder::~cWavDecoder()
{
mChunkSize = NULL;
mSubChunk1Size = NULL;
mFormat = NULL;
mChannels = NULL;
mSampleRate = NULL;
mByteRate = NULL;
mBlockAlign = NULL;
mBitsPerSample = NULL;
mDataSize = NULL;
}
//!Returns wav channel format
AudioFormats cWavDecoder::getFormat()
{
if(mChannels = 1)
return EAF_16BIT_MONO;
else
return EAF_16BIT_STEREO;
}
//!Returns wav data frequency
int cWavDecoder::getFrequency()
{
return mSampleRate;
}
//!Returns if seeking is supported
bool cWavDecoder::isSeekingSupported()
{
return false;
}
//!Reads wav data
int cWavDecoder::readAudioData(void* output, int amount)
{
return Stream->read(output,amount);
}
//!Sets data reader position
bool cWavDecoder::setPosition(int position, bool relative)
{
Stream->seek(position,relative);
return true;
}
//!Seeks wav data
bool cWavDecoder::seek(int seconds,bool relative)
{
return false;
}
}