Interplay ACM: Difference between revisions

From MultimediaWiki
Jump to navigation Jump to search
(link to a new tool; remove dead tools)
(proper indentation)
Line 11: Line 11:


This is a lossy compressed audio format with a rather weak compression ratio. (converted to WAV then recompressed to OGG makes it roughly half size). ACM files can be in varying sample rates, but the common one is 22050 Hz, 16 bits and stereo.
This is a lossy compressed audio format with a rather weak compression ratio. (converted to WAV then recompressed to OGG makes it roughly half size). ACM files can be in varying sample rates, but the common one is 22050 Hz, 16 bits and stereo.
== File Format ==
''(Is this big or little endian?)''


The ACM header:
The ACM header:
0x00  FOURCC
0x00  FOURCC
0x04  sample count
0x04  sample count
0x08  channel count (some ACM files lie about the channel count)
0x08  channel count (some ACM files lie about the channel count)
0x0a  sample rate
0x0a  sample rate
0x0c  levels (4 bits) and subblocks (12 bits)
0x0c  levels (4 bits) and subblocks (12 bits)
0x0e  <data>
0x0e  <data>


struct ACM_Header {
struct ACM_Header {
         long fourcc;
         long fourcc;
         long samples;
         long samples;
Line 27: Line 30:
         unsigned short levels : 4;
         unsigned short levels : 4;
         unsigned short subblocks : 12;
         unsigned short subblocks : 12;
};
};


The infinity games also contain a WAVC header which contains mostly redundant information. These files are used for all sound except music (ambients, voice over, sound effects).
The infinity games also contain a WAVC header which contains mostly redundant information. These files are used for all sound except music (ambients, voice over, sound effects).
Line 33: Line 36:
The WAVC header:
The WAVC header:


struct WAVC_HEADER {
struct WAVC_HEADER {
         char wavc_sig[4];  //WAVC
         char wavc_sig[4];  //WAVC
         char wavc_ver[4];  //V1.0
         char wavc_ver[4];  //V1.0
Line 43: Line 46:
   short samplespersec;    //usually 22050
   short samplespersec;    //usually 22050
   short unknown;
   short unknown;
};
};


[[Category:Game Formats]]
[[Category:Game Formats]]

Revision as of 23:46, 4 January 2013

  • Usage: Sound format
  • Examples: all Infinity Engine games (Baldur's Gate, Icewind Dale, Planescape: Torment), Fallout series
  • FourCC: 0x97 0x28 0x03 0x01
  • Tools:
    • libacm: An open source library for decoding Interplay ACM files

This is a lossy compressed audio format with a rather weak compression ratio. (converted to WAV then recompressed to OGG makes it roughly half size). ACM files can be in varying sample rates, but the common one is 22050 Hz, 16 bits and stereo.

File Format

(Is this big or little endian?)

The ACM header:

0x00   FOURCC
0x04   sample count
0x08   channel count (some ACM files lie about the channel count)
0x0a   sample rate
0x0c   levels (4 bits) and subblocks (12 bits)
0x0e   
struct ACM_Header {
       long fourcc;
       long samples;
       unsigned short channels;
       unsigned short rate;
       unsigned short levels : 4;
       unsigned short subblocks : 12;
};

The infinity games also contain a WAVC header which contains mostly redundant information. These files are used for all sound except music (ambients, voice over, sound effects).

The WAVC header:

struct WAVC_HEADER {
       char wavc_sig[4];  //WAVC
       char wavc_ver[4];  //V1.0
 long uncompressed;       //the uncompressed length (i guess it is raw pcm)
 long compressed;         //the compressed length
 long headersize;         //28 (the size of this header, also the offset to the ACM header)
 short channels;          //1 or 2
 short bits;              //8 or 16
 short samplespersec;     //usually 22050
 short unknown;
};