***************************************************************
***************************************************************
****                                                       ****
****     Aufbau von MPEGplus-Dateien (Streamversion 7)     ****
****                                                       ****
***************************************************************
***************************************************************


Der Datenstrom ist als Strom von 32-Bit-Worten zu sehen, der dann allerdings
von MSB her dekodiert werden. Betrachtet man das ganze als Oktet-Strom, dann
ist die Reihenfolge der Bits die folgende (Zhlung ab 1 beginnend, MSB links):

v-----------------------v-----------------------v-----------------------v-----------------------v-----------------------v---
|25|26|27|28|29|30|31|32|17|18|19|20|21|22|23|24| 9|10|11|12|13|14|15|16| 1| 2| 3| 4| 5| 6| 7| 8|57|58|59|60|61|62|63|64|49|
^-----------------------^-----------------------^-----------------------^-----------------------^-----------------------^---

Auf Grund unterschiedlicher Zugriffsmechanismen mu man die Streamversion
ber einen anderen Machanismus bestimmen, da durch diese Struktur man zu
spt auf die Magic Number zugreifen kann. Da weiterhin kaum Streamversionen unterhalb
von Version 7 im Feld zu finden sind, und selbst wenn sie zu finden wren,
deren Klangqualitt zu wnschen brig lt, wird im folgenden nur
Streamversion 7 beschrieben.

Diese Bitstruktur macht vor allem auch Probleme auf 16 bit und 64 bit CPUs,
da immer mit 32 bit-Worten dekodiert werden mu.


=============================== GROBSTRUKTUR ============================

Header
~~~~~~

-0-------------------------------------------------------------------------
StreamMinorVersion
 4 bit   0...1           Currently 0 (PNS not used) or 1 (PNS used)

StreamMajorVersion
 4 bit   7               Streamversion 7

Signatur
24 bit   0x2B504D        Signatur "MP+"
-1------------------------------------------------------------------------
FrameCount
32 bit   0...0xFFFFFFFF  Anzahl der Frames, jeder Frame beinhaltet 1152
                         Samples pro Kanal, der letzte Frame beinhaltet 1
                         bis 1152 Samples pro Kanal. Man beachte weiterhin
                         die Latenz der Analyse und Synthesefilterbank von
                         481 Samples. Siehe Bemerkung 2.
-2-------------------------------------------------------------------------
IntensityStereo
 1 bit   0...1           normalerweise 0, bei Intensittsstereokodierung (IS) 1.
                         Derzeitig von keinem Encoder benutzt.
                         Siehe Bemerkung 3.

MidSideStereo
 1 bit   0...1           Wenn MidSideStereo verwendet wird, ist dieses Bit 1,
                         sonst 0.

MaxBand
 6 bit   0...32          letztes in der gesamten Datei verwendetes Subband.
                         Typische Werte sind 23 bis 29.

Profile
 4 bit   0, 7...13       Verwendetes Profile

                            0: kein Profile
                            1: Unstable/Experimental
                            2: ungenutzt
                            3: ungenutzt
                            4: ungenutzt
                            5: below Telephone (q= 0.0)
                            6: below Telephone (q= 1.0)
                            7: Telephone       (q= 2.0)
                            8: Thumb           (q= 3.0)
                            9: Radio           (q= 4.0)
                           10: Standard        (q= 5.0)
                           11: Xtreme          (q= 6.0)
                           12: Insane          (q= 7.0)
                           13: BrainDead       (q= 8.0)
                           14: above BrainDead (q= 9.0)
                           15: above BrainDead (q=10.0)

Link
 2 bit                   00: Titel startet und endet mit sehr niedrigem Pegel (keine Live- oder Klassiktitel)
                         01: Titel hrt laut auf
                         10: Titel fngt laut an
                         11: Titel fngt laut an und hrt laut auf

SampleFreq
 2 bit                   00: 44100 Hz  CD
                         01: 48000 Hz  DAT, DVC, ADR
                         10: 37800 Hz  CD-ROM/XA
                         11: 32000 Hz  DSR, DAT-LP, DVC-LP

MaxLevel
16 bit   0...32768       Maximaler Pegel des kodieren PCM-Inputsignals
                         Siehe Bemerkung 4
-3-------------------------------------------------------------------------
TitleGain
16 bit   -32768...+32767 Vernderung des Wiedergabepegels. Wert wird als
                         vorzeichenbehafteter 16-bit-Wert betrachtet und der
                         Pegel wird um so viele mB (Millibel) verndert. Somit
                         sind Pegelnderungen von -327.68 dB bis +327.67 dB mglich.
