From MultimediaWiki
Jump to navigation Jump to search

Muzip is a family of FFT-based audio codecs with confusing versioning. Internally codec versions can be distinguished by the text ID that starts at byte 18 of audio header. Known versions:

  • CTP03 - probably Muzip1 and codec ID 3
  • CTP04 - probably Muzip1 and codec ID 3
  • CTP05 - probably Muzip1 and codec ID 5
  • CTP06 - Muzip1 (codec ID 5)
  • CTP07 - Muzip1 (codec ID 5), probably the same as CTPJAVA (codec ID 8)
  • MZIP13R - Muzip 4 (codec ID 9), the ID probably stands for 1.3

Decoder for version CTP06 is here: Decoder for version CTP07 can be found on the same site as part of Java VGM player.

Header for Muzip sample in WAV

0..3 "RIFF"
4..7 unknown (file size? seems not)
8..11 "WAVE"
12..15 "fmt\0" (note: not space, it's null)
16..19 unknown (fmt\0 size? seems not)
20..21 unknown (format id? "0301". seems not)
22 number of channels
23 unknown (rest of number of channels?)
24..27 sampling rate
28..31 (byte per sec?)
32..33 (block size?)
34..35 (bit per sample?)
36..(\0) codec name ("CTP03", "CTP04", "CTP05", "CTP06")
42..43 unknown (rest of codec name or not?)
44 coefficients(compression ratio) (8-13 -> [8,12,15,16,24,10])
45 key frame
46 variable bitrate
47 reserved
48..51 unknown
52..55 "data"
56..59 total size

Muzip CTP03

No information.

Muzip CTP04

No information.

Muzip CTP05

No information.

Muzip CTP06

This is a codec that employs enumerative coding for coding various values, FFT and also wavelet transform for high-frequency part manipulation. Frequencies are grouped into sub-bands depending on sampling rate.

After the main part is decoded and FFT is applied, the audio is passed through wavelet-based filter to split it into high- and low-frequency band, an additional trellis-based high-frequency data is added to the high band and the bands are recombined again.

Muzip CTP07

This format improves on CTP06 by adding two different kinds of correction data that is added after main data reconstruction.

Muzip MZIP13R

This is the version of codec used in VGM2 container. Unlike previous versions, it does not perform wavelet-based high band correction and uses arithmetic coding for coefficients. Additionally now it has several frame sizes depending on bitrate: 64, 128, 256 and 320 samples.

Sample coding is done by coding bit allocation parameters in parametric way, symbol categories, arithmetic coded scalefactor indices (coded using static model selected depending on bit allocation), and arithmetic coded quantised samples coded using static model selected depending on bit allocation and category.