1#ifndef APE_HEADER_H 2#define APE_HEADER_H 3 4/***************************************************************************************** 5APE header that all APE files have in common (old and new) 6*****************************************************************************************/ 7struct APE_COMMON_HEADER 8{ 9 char cID[4]; // should equal 'MAC ' 10 uint16 nVersion; // version number * 1000 (3.81 = 3810) 11}; 12 13/***************************************************************************************** 14APE header structure for old APE files (3.97 and earlier) 15*****************************************************************************************/ 16struct APE_HEADER_OLD 17{ 18 char cID[4]; // should equal 'MAC ' 19 uint16 nVersion; // version number * 1000 (3.81 = 3810) 20 uint16 nCompressionLevel; // the compression level 21 uint16 nFormatFlags; // any format flags (for future use) 22 uint16 nChannels; // the number of channels (1 or 2) 23 uint32 nSampleRate; // the sample rate (typically 44100) 24 uint32 nHeaderBytes; // the bytes after the MAC header that compose the WAV header 25 uint32 nTerminatingBytes; // the bytes after that raw data (for extended info) 26 uint32 nTotalFrames; // the number of frames in the file 27 uint32 nFinalFrameBlocks; // the number of samples in the final frame 28}; 29 30struct APE_FILE_INFO; 31class CIO; 32 33/***************************************************************************************** 34CAPEHeader - makes managing APE headers a little smoother (and the format change as of 3.98) 35*****************************************************************************************/ 36class CAPEHeader 37{ 38 39public: 40 41 CAPEHeader(CIO * pIO); 42 ~CAPEHeader(); 43 44 int Analyze(APE_FILE_INFO * pInfo); 45 46protected: 47 48 int AnalyzeCurrent(APE_FILE_INFO * pInfo); 49 int AnalyzeOld(APE_FILE_INFO * pInfo); 50 51 int FindDescriptor(BOOL bSeek); 52 53 CIO * m_pIO; 54}; 55 56#endif // #ifndef APE_HEADER_H 57 58