TitlePeak
16 bit   0...65535       Maximaler Pegel des dekodierten Titels
                         16422: -6 dB
                         32767:  0 dB
                         65379: +6 dB
-4-------------------------------------------------------------------------
AlbumGain
16 bit   -32768...32767  Vernderung des Wiedergabepegels, wenn die ganze
                         CD mit gleicher Pegelvernderung abgespielt werden soll.
                         Wert wird als
                         vorzeichenbehafteter 16-bit-Wert betrachtet und der
                         Pegel wird um so viele mB (Millibel) verndert. Somit
                         sind Pegelnderungen von -327.68 dB bis +327.67 dB mglich.
AlbumPeak
16 bit   0...65535       Maximaler Pegel der gesamten dekodierten CD
                         16422: -6 dB
                         32767:  0 dB
                         65379: +6 dB
-5-------------------------------------------------------------------------
TrueGapless
 1 bit                   Wird True Gapless verwendet?
                         0: nein
                         1: ja

LastFrameLength
11 bit   0, 1...1152     Used Samples of the Last Frame.
                         TrueGapless = 0: always 0
                         TrueGapless = 1: 1...1152

Unused2
20 bit
-6-------------------------------------------------------------------------
EncoderVersion
 8 bit                  Encoder version * 100  (106 = 1.06)
                        EncoderVersion % 10 == 0        Release (1.0)
                        EncoderVersion %  2 == 0        Beta (1.06)
                        EncoderVersion %  2 == 1        Alpha (1.05a...z)


AudioDaten (insgesamt FrameCount mal)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LengthOfFrame
20 bit

FrameData
 ? bit


Ende
~~~~
LastFrameUsedSamples
11 bit
                         Siehe weiterhin Bemerkung 2

LengthOfFrame
20 bit

FrameData
 ? bit

FillBits
0...31 bit              Das letzte Datenwort mu aufgefllt werden, auch
                        wenn nur 1 bit davon genutzt wird, da dieses Bit
                        in diesem Fall im letzten Byte des Wortes liegt.
                                                                          V
v-----------------------v-----------------------v-----------------------v-----------------------v
| X| X| X| X| X| X| X| X| X| X| X| X| X| X| X| X| X| X| X| X| X| X| X| X| 1| X| X| X| X| X| X| X|
^-----------------------^-----------------------^-----------------------^-----------------------^

                        Skurile Verschachtungen mit dem ID3-Tag, falls
                        bitmig mglich, sind nicht zu empfehlen.


ID3 Version 1.1 Tag (die letzten 1024 bit der Datei)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Die Betrachtung erfolgt als normaler Oktetstrom (0-1-2-3-4-5-6-7-), nicht
als MPEGplus-Bitstrom mit der etwas hoppelnden Oktetreihenfolge (3-2-1-0-7-6-5-4-).

ID3Marker
 3 byte   'ID3'          ID3-Marker

ID3Title
30 byte   ?              Titel, bis maximal 30 Zeichen (nullterminiert bei weniger als 30 Zeichen)

ID3Artist
30 byte   ?              Artist, bis maximal 30 Zeichen (nullterminiert bei weniger als 30 Zeichen)

ID3Album
30 byte   ?              Album, bis maximal 30 Zeichen (nullterminiert bei weniger als 30 Zeichen)

ID3Year
 4 byte   ?              Jahr der Aufnahme oder der Compilation, 4 Zeichen (Jahrhundert/Jahr)

ID3CommentV10
30 byte   ?              Bemerkungen, bis maximal 30 Zeichen (nullterminiert bei weniger als 30 Zeichen)

  oder

ID3CommentV11
28 byte   ?              Bemerkungen, bis maximal 28 Zeichen (nullterminiert bei weniger als 28 Zeichen)
 1 byte   0x00           Marker
 1 byte   1...255        Tracknummer (1...99 fr CDs)

