2013-01-12 03:20:40 +00:00
|
|
|
#ifndef _XASOUNDSTREAMDECODER_H_
|
|
|
|
#define _XASOUNDSTREAMDECODER_H_
|
|
|
|
|
|
|
|
#include "WavOutputStream.h"
|
|
|
|
#include "StdStream.h"
|
|
|
|
#include "MemStream.h"
|
|
|
|
|
|
|
|
class XaSoundStreamDecoder
|
|
|
|
{
|
|
|
|
public:
|
2018-04-30 21:01:23 +01:00
|
|
|
XaSoundStreamDecoder();
|
|
|
|
virtual ~XaSoundStreamDecoder();
|
2013-01-12 03:20:40 +00:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
void Execute(Framework::CStream&);
|
2013-01-12 03:20:40 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
enum STATE
|
|
|
|
{
|
|
|
|
STATE_CHECK_HEADER,
|
|
|
|
STATE_READ_HEADER,
|
|
|
|
STATE_CHECK_DATA_HEADER,
|
|
|
|
STATE_READ_DATA_HEADER,
|
|
|
|
STATE_READ_DATA,
|
|
|
|
};
|
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
bool IsPcm() const;
|
|
|
|
void DecodePcmSamples(uint8*, unsigned int);
|
|
|
|
void DecodeAdpcmSamples(uint8*);
|
|
|
|
void MixChannels();
|
2013-01-12 03:20:40 +00:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
STATE m_state;
|
|
|
|
uint32 m_samplingRate;
|
|
|
|
uint32 m_bitDepth;
|
|
|
|
uint32 m_channelCount;
|
|
|
|
uint32 m_interleaveSize;
|
|
|
|
uint32 m_dataSize;
|
2013-01-12 03:20:40 +00:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
int32 m_leftPredictor[2];
|
|
|
|
int32 m_rightPredictor[2];
|
|
|
|
int16* m_channelBuffer[2];
|
|
|
|
uint32 m_channelBufferSize;
|
2013-01-12 03:20:40 +00:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
uint32 m_currentAddress;
|
|
|
|
uint32 m_currentChannel;
|
2013-01-12 03:20:40 +00:00
|
|
|
|
|
|
|
#ifdef _DEBUG
|
2018-04-30 21:01:23 +01:00
|
|
|
Framework::CStdStream* m_outputFile;
|
|
|
|
Framework::CWavOutputStream* m_wavOutput;
|
2013-01-12 03:20:40 +00:00
|
|
|
#endif
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|