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.
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 |
|
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