ID3Genre
 1 Byte   0...147        Genre, kodiert als 8 bit-Wert

                          0 = "Blues"                    74 = "Acid Jazz"
                          1 = "Classic Rock"             75 = "Polka"
                          2 = "Country"                  76 = "Retro"
                          3 = "Dance"                    77 = "Musical"
                          4 = "Disco"                    78 = "Rock & Roll"
                          5 = "Funk"                     79 = "Hard Rock"
                          6 = "Grunge"                   80 = "Folk"
                          7 = "Hip-Hop"                  81 = "Folk/Rock"
                          8 = "Jazz"                     82 = "National Folk"
                          9 = "Metal"                    83 = "Swing"
                         10 = "New Age"                  84 = "Fast-Fusion"
                         11 = "Oldies"                   85 = "Bebob"
                         12 = "Other"                    86 = "Latin"
                         13 = "Pop"                      87 = "Revival"
                         14 = "R&B"                      88 = "Celtic"
                         15 = "Rap"                      89 = "Bluegrass"
                         16 = "Reggae"                   90 = "Avantgarde"
                         17 = "Rock"                     91 = "Gothic Rock"
                         18 = "Techno"                   92 = "Progressive Rock"
                         19 = "Industrial"               93 = "Psychedelic Rock"
                         20 = "Alternative"              94 = "Symphonic Rock"
                         21 = "Ska"                      95 = "Slow Rock"
                         22 = "Death Metal"              96 = "Big Band"
                         23 = "Pranks"                   97 = "Chorus"
                         24 = "Soundtrack"               98 = "Easy Listening"
                         25 = "Euro-Techno"              99 = "Acoustic"
                         26 = "Ambient"                 100 = "Humour"
                         27 = "Trip-Hop"                101 = "Speech"
                         28 = "Vocal"                   102 = "Chanson"
                         29 = "Jazz+Funk"               103 = "Opera"
                         30 = "Fusion"                  104 = "Chamber Music"
                         31 = "Trance"                  105 = "Sonata"
                         32 = "Classical"               106 = "Symphony"
                         33 = "Instrumental"            107 = "Booty Bass"
                         34 = "Acid"                    108 = "Primus"
                         35 = "House"                   109 = "Porn Groove"
                         36 = "Game"                    110 = "Satire"
                         37 = "Sound Clip"              111 = "Slow Jam"
                         38 = "Gospel"                  112 = "Club"
                         39 = "Noise"                   113 = "Tango"
                         40 = "AlternRock"              114 = "Samba"
                         41 = "Bass"                    115 = "Folklore"
                         42 = "Soul"                    116 = "Ballad"
                         43 = "Punk"                    117 = "Power Ballad"
                         44 = "Space"                   118 = "Rhythmic Soul"
                         45 = "Meditative"              119 = "Freestyle"
                         46 = "Instrumental Pop"        120 = "Duet"
                         47 = "Instrumental Rock"       121 = "Punk Rock"
                         48 = "Ethnic"                  122 = "Drum Solo"
                         49 = "Gothic"                  123 = "A capella"
                         50 = "Darkwave"                124 = "Euro-House"
                         51 = "Techno-Industrial"       125 = "Dance Hall"
                         52 = "Electronic"              126 = "Goa"
                         53 = "Pop-Folk"                127 = "Drum & Bass"
                         54 = "Eurodance"               128 = "Club House"
                         55 = "Dream"                   129 = "Hardcore"
                         56 = "Southern Rock"           130 = "Terror"
                         57 = "Comedy"                  131 = "Indie"
                         58 = "Cult"                    132 = "BritPop"
                         59 = "Gangsta"                 133 = "NegerPunk"
                         60 = "Top 40"                  134 = "Polsk Punk"
                         61 = "Christian Rap"           135 = "Beat"
                         62 = "Pop/Funk"                136 = "Christian Gangsta"
                         63 = "Jungle"                  137 = "Heavy Metal"
                         64 = "Native American"         138 = "Black Metal"
                         65 = "Cabaret"                 139 = "Crossover"
                         66 = "New Wave"                140 = "Contemporary C"
                         67 = "Psychadelic"             141 = "Christian Rock"
                         68 = "Rave"                    142 = "Merengue"
                         69 = "Showtunes"               143 = "Salsa"
                         70 = "Trailer"                 144 = "Thrash Metal"
                         71 = "Lo-Fi"                   145 = "Anime"
                         72 = "Tribal"                  146 = "JPop"
                         73 = "Acid Punk"               147 = "SynthPop"


Bemerkung 1 (Bitanordnung)
~~~~~~~~~~~~~~~~~~~~~~~~~~
Die Bitanordnung lt sich schlecht auf 16 oder 64 bit-CPU dekodieren.

Bemerkung 2 (Effekte durch Filterbankdelay)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
448

Bemerkung 3 (Intensity Stereo)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Intensity Stereo mu, falls verwendet, ab 2.75 verwendet werden. In jedem Frame.
Bei SV4-6 konnte man noch zwischen 2,75, 5.5, 8.25 oder 11 kHz whlen, wenn auch fr die ganze Datei.
Was schon hinreichend unflexibel war.
Weiterhin besteht bei hohen Datenrate die Mglichkeit, da der Decoder undefinierte
Zustnde annimmt, weil Variablen dann nicht initialisiert werden, von denen
aber das Ergebnis der Dekodierung empfinlich abhngt.

