= SV8 specification draft = Nota : All fields, unless explicitely specified otherwise are read and written in Big-Endian order, independently of the underlying architecture. == File magic number == Magic number is on 32bits and is equal to 'MPCK' or 0x4D50434B[[BR]] New value so old decoders will happily skip such files. == Block formatting == All blocks are formated using Key / Length / Value.[[BR]] Key is 16 bits long. It's the block ID.[[BR]] Length is a variable size field using the same values as [http://svn.mplayerhq.hu/mplayer/trunk/DOCS/tech/nut.txt?view=markup nut] :[[BR]] {{{ bits, big-endian 0xxx xxxx - value 0 to 2^7-2 1xxx xxxx 0xxx xxxx - value 0 to 2^14-2 1xxx xxxx 1xxx xxxx 0xxx xxxx - value 0 to 2^21-2 1xxx xxxx 1xxx xxxx 1xxx xxxx 0xxx xxxx - value 0 to 2^28-2 ... }}} The length is the size of the block in bytes, including the key and size fields. So the minimum length of a block is 3 bytes.[[BR]] The value is the block content. Its size can be 0.[[BR]] All unused bits in a block MUST be 0.[[BR]] || '''Field''' || '''length (bits)''' || '''Value''' || || Key || 16 || "EX" || || Length || n*8; 0 < n < 10 || 0x1A || || Value || Length * 8 || "example" || == Summary of reserved block keys == || '''Block name''' || '''Key''' || '''Mandatory''' || || Stream information || SI || yes || || Replay gain || RG || yes || || Encoder information || EI || no || || Audio data || AD || yes || || Seek Table || ST || no || == Stream information block == This block key is "SI".[[BR]] This block contains the informations needed to decode the stream. This block is mandatory and must be written before the first audio block.[[BR]] || '''Field''' || '''length (bits)''' || '''Value''' || '''comment''' || || CRC || 32 || || CRC 32 of the block (this field excluded). 0 = invalid || || Version || 8 || 0x08 || bitstream version || || Sample count || n*8; 0 < n < 10 || || number of samples in the stream. 0 = unknow || || Sample Frequency || 4 || || see table below || || Channel count || 4 || 1..16 || number of channels in the stream || || Max used bands || 5 || 1..32 || maximum number of bands used in the file || || IS used || 1 || || IntensityStereo. Klemm specification suggest to use the number of band always using IS ? From the source, this flag is always set to 0 and marked as not supported anymore. Even the decoder doesn't read it and set it to 0. This flag will be removed || || MS used || 1 || || MidSideStereo || || PNS used || 1 || || The decoder doesn't use this information -> move it to EI block ? || || Audio block frames || 4 || 0..15 || number of frames in an audio block is : 2^Value^ (1..32768) || || Unused || 4 || || must be 0 || Frequency table || '''Value''' || '''Frequency (Hz)''' || || 0 || 44100 || || 1 || 48000 || || 2 || 37800 || || 3 || 32000 || || 4 || 96000 || The CRC used in this block needs to be define. == Replay gain block == This block key is "RG".[[BR]] This block contains replay gain datas. This block is mandatory and must be written before the first audio block.[[BR]] Values stored in dB in Q8.8 format (maybe Q7.9 or relative to the max value for the bitdepth is better ?).[[BR]] || '''Field''' || '''length (bits)''' || '''Value''' || '''comment''' || || Version || 8 || || The replay gain version || || Title gain || 16 || || The loudness calculated for the title, ''and not the gain that the player must apply'' || || Title peak || 16 || || || || Album gain || 16 || || The loudness calculated for the album || || Album peak || 16 || || || == Encoder infomations == This block key is "EI". || '''Field''' || '''length (bits)''' || '''Value''' || '''comment''' || || profile used || 4 || 0..15 || || || unused || 4 || || || || encoder version || 32 || || MajorNumber.MinorNumber.Implementation.Build || == Audio data block == This block key is "AD".[[BR]] This block contains audio frames. The first frame is a key frame.[[BR]] || '''Field''' || '''length (bits)''' || '''Value''' || '''comment''' || || audio frames || ? || || n (or less if last block) frames of audio data as defined in SI block || == Seek Table Block == This block key is "ST".[[BR]] Format have to be defined. == Security Block == Checksum (MD5, SHA1) or error correcting code (LDPC).[[BR]] To be defined later. May be better to keep security features external only. == End Block == This block key is "ED".[[BR]] The recommanded block lenth is 3 bytes.[[BR]] This block is mandatory and must be the last block of the stream. Tags are written after this block. == Tags == No block must be written after the last audio block to allow tagging by other applications.[[BR]] Remarks about tagging? Incompatibilities?[[BR]]