You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.2 KiB
85 lines
2.2 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//============================================================================= |
|
|
|
#ifndef XWVFILE_H |
|
#define XWVFILE_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#pragma pack(1) |
|
|
|
#define XWV_ID (('X'<<24)|('W'<<16)|('V'<<8)|(' '<<0)) |
|
#define XWV_VERSION 4 |
|
|
|
enum xwvSampleRate_t |
|
{ |
|
XWV_RATE_11025 = 0, |
|
XWV_RATE_22050 = 1, |
|
XWV_RATE_44100 = 2, |
|
}; |
|
|
|
enum xwvFormat_t |
|
{ |
|
XWV_FORMAT_PCM = 0, |
|
XWV_FORMAT_XMA = 1, |
|
XWV_FORMAT_ADPCM = 2, |
|
}; |
|
|
|
// generated in big-endian |
|
struct xwvHeader_t |
|
{ |
|
unsigned int id; |
|
unsigned int version; |
|
unsigned int headerSize; // header only |
|
unsigned int staticDataSize; // follows header |
|
unsigned int dataOffset; // start of samples, possibly sector aligned |
|
unsigned int dataSize; // length of samples in bytes |
|
unsigned int numDecodedSamples; // for duration calcs |
|
int loopStart; // -1 = no loop, offset of loop in samples |
|
unsigned short loopBlock; // the xma block where the loop starts |
|
unsigned short numLeadingSamples; // number of leading samples in the loop block to discard |
|
unsigned short numTrailingSamples; // number of trailing samples at the final block to discard |
|
unsigned short vdatSize; // follows seek table |
|
byte format; |
|
byte bitsPerSample; |
|
byte sampleRate; |
|
byte channels; |
|
byte quality; |
|
byte bHasSeekTable; // indicates presence, follows header |
|
byte padding[2]; // created as 0 |
|
|
|
inline unsigned int GetPreloadSize() { return headerSize + staticDataSize; } |
|
|
|
inline int GetBitsPerSample() const { return bitsPerSample; } |
|
|
|
int GetSampleRate() const |
|
{ |
|
int rates[] = {11025, 22050, 44100}; |
|
int rate = sampleRate; |
|
return rates[rate]; |
|
} |
|
|
|
inline int GetChannels() const { return channels; } |
|
|
|
void SetSampleRate( int sampleRateIn ) |
|
{ |
|
byte rate = ( sampleRateIn == 11025 ) ? XWV_RATE_11025 : ( sampleRateIn==22050 )? XWV_RATE_22050 : XWV_RATE_44100; |
|
sampleRate = rate; |
|
} |
|
|
|
inline void SetChannels( int channelsIn ) { channels = channelsIn; } |
|
|
|
inline int GetSeekTableSize() |
|
{ |
|
// seek table is indexed by packets |
|
return bHasSeekTable ? ( dataSize / 2048 ) * sizeof( int ) : 0; |
|
} |
|
}; |
|
|
|
#pragma pack() |
|
|
|
#endif // XWVFILE_H
|
|
|