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