Version 21 (modified by r2d, 18 years ago) (diff)


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
New value so old decoders will happily skip such files.

Block formatting

All blocks are formated using Key / Length / Value.
Key is 16 bits long. It's the block ID.
Length is a variable size field using the same values as nut :

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.
The value is the block content. Its size can be 0.
All unused bits in a block MUST be 0.

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 End SE yes

Stream information block

This block key is "SI".
This block contains the informations needed to decode the stream. This block is mandatory and must be written before the first audio block.

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 : 2Value (1..32768)
Unused 6 must be 0

Do we need to specify the channel position ? Is there standard positions / order of the channels ?

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".
This block contains replay gain datas. This block is mandatory and must be written before the first audio block.
Values stored in dB in Q8.8 format (maybe Q7.9 or relative to the max value for the bitdepth is better ?).

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
PNS used 1
Unused 3 must be 0
MajorNumber 4
MinorNumber 8 even = release, odd = unstable
Implementation 4
Build 8

Audio data block

This block key is "AD".
This block contains audio frames. The first frame is a key frame.

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

Format have to be defined.

Format of seek datas :

  • The first 2 values are stored using the same code as the block length code.
  • The next values are coded as :

code = value(n) - 2*value(n-1) + value(n-2)
the 1 bit is sent for code sign, and the absolute value of code is sent as golomb code with k=10. A log code, as Fibonacci or Elias may be better, but golomb is easier to implement.

Security Block

Checksum (MD5, SHA1) or error correcting code (LDPC).
To be defined later. May be better to keep security features external only.

End Block

This block key is "SE".
The recommanded block lenth is 3 bytes.
This block is mandatory and must be the last block of the stream. Tags are written after this block.


No block must be written after the last audio block to allow tagging by other applications.
Remarks about tagging? Incompatibilities?

Attachments (3)

Download all attachments as: .zip