cog/Libraries/MAC/Files/Source/MACLib/APEHeader.h

58 lines
2.1 KiB
C++
Executable File

#ifndef APE_HEADER_H
#define APE_HEADER_H
/*****************************************************************************************
APE header that all APE files have in common (old and new)
*****************************************************************************************/
struct APE_COMMON_HEADER
{
char cID[4]; // should equal 'MAC '
uint16 nVersion; // version number * 1000 (3.81 = 3810)
};
/*****************************************************************************************
APE header structure for old APE files (3.97 and earlier)
*****************************************************************************************/
struct APE_HEADER_OLD
{
char cID[4]; // should equal 'MAC '
uint16 nVersion; // version number * 1000 (3.81 = 3810)
uint16 nCompressionLevel; // the compression level
uint16 nFormatFlags; // any format flags (for future use)
uint16 nChannels; // the number of channels (1 or 2)
uint32 nSampleRate; // the sample rate (typically 44100)
uint32 nHeaderBytes; // the bytes after the MAC header that compose the WAV header
uint32 nTerminatingBytes; // the bytes after that raw data (for extended info)
uint32 nTotalFrames; // the number of frames in the file
uint32 nFinalFrameBlocks; // the number of samples in the final frame
};
struct APE_FILE_INFO;
class CIO;
/*****************************************************************************************
CAPEHeader - makes managing APE headers a little smoother (and the format change as of 3.98)
*****************************************************************************************/
class CAPEHeader
{
public:
CAPEHeader(CIO * pIO);
~CAPEHeader();
int Analyze(APE_FILE_INFO * pInfo);
protected:
int AnalyzeCurrent(APE_FILE_INFO * pInfo);
int AnalyzeOld(APE_FILE_INFO * pInfo);
int FindDescriptor(BOOL bSeek);
CIO * m_pIO;
};
#endif // #ifndef APE_HEADER_H