Bemerkung 4 (Clipping)
~~~~~~~~~~~~~~~~~~~~~~
Clipping Prevention funktioniert derzeitig, da der grte Sample des PCM-Inputs
mit in der MPEGplus-Datei abgespeichert wird und bei der Wiedergabe davon ausgegangen
wird, da der Spitzenpegel durch zugefgtes Rauschen und durch Fluktationen des
Pegels durch Kodierungsfehler maximal 18 Prozent ber der des PCM-Inputs liegt.

Diese ist allerdings nur eine ziemlich grobe Schtzung, die manchmal zuviel und manchmal
zuwenig den Pegel absenkt. Den exakten maximalen Pegel beim Abspielen kann man nur durch
einen Dekodiervorgang bestimmen. Weiterhin beachte man das "FS+>0 dB"-Problem: Es sind
bersteuerungen von DA-Wandlern um bis zu 3 dB durch nichtgeclippte Samples mglich, wenn
zwischen den Samples interpolierte Sample zu gro werden:

  32000 32000 -32000 -32000

erzeugt nach einem 2fach-Oversampling:

  32000 45255 32000 0 -32000 -45255 -32000 0

Ein zweites Problem sind Pegelnderungen bei Livealben zwischen den Titeln, wenn diese
unterschiedliche Maximalpegel haben. In diesen Fllen sollte das gesamte Album um
den notwendigen Pegel angesenkt werden.

========================== STRUKTUR EINES FRAMES ==============================


Codierung der Auflsung+MidsideKodierung fr Band 0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ResBand0L
 4 bit

Falls Band kein IS-Band:
ResBand0R
 4 bit

Falls MidSideStereo und mindestens ein Bnder hat eine Auflsung grer als 0
MS0
 1 bit

Differentielle Codierung der Auflsung+MidsideKodierung fr die Bnder 1...MaxBand
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ResBand<nn>L
 ? bit

Falls Band kein IS-Band:
ResBand<nn>R
 ? bit

Falls MidSideStereo und mindestens ein Bnder hat eine Auflsung grer als 0
MS<nn>
 1 bit

Bemerkung:
  Es wird dabei das hchste Band mit einer Auflsung != 0 bestimmt, was
  kleiner als MaxBand sein kann. Es wird im folgenden als MaxCurrBand
  bezeichnet.

Scaleband-Splitting
~~~~~~~~~~~~~~~~~~~


Lauflngenbegrenzung auf 32.

Scalebnder
~~~~~~~~~~~

Quantisierte Samples
~~~~~~~~~~~~~~~~~~~~


============================ VERWENDETE HUFFMAN-TABELLEN ===========================

Erster  Wert: abzuspeichernde Bits
Zweiter Wert: Anzahl der abzuspeichernden Bits

HuffSCFI_src [4]

 2, 3
 1, 1
 3, 3
 0, 2


HuffDSCF_src [16]

 32, 6
  4, 5
 17, 5
 30, 5
 13, 4
  0, 3
  3, 3
  9, 4
  5, 3
  2, 3
 14, 4
  3, 4
 31, 5
  5, 5
 33, 6
 12, 4


HuffHdr_src [10]

  92, 8
  47, 7
  10, 5
   4, 4
   0, 2
   1, 1
   3, 3
  22, 6
 187, 9
 186, 9


HuffQ1_src [2] [3*3*3]

 54, 6                                   103, 8
  9, 5                                    62, 7
 32, 6                                   225, 9
  5, 5                                    55, 7
 10, 4                                     3, 4
  7, 5                                    52, 7
 52, 6                                   101, 8
  0, 5                                    60, 7
 35, 6                                   227, 9
 10, 5                                    24, 6
  6, 4                                     0, 4
  4, 5                                    61, 7
 11, 4                                     4, 4
  7, 3                                     1, 1
 12, 4                                     5, 4
  3, 5                                    63, 7
  7, 4                                     1, 4
 11, 5                                    59, 7
 34, 6                                   226, 9
  1, 5                                    57, 7
 53, 6                                   100, 8
  6, 5                                    53, 7
  9, 4                                     2, 4
  2, 5                                    54, 7
 33, 6                                   224, 9
  8, 5                                    58, 7
 55, 6                                   102, 8


