Difference between revisions of "Interplay ACM"

From MultimediaWiki
Jump to navigation Jump to search
(+Winamp plugin, etc.)
 
(4 intermediate revisions by one other user not shown)
Line 5: Line 5:


* Usage: Sound format
* Usage: Sound format
* Examples: all Infinity Engine games (Baldur's Gate, Icewind Dale, Planescape: Torment), Fallout series
* FourCC: 0x97 0x28 0x03 0x01
* FourCC: 0x97 0x28 0x03 0x01
* Tools:
* Tools:
** [[acmlab]] from [http://www.teamx.ru/ teamx.ru]
** [http://libacm.berlios.de/ libacm]: An open source library for decoding Interplay ACM files
** [http://winamp.com/plugins/details.php?id=98751 Winamp plugin]


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 ==
Multi-byte numbers are 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 28: Line 29:
         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 34: Line 35:
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 44: Line 45:
   short samplespersec;    //usually 22050
   short samplespersec;    //usually 22050
   short unknown;
   short unknown;
};
};
 
== Games Using Interplay ACM ==
* [http://www.mobygames.com/game/baldurs-gate Baldur's Gate]
* [http://www.mobygames.com/game/fallout Fallout]
* [http://www.mobygames.com/game/icewind-dale Icewind Dale]
* [http://www.mobygames.com/game/mdk-2 MDK2]
* [http://www.mobygames.com/game/windows/planescape-torment Planescape: Torment]
 


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

Latest revision as of 09:09, 22 June 2017

  • Usage: Sound format
  • 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

Multi-byte numbers are 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;
};

Games Using Interplay ACM