Apple Lossless Audio Coding: Difference between revisions

From MultimediaWiki
Jump to navigation Jump to search
No edit summary
m (sample link)
Line 1: Line 1:
* FOURCCS: alac
* FOURCCS: alac
* Company: [[Apple]]
* Company: [[Apple]]
* Technical Description: [http://craz.net/programs/itunes/alac.html http://craz.net/programs/itunes/alac.html]
* Technical Description: http://craz.net/programs/itunes/alac.html
* Samples: http://mplayerhq.hu/MPlayer/samples/A-codecs/lossless/ (luckynight.m4a)


Lossless audio coding using linear prediction with Golomb-Rice coding of the difference.  Similar to FLAC, although the bitstreams are not compatible.  Usually stored in an [[Apple QuickTime|MP4]] container, as a private extension since it is not part of the MPEG-4 standard.
Lossless audio coding using linear prediction with Golomb-Rice coding of the difference.  Similar to FLAC, although the bitstreams are not compatible.  Usually stored in an [[Apple QuickTime|MP4]] container, as a private extension since it is not part of the MPEG-4 standard.

Revision as of 14:40, 25 May 2006

Lossless audio coding using linear prediction with Golomb-Rice coding of the difference. Similar to FLAC, although the bitstreams are not compatible. Usually stored in an MP4 container, as a private extension since it is not part of the MPEG-4 standard.

Extradata

Syntax Number of bits Semantics
atom size 32 (0x24), big-endian
tag 32 'alac'
??? 32 zero ?
max sample per frame 32
??? 8 zero ?
sample size 8
rice history mult 8
rice initial history 8
rice kmodifier 8
channels 8 ?
??? 16
max coded frame size 32
bitrate 32 ?
samplerate 32

Frame Header

Syntax Number of bits Semantics
channels 3 Number of channel -1 (Should be the same than in extradata ???)
??? 4 ???
??? 12 ???
hasoutputsamples 1 the number of samples is stored in the header
wasted_bytes 2 unknow (same as flac ???)
isverbatim 1 if 1, the data is not compressed
if (hassize) {
outputsamples 32 number of samples
}

Verbatim frame

Syntax Number of bits Semantics
data sample_size * outputsamples * channels Unencoded subblock

Compressed frame

Syntax Number of bits Semantics
interlacing_shift 8 should be 0 if no channel interlacing.
interlacing_leftweight 8
for each channel {
prediction_type 4 should be 0
prediction_quantitization 4
ricemodifier 3
predictor_coef_num 5
predictor_coef_table 16 * predictor_coef_num
}
for each channel {
compressed data modfied Rice coding and Adaptive FIR filter
}

Channel Interlacing

It is a mid/side stereo with weight. channel 0 is the mid(average) channel, channel 1 is the side(difference) channel.

right = mid - ((difference * interlacing_leftweight) >> interlacing_shift)
left = right + difference