HuffQ2_src [2] [5*5]

  89, 7                                  921, 10
  47, 6                                  113,  7
  15, 5                                   51,  6
   0, 5                                  231,  8
  91, 7                                  922, 10
   4, 5                                  104,  7
   6, 4                                   30,  5
  13, 4                                    0,  3
   4, 4                                   29,  5
   5, 5                                  105,  7
  20, 5                                   50,  6
  12, 4                                    1,  3
   4, 3                                    2,  2
  15, 4                                    3,  3
  14, 5                                   49,  6
   3, 5                                  107,  7
   3, 4                                   27,  5
  14, 4                                    2,  3
   5, 4                                   31,  5
   1, 5                                  112,  7
  90, 7                                  920, 10
   2, 5                                  106,  7
  21, 5                                   48,  6
  46, 6                                  114,  7
  88, 7                                  923, 10


HuffQ3_src [2] [ 7]

12, 4                            4, 5
 4, 3                            3, 4
 0, 2                            2, 2
 1, 2                            3, 2
 7, 3                            1, 2
 5, 3                            0, 3
13, 4                            5, 5


HuffQ4_src [2] [ 9]

 5, 4                            9, 5
 0, 3                           12, 4
 4, 3                            3, 3
 6, 3                            0, 2
 7, 3                            2, 2
 5, 3                            7, 3
 3, 3                           13, 4
 1, 3                            5, 4
 4, 4                            8, 5


HuffQ5_src [2] [15]

  57, 6                          229, 8
  23, 5                           56, 6
   8, 4                            7, 5
  10, 4                            2, 4
  13, 4                            0, 3
   0, 3                            3, 3
   2, 3                            5, 3
   3, 3                            6, 3
   1, 3                            4, 3
  15, 4                            2, 3
  12, 4                           15, 4
   9, 4                           29, 5
  29, 5                            6, 5
  22, 5                          115, 7
  56, 6                          228, 8


HuffQ6_src [2] [31]

   65,  7                        6472, 13
    6,  6                        6474, 13
   44,  6                         808, 10
   45,  6                         405,  9
   59,  6                         203,  8
   13,  5                         102,  7
   17,  5                          49,  6
   19,  5                           9,  5
   23,  5                          15,  5
   21,  5                          31,  5
   26,  5                           2,  4
   30,  5                           6,  4
    0,  4                           8,  4
    2,  4                          11,  4
    5,  4                          13,  4
    7,  4                           0,  3
    3,  4                          14,  4
    4,  4                          10,  4
   31,  5                           9,  4
   28,  5                           5,  4
   25,  5                           3,  4
   27,  5                          30,  5
   24,  5                          14,  5
   20,  5                           8,  5
   18,  5                          48,  6
   12,  5                         103,  7
    2,  5                         201,  8
   58,  6                         200,  8
   33,  6                        1619, 11
    7,  6                        6473, 13
   64,  7                        6475, 13


HuffQ7_src [2] [63]

  103, 8                14244, 14
  153, 8                14253, 14
  181, 8                14246, 14
  233, 8                14254, 14
   64, 7                 3562, 12
   65, 7                  752, 10
   77, 7                  753, 10
   81, 7                  160,  9
   91, 7                  162,  9
  113, 7                  444,  9
  112, 7                  122,  8
   24, 6                  223,  8
   29, 6                   60,  7
   35, 6                   73,  7
   37, 6                  110,  7
   41, 6                   14,  6
   44, 6                   24,  6
   46, 6                   25,  6
   51, 6                   34,  6
   49, 6                   37,  6
   54, 6                   54,  6
   55, 6                    3,  5
   57, 6                    9,  5
   60, 6                   11,  5
    0, 5                   16,  5
    2, 5                   19,  5
   10, 5                   21,  5
    5, 5                   24,  5
    9, 5                   26,  5
    6, 5                   29,  5
   13, 5                   31,  5
    7, 5                    2,  4
   11, 5                    0,  4
   15, 5                   30,  5
    8, 5                   28,  5
    4, 5                   25,  5
    3, 5                   22,  5
    1, 5                   20,  5
   63, 6                   14,  5
   62, 6                   13,  5
   61, 6                    8,  5
   53, 6                    6,  5
   59, 6                    2,  5
   52, 6                   46,  6
   48, 6                   35,  6
   47, 6                   31,  6
   43, 6                   21,  6
   42, 6                   15,  6
   39, 6                   95,  7
   36, 6                   72,  7
   33, 6                   41,  7
   28, 6                  189,  8
  117, 7                  123,  8
  101, 7                  377,  9
  100, 7                  161,  9
   80, 7                  891, 10
   69, 7                  327, 10
   68, 7                  326, 10
   50, 7                 3560, 12
  232, 8                14255, 14
  180, 8                14247, 14
  152, 8                14252, 14
  102, 8                14245, 14
