* id3v2.3.0

Informal Standard
Document: id3v2.3
M. Nilsson
3rd February 1999


1. ID3 tag version 2.3.0


1.1. Status of this document

This document is an informal standard and replaces the id3v2.2.0 standard. The
informal standard is released so that implementors could have a set standard
before a formal standard is set. The formal standard will use another version
or revision number if not identical to what is described in this document. The
contents in this document may change for clarifications but never for added or
altered functionallity.
Distribution of this document is unlimited.

1.2. Abstract

This document describes the ID3v2.3.0 standard, which is a more developed
version of the ID3v2 informal standard (version [:id3v2-00: 2.2.0]), evolved
from the ID3 tagging system. The ID3v2 offers a flexible way of storing
information about an audio file within itself to determine its origin and
contents. The information may be technical information, such as equalisation
curves, as well as related meta information, such as title, performer,
copyright etc.
Contents

  1. ID3_tag_version_2.3.0

       1. Status_of_this_document
       2. Abstract

  2. Conventions_in_this_document
  3. ID3v2_overview

       1. ID3v2_header
       2. ID3v2_extended_header
       3. ID3v2_frame_overview

            1. Frame_header_flags

       4. Default_flags

  4. Declared_ID3v2_frames

       1. Unique_file_identifier
       2. Text_information_frames

            1. Text_information_frames_-_details
            2. User_defined_text_information_frame

       3. URL_link_frames

            1. URL_link_frames_-_details
            2. User_defined_URL_link_frame

       4. Involved_people_list
       5. Music_CD_identifier
       6. Event_timing_codes
       7. MPEG_location_lookup_table
       8. Synchronised_tempo_codes
       9. Unsychronised_lyrics/text_transcription
      10. Synchronised_lyrics/text
      11. Comments
      12. Relative_volume_adjustment
      13. Equalisation
      14. Reverb
      15. Attached_picture
      16. General_encapsulated_object
      17. Play_counter
      18. Popularimeter
      19. Recommended_buffer_size
      20. Audio_encryption
      21. Linked_information
      22. Position_synchronisation_frame
      23. Terms_of_use_frame
      24. Ownership_frame
      25. Commercial_frame
      26. Encryption_method_registration
      27. Group_identification_registration
      28. Private_frame

  5. The_unsynchronisation_scheme
  6. Copyright
  7. References
  8. Appendix

       1. Appendix_A_-_Genre_List_from_ID3v1

  9. Author's_Address



2. Conventions in this document

In the examples, text within "" is a text string exactly as it appears in a
file. Numbers preceded with $ are hexadecimal and numbers preceded with % are
binary. $xx is used to indicate a byte with unknown content. %x is used to
indicate a bit with unknown content. The most significant bit (MSB) of a byte
is called 'bit 7' and the least significant bit (LSB) is called 'bit 0'.
A tag is the whole tag described in this document. A frame is a block of
information in the tag. The tag consists of a header, frames and optional
padding. A field is a piece of information; one value, a string etc. A numeric
string is a string that consists of the characters 0-9 only.


3. ID3v2 overview

The two biggest design goals were to be able to implement ID3v2 without
disturbing old software too much and that ID3v2 should be as flexible and
expandable as possible.
The first criterion is met by the simple fact that the MPEG decoding software
uses a syncsignal, embedded in the audiostream, to 'lock on to' the audio.
Since the ID3v2 tag doesn't contain a valid syncsignal, no software will
attempt to play the tag. If, for any reason, coincidence make a syncsignal
appear within the tag it will be taken care of by the 'unsynchronisation
scheme' described in section_5.
The second criterion has made a more noticeable impact on the design of the
ID3v2 tag. It is constructed as a container for several information blocks,
called frames, whose format need not be known to the software that encounters
them. At the start of every frame there is an identifier that explains the
frames' format and content, and a size descriptor that allows software to skip
unknown frames.
If a total revision of the ID3v2 tag should be needed, there is a version
number and a size descriptor in the ID3v2 header.
The ID3 tag described in this document is mainly targeted at files encoded with
MPEG-1/2 layer I, MPEG-1/2 layer II, MPEG-1/2 layer III and MPEG-2.5, but may
work with other types of encoded audio.
The bitorder in ID3v2 is most significant bit first (MSB). The byteorder in
multibyte numbers is most significant byte first (e.g. $12345678 would be
encoded $12 34 56 78).
It is permitted to include padding after all the final frame (at the end of the
ID3 tag), making the size of all the frames together smaller than the size
given in the head of the tag. A possible purpose of this padding is to allow
for adding a few additional frames or enlarge existing frames within the tag
without having to rewrite the entire file. The value of the padding bytes must
be $00.

3.1. ID3v2 header

The ID3v2 tag header, which should be the first information in the file, is 10
bytes as follows:

  ID3v2/file identifier   "ID3"
  ID3v2 version           $03 00
  ID3v2 flags             %abc00000
  ID3v2 size              4 * %0xxxxxxx

The first three bytes of the tag are always "ID3" to indicate that this is an
ID3v2 tag, directly followed by the two version bytes. The first byte of ID3v2
version is it's major version, while the second byte is its revision number. In
this case this is ID3v2.3.0. All revisions are backwards compatible while major
versions are not. If software with ID3v2.2.0 and below support should encounter
version three or higher it should simply ignore the whole tag. Version and
revision will never be $FF.
The version is followed by one the ID3v2 flags field, of which currently only
three flags are used.


  a - Unsynchronisation
      Bit 7 in the 'ID3v2 flags' indicates whether or not unsynchronisation is
      used (see section_5 for details); a set bit indicates usage.

  b - Extended header
      The second bit (bit 6) indicates whether or not the header is followed by
      an extended header. The extended header is described in section_3.2.

  c - Experimental indicator
      The third bit (bit 5) should be used as an 'experimental indicator'. This
      flag should always be set when the tag is in an experimental stage.

All the other flags should be cleared. If one of these undefined flags are set
that might mean that the tag is not readable for a parser that does not know
the flags function.
The ID3v2 tag size is encoded with four bytes where the most significant bit
(bit 7) is set to zero in every byte, making a total of 28 bits. The zeroed
bits are ignored, so a 257 bytes long tag is represented as $00 00 02 01.
The ID3v2 tag size is the size of the complete tag after unsychronisation,
including padding, excluding the header but not excluding the extended header
(total tag size - 10). Only 28 bits (representing up to 256MB) are used in the
size description to avoid the introduction of 'false syncsignals'.
An ID3v2 tag can be detected with the following pattern:

  $49 44 33 yy yy xx zz zz zz zz

Where yy is less than $FF, xx is the 'flags' byte and zz is less than $80.

3.2. ID3v2 extended header

The extended header contains information that is not vital to the correct
parsing of the tag information, hence the extended header is optional.

  Extended header size   $xx xx xx xx
  Extended Flags         $xx xx
  Size of padding        $xx xx xx xx

Where the 'Extended header size', currently 6 or 10 bytes, excludes itself. The
'Size of padding' is simply the total tag size excluding the frames and the
headers, in other words the padding. The extended header is considered separate
from the header proper, and as such is subject to unsynchronisation.
The extended flags are a secondary flag set which describes further attributes
of the tag. These attributes are currently defined as follows

  %x0000000 00000000



  x - CRC data present
      If this flag is set four bytes of CRC-32 data is appended to the extended
      header. The CRC should be calculated before unsynchronisation on the data
      between the extended header and the padding, i.e. the frames and only the
      frames.

        Total frame CRC    $xx xx xx xx



3.3. ID3v2 frame overview

As the tag consists of a tag header and a tag body with one or more frames, all
the frames consists of a frame header followed by one or more fields containing
the actual information. The layout of the frame header:

  Frame ID       $xx xx xx xx (four characters)
  Size           $xx xx xx xx
  Flags          $xx xx

The frame ID made out of the characters capital A-Z and 0-9. Identifiers
beginning with "X", "Y" and "Z" are for experimental use and free for everyone
to use, without the need to set the experimental bit in the tag header. Have in
mind that someone else might have used the same identifier as you. All other
identifiers are either used or reserved for future use.
The frame ID is followed by a size descriptor, making a total header size of
ten bytes in every frame. The size is calculated as frame size excluding frame
header (frame size - 10).
In the frame header the size descriptor is followed by two flags bytes. These
flags are described in section_3.3.1.
There is no fixed order of the frames' appearance in the tag, although it is
desired that the frames are arranged in order of significance concerning the
recognition of the file. An example of such order: UFID, TIT2, MCDI, TRCK ...
A tag must contain at least one frame. A frame must be at least 1 byte big,
excluding the header.
If nothing else is said a string is represented as ISO-8859-1 characters in the
range $20 - $FF. Such strings are represented as <text string>, or <full text
string> if newlines are allowed, in the frame descriptions. All Unicode strings
use 16-bit unicode 2.0 (ISO/IEC 10646-1:1993, UCS-2). Unicode strings must
begin with the Unicode BOM ($FF FE or $FE FF) to identify the byte order.
All numeric strings and URLs are always encoded as ISO-8859-1. Terminated
strings are terminated with $00 if encoded with ISO-8859-1 and $00 00 if
encoded as unicode. If nothing else is said newline character is forbidden. In
ISO-8859-1 a new line is represented, when allowed, with $0A only. Frames that
allow different types of text encoding have a text encoding description byte
directly after the frame size. If ISO-8859-1 is used this byte should be $00,
if Unicode is used it should be $01. Strings dependent on encoding is
represented as <text string according to encoding>, or <full text string
according to encoding> if newlines are allowed. Any empty Unicode strings which
are NULL-terminated may have the Unicode BOM followed by a Unicode NULL ($FF FE
00 00 or $FE FF 00 00).
The three byte language field is used to describe the language of the frame's
content, according to ISO-639-2.
All URLs may be relative, e.g. "picture.png", "../doc.txt".
If a frame is longer than it should be, e.g. having more fields than specified
in this document, that indicates that additions to the frame have been made in
a later version of the ID3v2 standard. This is reflected by the revision number
in the header of the tag.

3.3.1. Frame header flags

In the frame header the size descriptor is followed by two flags bytes. All
unused flags must be cleared. The first byte is for 'status messages' and the
second byte is for encoding purposes. If an unknown flag is set in the first
byte the frame may not be changed without the bit cleared. If an unknown flag
is set in the second byte it is likely to not be readable. The flags field is
defined as follows.

  %abc00000 %ijk00000



  a - Tag alter preservation
      This flag tells the software what to do with this frame if it is unknown
      and the tag is altered in any way. This applies to all kinds of
      alterations, including adding more padding and reordering the frames.

        0    Frame should be preserved.
        1    Frame should be discarded.


  b - File alter preservation
      This flag tells the software what to do with this frame if it is unknown
      and the file, excluding the tag, is altered. This does not apply when the
      audio is completely replaced with other audio data.

        0    Frame should be preserved.
        1    Frame should be discarded.


  c - Read only
      This flag, if set, tells the software that the contents of this frame is
      intended to be read only. Changing the contents might break something,
      e.g. a signature. If the contents are changed, without knowledge in why
      the frame was flagged read only and without taking the proper means to
      compensate, e.g. recalculating the signature, the bit should be cleared.

  i - Compression
      This flag indicates whether or not the frame is compressed.

        0    Frame is not compressed.
        1    Frame is compressed using [#ZLIB zlib] with 4 bytes for
        'decompressed size' appended to the frame header.


  j - Encryption
      This flag indicates wether or not the frame is enrypted. If set one byte
      indicating with which method it was encrypted will be appended to the
      frame header. See section_4.26. for more information about encryption
      method registration.

        0    Frame is not encrypted.
        1    Frame is encrypted.


  k - Grouping identity
      This flag indicates whether or not this frame belongs in a group with
      other frames. If set a group identifier byte is added to the frame
      header. Every frame with the same group identifier belongs to the same
      group.

        0    Frame does not contain group information
        1    Frame contains group information


Some flags indicates that the frame header is extended with additional
information. This information will be added to the frame header in the same
order as the flags indicating the additions. I.e. the four bytes of
decompressed size will preceed the encryption method byte. These additions to
the frame header, while not included in the frame header size but are included
in the 'frame size' field, are not subject to encryption or compression.

3.4. Default flags

The default settings for the frames described in this document can be divided
into the following classes. The flags may be set differently if found more
suitable by the software.

  1. Discarded if tag is altered, discarded if file is altered.

     o None.

  2. Discarded if tag is altered, preserved if file is altered.

     o None.

  3. Preserved if tag is altered, discarded if file is altered.

     o AENC, ETCO, EQUA, MLLT, POSS, SYLT, SYTC, RVAD, TENC, TLEN, TSIZ

  4. Preserved if tag is altered, preserved if file is altered.

     o The rest of the frames.




4. Declared ID3v2 frames

The following frames are declared in this draft.

  4.20    AENC    [#sec4.20 Audio encryption]
  4.15    APIC    [#sec4.15 Attached picture]
  4.11    COMM    [#sec4.11 Comments]
  4.25    COMR    [#sec4.25 Commercial frame]
  4.26    ENCR    [#sec4.26 Encryption method registration]
  4.13    EQUA    [#sec4.13 Equalization]
  4.6     ETCO    [#sec4.6 Event timing codes]
  4.16    GEOB    [#sec4.16 General encapsulated object]
  4.27    GRID    [#sec4.27 Group identification registration]
  4.4     IPLS    [#sec4.4 Involved people list]
  4.21    LINK    [#sec4.21 Linked information]
  4.5     MCDI    [#sec4.5 Music CD identifier]
  4.7     MLLT    [#sec4.7 MPEG location lookup table]
  4.24    OWNE    [#sec4.24 Ownership frame]
  4.28    PRIV    [#sec4.28 Private frame]
  4.17    PCNT    [#sec4.17 Play counter]
  4.18    POPM    [#sec4.18 Popularimeter]
  4.22    POSS    [#sec4.22 Position synchronisation frame]
  4.19    RBUF    [#sec4.19 Recommended buffer size]
  4.12    RVAD    [#sec4.12 Relative volume adjustment]
  4.14    RVRB    [#sec4.14 Reverb]
  4.10    SYLT    [#sec4.10 Synchronized lyric/text]
  4.8     SYTC    [#sec4.8 Synchronized tempo codes]
  4.2.1   TALB    [#TALB Album/Movie/Show title]
  4.2.1   TBPM    [#TBPM BPM (beats per minute)]
  4.2.1   TCOM    [#TCOM Composer]
  4.2.1   TCON    [#TCON Content type]
  4.2.1   TCOP    [#TCOP Copyright message]
  4.2.1   TDAT    [#TDAT Date]
  4.2.1   TDLY    [#TDLY Playlist delay]
  4.2.1   TENC    [#TENC Encoded by]
  4.2.1   TEXT    [#TEXT Lyricist/Text writer]
  4.2.1   TFLT    [#TFLT File type]
  4.2.1   TIME    [#TIME Time]
  4.2.1   TIT1    [#TIT1 Content group description]
  4.2.1   TIT2    [#TIT2 Title/songname/content description]
  4.2.1   TIT3    [#TIT3 Subtitle/Description refinement]
  4.2.1   TKEY    [#TKEY Initial key]
  4.2.1   TLAN    [#TLAN Language(s)]
  4.2.1   TLEN    [#TLEN Length]
  4.2.1   TMED    [#TMED Media type]
  4.2.1   TOAL    [#TOAL Original album/movie/show title]
  4.2.1   TOFN    [#TOFN Original filename]
  4.2.1   TOLY    [#TOLY Original lyricist(s)/text writer(s)]
  4.2.1   TOPE    [#TOPE Original artist(s)/performer(s)]
  4.2.1   TORY    [#TORY Original release year]
  4.2.1   TOWN    [#TOWN File owner/licensee]
  4.2.1   TPE1    [#TPE1 Lead performer(s)/Soloist(s)]
  4.2.1   TPE2    [#TPE2 Band/orchestra/accompaniment]
  4.2.1   TPE3    [#TPE3 Conductor/performer refinement]
  4.2.1   TPE4    [#TPE4 Interpreted, remixed, or otherwise modified by]
  4.2.1   TPOS    [#TPOS Part of a set]
  4.2.1   TPUB    [#TPUB Publisher]
  4.2.1   TRCK    [#TRCK Track number/Position in set]
  4.2.1   TRDA    [#TRDA Recording dates]
  4.2.1   TRSN    [#TRSN Internet radio station name]
  4.2.1   TRSO    [#TRSO Internet radio station owner]
  4.2.1   TSIZ    [#TSIZ Size]
  4.2.1   TSRC    [#TSRC ISRC (international standard recording code)]
  4.2.1   TSSE    [#TSEE Software/Hardware and settings used for encoding]
  4.2.1   TYER    [#TYER Year]
  4.2.2   TXXX    [#TXXX User defined text information frame]
  4.1     UFID    [#sec4.1 Unique file identifier]
  4.23    USER    [#sec4.23 Terms of use]
  4.9     USLT    [#sec4.9 Unsychronized lyric/text transcription]
  4.3.1   WCOM    [#WCOM Commercial information]
  4.3.1   WCOP    [#WCOP Copyright/Legal information]
  4.3.1   WOAF    [#WOAF Official audio file webpage]
  4.3.1   WOAR    [#WOAR Official artist/performer webpage]
  4.3.1   WOAS    [#WOAS Official audio source webpage]
  4.3.1   WORS    [#WORS Official internet radio station homepage]
  4.3.1   WPAY    [#WPAY Payment]
  4.3.1   WPUB    [#WPUB Publishers official webpage]
  4.3.2   WXXX    [#WXXX User defined URL link frame]


4.1. Unique file identifier

This frame's purpose is to be able to identify the audio file in a database
that may contain more information relevant to the content. Since
standardisation of such a database is beyond this document, all frames begin
with a null-terminated string with a URL containing an email address, or a link
to a location where an email address can be found, that belongs to the
organisation responsible for this specific database implementation. Questions
regarding the database should be sent to the indicated email address. The URL
should not be used for the actual database queries. The string "http://
www.id3.org/dummy/ufid.html" should be used for tests. Software that isn't told
otherwise may safely remove such frames. The 'Owner identifier' must be non-
empty (more than just a termination). The 'Owner identifier' is then followed
by the actual identifier, which may be up to 64 bytes. There may be more than
one "UFID" frame in a tag, but only one with the same 'Owner identifier'.

  <Header for 'Unique file identifier', ID: "UFID">
  Owner identifier    <text string> $00
  Identifier    <up to 64 bytes binary data>


4.2. Text information frames

The text information frames are the most important frames, containing
information like artist, album and more. There may only be one text information
frame of its kind in an tag. If the textstring is followed by a termination
($00 (00)) all the following information should be ignored and not be
displayed. All text frame identifiers begin with "T". Only text frame
identifiers begin with "T", with the exception of the "TXXX" frame. All the
text information frames have the following format:

  <Header for 'Text information frame', ID: "T000" - "TZZZ", excluding "TXXX"
  described in 4.2.2.>
  Text encoding    $xx
  Information    <text string according to encoding>


4.2.1. Text information frames - details



  TALB
      The 'Album/Movie/Show title' frame is intended for the title of the
      recording(/source of sound) which the audio in the file is taken from.



  TBPM
      The 'BPM' frame contains the number of beats per minute in the mainpart
      of the audio. The BPM is an integer and represented as a numerical
      string.



  TCOM
      The 'Composer(s)' frame is intended for the name of the composer(s). They
      are seperated with the "/" character.



  TCON
      The 'Content type', which previously was stored as a one byte numeric
      value only, is now a numeric string. You may use one or several of the
      types as ID3v1.1 did or, since the category list would be impossible to
      maintain with accurate and up to date categories, define your own.

      References to the ID3v1 genres can be made by, as first byte, enter "("
      followed by a number from the genres list (appendix A) and ended with a
      ")" character. This is optionally followed by a refinement, e.g. "(21)"
      or "(4)Eurodisco". Several references can be made in the same frame, e.g.
      "(51)(39)". If the refinement should begin with a "(" character it should
      be replaced with "((", e.g. "((I can figure out any genre)" or "(55)((I
      think...)". The following new content types is defined in ID3v2 and is
      implemented in the same way as the numerig content types, e.g. "(RX)".

        RX    Remix
        CR    Cover




  TCOP
      The 'Copyright message' frame, which must begin with a year and a space
      character (making five characters), is intended for the copyright holder
      of the original sound, not the audio file itself. The absence of this
      frame means only that the copyright information is unavailable or has
      been removed, and must not be interpreted to mean that the sound is
      public domain. Every time this field is displayed the field must be
      preceded with "Copyright © ".



  TDAT
      The 'Date' frame is a numeric string in the DDMM format containing the
      date for the recording. This field is always four characters long.



  TDLY
      The 'Playlist delay' defines the numbers of milliseconds of silence
      between every song in a playlist. The player should use the "ETC" frame,
      if present, to skip initial silence and silence at the end of the audio
      to match the 'Playlist delay' time. The time is represented as a numeric
      string.



  TENC
      The 'Encoded by' frame contains the name of the person or organisation
      that encoded the audio file. This field may contain a copyright message,
      if the audio file also is copyrighted by the encoder.



  TEXT
      The 'Lyricist(s)/Text writer(s)' frame is intended for the writer(s) of
      the text or lyrics in the recording. They are seperated with the "/
      " character.



  TFLT
      The 'File type' frame indicates which type of audio this tag defines. The
      following type and refinements are defined:

        MPG       MPEG Audio
        /1        MPEG 1/2 layer I
        /2        MPEG 1/2 layer II
        /3        MPEG 1/2 layer III
        /2.5      MPEG 2.5
         /AAC     Advanced audio compression
        VQF       Transform-domain Weighted Interleave Vector Quantization
        PCM       Pulse Code Modulated audio


but other types may be used, not for these types though. This is used in a
similar way to the predefined types in the "TMED" frame, but without
parentheses. If this frame is not present audio type is assumed to be "MPG".


  TIME
      The 'Time' frame is a numeric string in the HHMM format containing the
      time for the recording. This field is always four characters long.



  TIT1
      The 'Content group description' frame is used if the sound belongs to a
      larger category of sounds/music. For example, classical music is often
      sorted in different musical sections (e.g. "Piano Concerto", "Weather -
      Hurricane").



  TIT2
      The 'Title/Songname/Content description' frame is the actual name of the
      piece (e.g. "Adagio", "Hurricane Donna").



  TIT3
      The 'Subtitle/Description refinement' frame is used for information
      directly related to the contents title (e.g. "Op. 16" or "Performed live
      at Wembley").



  TKEY
      The 'Initial key' frame contains the musical key in which the sound
      starts. It is represented as a string with a maximum length of three
      characters. The ground keys are represented with "A","B","C","D","E", "F"
      and "G" and halfkeys represented with "b" and "#". Minor is represented
      as "m". Example "Cbm". Off key is represented with an "o" only.



  TLAN
      The 'Language(s)' frame should contain the languages of the text or
      lyrics spoken or sung in the audio. The language is represented with
      three characters according to ISO-639-2. If more than one language is
      used in the text their language codes should follow according to their
      usage.



  TLEN
      The 'Length' frame contains the length of the audiofile in milliseconds,
      represented as a numeric string.



  TMED
      The 'Media type' frame describes from which media the sound originated.
      This may be a text string or a reference to the predefined media types
      found in the list below. References are made within "(" and ")" and are
      optionally followed by a text refinement, e.g. "(MC) with four channels".
      If a text refinement should begin with a "(" character it should be
      replaced with "((" in the same way as in the "TCO" frame. Predefined
      refinements is appended after the media type, e.g. "(CD/A)" or "(VID/PAL/
      VHS)".

        DIG     Other digital media
            /A  Analog transfer from media

        ANA     Other analog media
           /WAC Wax cylinder
           /8CA 8-track tape cassette

        CD      CD
             /A Analog transfer from media
            /DD DDD
            /AD ADD
            /AA AAD

        LD      Laserdisc
             /A Analog transfer from media

        TT      Turntable records
            /33 33.33 rpm
            /45 45 rpm
            /71 71.29 rpm
            /76 76.59 rpm
            /78 78.26 rpm
            /80 80 rpm

        MD      MiniDisc
             /A Analog transfer from media

        DAT     DAT
             /A Analog transfer from media
             /1 standard, 48 kHz/16 bits, linear
             /2 mode 2, 32 kHz/16 bits, linear
             /3 mode 3, 32 kHz/12 bits, nonlinear, low speed
             /4 mode 4, 32 kHz/12 bits, 4 channels
             /5 mode 5, 44.1 kHz/16 bits, linear
             /6 mode 6, 44.1 kHz/16 bits, 'wide track' play

        DCC     DCC
             /A Analog transfer from media

        DVD     DVD
             /A Analog transfer from media

        TV      Television
           /PAL PAL
          /NTSC NTSC
         /SECAM SECAM

        VID     Video
           /PAL PAL
          /NTSC NTSC
         /SECAM SECAM
           /VHS VHS
          /SVHS S-VHS
          /BETA BETAMAX

        RAD     Radio
            /FM FM
            /AM AM
            /LW LW
            /MW MW

        TEL     Telephone
             /I ISDN

        MC      MC (normal cassette)
             /4 4.75 cm/s (normal speed for a two sided cassette)
             /9 9.5 cm/s
             /I Type I cassette (ferric/normal)
            /II Type II cassette (chrome)
           /III Type III cassette (ferric chrome)
            /IV Type IV cassette (metal)

        REE     Reel
             /9 9.5 cm/s
            /19 19 cm/s
            /38 38 cm/s
            /76 76 cm/s
             /I Type I cassette (ferric/normal)
            /II Type II cassette (chrome)
           /III Type III cassette (ferric chrome)
            /IV Type IV cassette (metal)




  TOAL
      The 'Original album/movie/show title' frame is intended for the title of
      the original recording (or source of sound), if for example the music in
      the file should be a cover of a previously released song.



  TOFN
      The 'Original filename' frame contains the preferred filename for the
      file, since some media doesn't allow the desired length of the filename.
      The filename is case sensitive and includes its suffix.



  TOLY
      The 'Original lyricist(s)/text writer(s)' frame is intended for the text
      writer(s) of the original recording, if for example the music in the file
      should be a cover of a previously released song. The text writers are
      seperated with the "/" character.



  TOPE
      The 'Original artist(s)/performer(s)' frame is intended for the performer
      (s) of the original recording, if for example the music in the file
      should be a cover of a previously released song. The performers are
      seperated with the "/" character.



  TORY
      The 'Original release year' frame is intended for the year when the
      original recording, if for example the music in the file should be a
      cover of a previously released song, was released. The field is formatted
      as in the "TYER" frame.



  TOWN
      The 'File owner/licensee' frame contains the name of the owner or
      licensee of the file and it's contents.



  TPE1
      The 'Lead artist(s)/Lead performer(s)/Soloist(s)/Performing group' is
      used for the main artist(s). They are seperated with the "/" character.



  TPE2
      The 'Band/Orchestra/Accompaniment' frame is used for additional
      information about the performers in the recording.



  TPE3
      The 'Conductor' frame is used for the name of the conductor.



  TPE4
      The 'Interpreted, remixed, or otherwise modified by' frame contains more
      information about the people behind a remix and similar interpretations
      of another existing piece.



  TPOS
      The 'Part of a set' frame is a numeric string that describes which part
      of a set the audio came from. This frame is used if the source described
      in the "TALB" frame is divided into several mediums, e.g. a double CD.
      The value may be extended with a "/" character and a numeric string
      containing the total number of parts in the set. E.g. "1/2".



  TPUB
      The 'Publisher' frame simply contains the name of the label or publisher.



  TRCK
      The 'Track number/Position in set' frame is a numeric string containing
      the order number of the audio-file on its original recording. This may be
      extended with a "/" character and a numeric string containing the total
      numer of tracks/elements on the original recording. E.g. "4/9".



  TRDA
      The 'Recording dates' frame is a intended to be used as complement to the
      "TYER", "TDAT" and "TIME" frames. E.g. "4th-7th June, 12th June" in
      combination with the "TYER" frame.



  TRSN
      The 'Internet radio station name' frame contains the name of the internet
      radio station from which the audio is streamed.



  TRSO
      The 'Internet radio station owner' frame contains the name of the owner
      of the internet radio station from which the audio is streamed.



  TSIZ
      The 'Size' frame contains the size of the audiofile in bytes, excluding
      the ID3v2 tag, represented as a numeric string.



  TSRC
      The 'ISRC' frame should contain the International Standard Recording Code
      (ISRC) (12 characters).



  TSSE
      The 'Software/Hardware and settings used for encoding' frame includes the
      used audio encoder and its settings when the file was encoded. Hardware
      refers to hardware encoders, not the computer on which a program was run.



  TYER
      The 'Year' frame is a numeric string with a year of the recording. This
      frames is always four characters long (until the year 10000).


4.2.2. User defined text information frame

This frame is intended for one-string text information concerning the audiofile
in a similar way to the other "T"-frames. The frame body consists of a
description of the string, represented as a terminated string, followed by the
actual string. There may be more than one "TXXX" frame in each tag, but only
one with the same description.

  <Header for 'User defined text information frame', ID: "TXXX">
  Text encoding    $xx
  Description    <text string according to encoding> $00 (00)
  Value    <text string according to encoding>


4.3. URL link frames

With these frames dynamic data such as webpages with touring information, price
information or plain ordinary news can be added to the tag. There may only be
one URL link frame of its kind in an tag, except when stated otherwise in the
frame description. If the textstring is followed by a termination ($00 (00))
all the following information should be ignored and not be displayed. All URL
link frame identifiers begins with "W". Only URL link frame identifiers begins
with "W". All URL link frames have the following format:

  <Header for 'URL link frame', ID: "W000" - "WZZZ", excluding "WXXX" described
  in 4.3.2.>
  URL <text string>


4.3.1. URL link frames - details



  WCOM
      The 'Commercial information' frame is a URL pointing at a webpage with
      information such as where the album can be bought. There may be more than
      one "WCOM" frame in a tag, but not with the same content.



  WCOP
      The 'Copyright/Legal information' frame is a URL pointing at a webpage
      where the terms of use and ownership of the file is described.



  WOAF
      The 'Official audio file webpage' frame is a URL pointing at a file
      specific webpage.



  WOAR
      The 'Official artist/performer webpage' frame is a URL pointing at the
      artists official webpage. There may be more than one "WOAR" frame in a
      tag if the audio contains more than one performer, but not with the same
      content.



  WOAS
      The 'Official audio source webpage' frame is a URL pointing at the
      official webpage for the source of the audio file, e.g. a movie.



  WORS
      The 'Official internet radio station homepage' contains a URL pointing at
      the homepage of the internet radio station.



  WPAY
      The 'Payment' frame is a URL pointing at a webpage that will handle the
      process of paying for this file.



  WPUB
      The 'Publishers official webpage' frame is a URL pointing at the official
      wepage for the publisher.


4.3.2. User defined URL link frame

This frame is intended for URL links concerning the audiofile in a similar way
to the other "W"-frames. The frame body consists of a description of the
string, represented as a terminated string, followed by the actual URL. The URL
is always encoded with ISO-8859-1. There may be more than one "WXXX" frame in
each tag, but only one with the same description.

  <Header for 'User defined URL link frame', ID: "WXXX">
  Text encoding    $xx
  Description    <text string according to encoding> $00 (00)
  URL    <text string>


4.4. Involved people list

Since there might be a lot of people contributing to an audio file in various
ways, such as musicians and technicians, the 'Text information frames' are
often insufficient to list everyone involved in a project. The 'Involved people
list' is a frame containing the names of those involved, and how they were
involved. The body simply contains a terminated string with the involvement
directly followed by a terminated string with the involvee followed by a new
involvement and so on. There may only be one "IPLS" frame in each tag.

  <Header for 'Involved people list', ID: "IPLS">
  Text encoding    $xx
  People list strings    <text strings according to encoding>


4.5. Music CD identifier

This frame is intended for music that comes from a CD, so that the CD can be
identified in databases such as the CDDB. The frame consists of a binary dump
of the Table Of Contents, TOC, from the CD, which is a header of 4 bytes and
then 8 bytes/track on the CD plus 8 bytes for the 'lead out' making a maximum
of 804 bytes. The offset to the beginning of every track on the CD should be
described with a four bytes absolute CD-frame address per track, and not with
absolute time. This frame requires a present and valid "TRCK" frame, even if
the CD's only got one track. There may only be one "MCDI" frame in each tag.

  <Header for 'Music CD identifier', ID: "MCDI">
  CD TOC <binary data>


4.6. Event timing codes

This frame allows synchronisation with key events in a song or sound. The
header is:

  <Header for 'Event timing codes', ID: "ETCO">
  Time stamp format    $xx

Where time stamp format is:

  $01 Absolute time, 32 bit sized, using MPEG frames as unit
  $02 Absolute time, 32 bit sized, using milliseconds as unit

Absolute time means that every stamp contains the time from the beginning of the
file.
Followed by a list of key events in the following format:

  Type of event   $xx
  Time stamp      $xx (xx ...)

The 'Time stamp' is set to zero if directly at the beginning of the sound or
after the previous event. All events should be sorted in chronological order.
The type of event is as follows:

  $00     padding (has no meaning)
  $01     end of initial silence
  $02     intro start
  $03     mainpart start
  $04     outro start
  $05     outro end
  $06     verse start
  $07     refrain start
  $08     interlude start
  $09     theme start
  $0A     variation start
  $0B     key change
  $0C     time change
  $0D     momentary unwanted noise (Snap, Crackle &amp; Pop)
  $0E     sustained noise
  $0F     sustained noise end
  $10     intro end
  $11     mainpart end
  $12     verse end
  $13     refrain end
  $14     theme end
  $15-$DF reserved for future use
  $E0-$EF not predefined sync 0-F
  $F0-$FC reserved for future use
  $FD     audio end (start of silence)
  $FE     audio file ends
  $FF     one more byte of events follows (all the following bytes with the
  value $FF have the same function)

Terminating the start events such as "intro start" is not required. The 'Not
predefined sync's ($E0-EF) are for user events. You might want to synchronise
your music to something, like setting of an explosion on-stage, turning on your
screensaver etc.
There may only be one "ETCO" frame in each tag.

4.7. MPEG location lookup table

To increase performance and accuracy of jumps within a MPEG audio file, frames
with timecodes in different locations in the file might be useful. The ID3v2
frame includes references that the software can use to calculate positions in
the file. After the frame header is a descriptor of how much the 'frame
counter' should increase for every reference. If this value is two then the
first reference points out the second frame, the 2nd reference the 4th frame,
the 3rd reference the 6th frame etc. In a similar way the 'bytes between
reference' and 'milliseconds between reference' points out bytes and
milliseconds respectively.
Each reference consists of two parts; a certain number of bits, as defined in
'bits for bytes deviation', that describes the difference between what is said
in 'bytes between reference' and the reality and a certain number of bits, as
defined in 'bits for milliseconds deviation', that describes the difference
between what is said in 'milliseconds between reference' and the reality. The
number of bits in every reference, i.e. 'bits for bytes deviation'+'bits for
milliseconds deviation', must be a multiple of four. There may only be one
"MLLT" frame in each tag.

  <Header for 'Location lookup table', ID: "MLLT">
  MPEG frames between reference   $xx xx
  Bytes between reference         $xx xx xx
  Milliseconds between reference  $xx xx xx
  Bits for bytes deviation        $xx
  Bits for milliseconds dev.      $xx

Then for every reference the following data is included;

  Deviation in bytes         %xxx....
  Deviation in milliseconds  %xxx....


4.8. Synchronised tempo codes

For a more accurate description of the tempo of a musical piece this frame
might be used. After the header follows one byte describing which time stamp
format should be used. Then follows one or more tempo codes. Each tempo code
consists of one tempo part and one time part. The tempo is in BPM described
with one or two bytes. If the first byte has the value $FF, one more byte
follows, which is added to the first giving a range from 2 - 510 BPM, since $00
and $01 is reserved. $00 is used to describe a beat-free time period, which is
not the same as a music-free time period. $01 is used to indicate one single
beat-stroke followed by a beat-free period.
The tempo descriptor is followed by a time stamp. Every time the tempo in the
music changes, a tempo descriptor may indicate this for the player. All tempo
descriptors should be sorted in chronological order. The first beat-stroke in a
time-period is at the same time as the beat description occurs. There may only
be one "SYTC" frame in each tag.

  <Header for 'Synchronised tempo codes', ID: "SYTC">
  Time stamp format    $xx
  Tempo data           <binary data>

Where time stamp format is:

  $01 Absolute time, 32 bit sized, using MPEG frames as unit
  $02 Absolute time, 32 bit sized, using milliseconds as unit

Absolute time means that every stamp contains the time from the beginning of the
file.

4.9. Unsychronised lyrics/text transcription

This frame contains the lyrics of the song or a text transcription of other
vocal activities. The head includes an encoding descriptor and a content
descriptor. The body consists of the actual text. The 'Content descriptor' is a
terminated string. If no descriptor is entered, 'Content descriptor' is $00
(00) only. Newline characters are allowed in the text. There may be more than
one 'Unsynchronised lyrics/text transcription' frame in each tag, but only one
with the same language and content descriptor.

  <Header for 'Unsynchronised lyrics/text transcription', ID: "USLT">
  Text encoding       $xx
  Language            $xx xx xx
  Content descriptor  <text string according to encoding> $00 (00)
  Lyrics/text         <full text string according to encoding>


4.10. Synchronised lyrics/text

This is another way of incorporating the words, said or sung lyrics, in the
audio file as text, this time, however, in sync with the audio. It might also
be used to describing events e.g. occurring on a stage or on the screen in sync
with the audio. The header includes a content descriptor, represented with as
terminated textstring. If no descriptor is entered, 'Content descriptor' is $00
(00) only.

  <Header for 'Synchronised lyrics/text', ID: "SYLT">
  Text encoding       $xx
  Language            $xx xx xx
  Time stamp format   $xx
  Content type        $xx
  Content descriptor  <text string according to encoding> $00 (00)

Encoding:

  $00     ISO-8859-1 character set is used => $00 is sync identifier.
  $01     Unicode character set is used => $00 00 is sync identifier.

Content type:

  $00     is other
  $01     is lyrics
  $02     is text transcription
  $03     is movement/part name (e.g. "Adagio")
  $04     is events (e.g. "Don Quijote enters the stage")
  $05     is chord (e.g. "Bb F Fsus")
  $06     is trivia/'pop up' information

Time stamp format is:

  $01 Absolute time, 32 bit sized, using MPEG frames as unit
  $02 Absolute time, 32 bit sized, using milliseconds as unit

Absolute time means that every stamp contains the time from the beginning of the
file.
The text that follows the frame header differs from that of the unsynchronised
lyrics/text transcription in one major way. Each syllable (or whatever size of
text is considered to be convenient by the encoder) is a null terminated string
followed by a time stamp denoting where in the sound file it belongs. Each sync
thus has the following structure:

  Terminated text to be synced (typically a syllable)
  Sync identifier (terminator to above string)    $00 (00)
  Time stamp      $xx (xx ...)

The 'time stamp' is set to zero or the whole sync is omitted if located
directly at the beginning of the sound. All time stamps should be sorted in
chronological order. The sync can be considered as a validator of the
subsequent string.
Newline ($0A) characters are allowed in all "SYLT" frames and should be used
after every entry (name, event etc.) in a frame with the content type $03 -
$04.
A few considerations regarding whitespace characters: Whitespace separating
words should mark the beginning of a new word, thus occurring in front of the
first syllable of a new word. This is also valid for new line characters. A
syllable followed by a comma should not be broken apart with a sync (both the
syllable and the comma should be before the sync).
An example: The "USLT" passage

  "Strangers in the night" $0A "Exchanging glances"

would be "SYLT" encoded as:

  "Strang" $00 xx xx "ers" $00 xx xx " in" $00 xx xx " the" $00
  xx xx " night" $00 xx xx 0A "Ex" $00 xx xx "chang" $00 xx xx
  "ing" $00 xx xx "glan" $00 xx xx "ces" $00 xx xx

There may be more than one "SYLT" frame in each tag, but only one with the same
language and content descriptor.

4.11. Comments

This frame is indended for any kind of full text information that does not fit
in any other frame. It consists of a frame header followed by encoding,
language and content descriptors and is ended with the actual comment as a text
string. Newline characters are allowed in the comment text string. There may be
more than one comment frame in each tag, but only one with the same language
and content descriptor.

  <Header for 'Comment', ID: "COMM">
  Text encoding           $xx
  Language                $xx xx xx
  Short content descrip.  <text string according to encoding> $00 (00)
  The actual text         <full text string according to encoding>


4.12. Relative volume adjustment

This is a more subjective function than the previous ones. It allows the user
to say how much he wants to increase/decrease the volume on each channel while
the file is played. The purpose is to be able to align all files to a reference
volume, so that you don't have to change the volume constantly. This frame may
also be used to balance adjust the audio. If the volume peak levels are known
then this could be described with the 'Peak volume right' and 'Peak volume
left' field. If Peakvolume is not known these fields could be left zeroed or,
if no other data follows, be completely omitted. There may only be one "RVAD"
frame in each tag.

  <Header for 'Relative volume adjustment', ID: "RVAD">
  Increment/decrement             %00xxxxxx
  Bits used for volume descr.     $xx
  Relative volume change, right   $xx xx (xx ...)
  Relative volume change, left    $xx xx (xx ...)
  Peak volume right               $xx xx (xx ...)
  Peak volume left                $xx xx (xx ...)

In the increment/decrement field bit 0 is used to indicate the right channel
and bit 1 is used to indicate the left channel. 1 is increment and 0 is
decrement.
The 'bits used for volume description' field is normally $10 (16 bits) for MPEG
2 layer I, II and III and MPEG 2.5. This value may not be $00. The volume is
always represented with whole bytes, padded in the beginning (highest bits)
when 'bits used for volume description' is not a multiple of eight.
This datablock is then optionally followed by a volume definition for the left
and right back channels. If this information is appended to the frame the first
two channels will be treated as front channels. In the increment/decrement
field bit 2 is used to indicate the right back channel and bit 3 for the left
back channel.

  Relative volume change, right back      $xx xx (xx ...)
  Relative volume change, left back       $xx xx (xx ...)
  Peak volume right back                  $xx xx (xx ...)
  Peak volume left back                   $xx xx (xx ...)

If the center channel adjustment is present the following is appended to the
existing frame, after the left and right back channels. The center channel is
represented by bit 4 in the increase/decrease field.

  Relative volume change, center  $xx xx (xx ...)
  Peak volume center              $xx xx (xx ...)

If the bass channel adjustment is present the following is appended to the
existing frame, after the center channel. The bass channel is represented by
bit 5 in the increase/decrease field.

  Relative volume change, bass    $xx xx (xx ...)
  Peak volume bass                $xx xx (xx ...)


4.13. Equalisation

This is another subjective, alignment frame. It allows the user to predefine an
equalisation curve within the audio file. There may only be one "EQUA" frame in
each tag.

  <Header of 'Equalisation', ID: "EQUA">
  Adjustment bits $xx

The 'adjustment bits' field defines the number of bits used for representation
of the adjustment. This is normally $10 (16 bits) for MPEG 2 layer I, II and
III and MPEG 2.5. This value may not be $00.
This is followed by 2 bytes + ('adjustment bits' rounded up to the nearest
byte) for every equalisation band in the following format, giving a frequency
range of 0 - 32767Hz:

  Increment/decrement     %x (MSB of the Frequency)
  Frequency               (lower 15 bits)
  Adjustment              $xx (xx ...)

The increment/decrement bit is 1 for increment and 0 for decrement. The
equalisation bands should be ordered increasingly with reference to frequency.
All frequencies don't have to be declared. The equalisation curve in the
reading software should be interpolated between the values in this frame. Three
equal adjustments for three subsequent frequencies. A frequency should only be
described once in the frame.

4.14. Reverb

Yet another subjective one. You may here adjust echoes of different kinds.
Reverb left/right is the delay between every bounce in ms. Reverb bounces left/
right is the number of bounces that should be made. $FF equals an infinite
number of bounces. Feedback is the amount of volume that should be returned to
the next echo bounce. $00 is 0%, $FF is 100%. If this value were $7F, there
would be 50% volume reduction on the first bounce, 50% of that on the second
and so on. Left to left means the sound from the left bounce to be played in
the left speaker, while left to right means sound from the left bounce to be
played in the right speaker.
'Premix left to right' is the amount of left sound to be mixed in the right
before any reverb is applied, where $00 id 0% and $FF is 100%. 'Premix right to
left' does the same thing, but right to left. Setting both premix to $FF would
result in a mono output (if the reverb is applied symmetric). There may only be
one "RVRB" frame in each tag.

  <Header for 'Reverb', ID: "RVRB">
  Reverb left (ms)                $xx xx
  Reverb right (ms)               $xx xx
  Reverb bounces, left            $xx
  Reverb bounces, right           $xx
  Reverb feedback, left to left   $xx
  Reverb feedback, left to right  $xx
  Reverb feedback, right to right $xx
  Reverb feedback, right to left  $xx
  Premix left to right            $xx
  Premix right to left            $xx


4.15. Attached picture

This frame contains a picture directly related to the audio file. Image format
is the MIME type and subtype for the image. In the event that the MIME media
type name is omitted, "image/" will be implied. The "image/png" or "image/jpeg"
picture format should be used when interoperability is wanted. Description is a
short description of the picture, represented as a terminated textstring. The
description has a maximum length of 64 characters, but may be empty. There may
be several pictures attached to one file, each in their individual "APIC"
frame, but only one with the same content descriptor. There may only be one
picture with the picture type declared as picture type $01 and $02
respectively. There is the possibility to put only a link to the image file by
using the 'MIME type' "-->" and having a complete URL instead of picture data.
The use of linked files should however be used sparingly since there is the
risk of separation of files.

  <Header for 'Attached picture', ID: "APIC">
  Text encoding   $xx
  MIME type       <text string> $00
  Picture type    $xx
  Description     <text string according to encoding> $00 (00)
  Picture data    <binary data>

Picture type:

  $00     Other
  $01     32x32 pixels 'file icon' (PNG only)
  $02     Other file icon
  $03     Cover (front)
  $04     Cover (back)
  $05     Leaflet page
  $06     Media (e.g. lable side of CD)
  $07     Lead artist/lead performer/soloist
  $08     Artist/performer
  $09     Conductor
  $0A     Band/Orchestra
  $0B     Composer
  $0C     Lyricist/text writer
  $0D     Recording Location
  $0E     During recording
  $0F     During performance
  $10     Movie/video screen capture
  $11     A bright coloured fish
  $12     Illustration
  $13     Band/artist logotype
  $14     Publisher/Studio logotype


4.16. General encapsulated object

In this frame any type of file can be encapsulated. After the header, 'Frame
size' and 'Encoding' follows 'MIME type' represented as as a terminated string
encoded with ISO-8859-1. The filename is case sensitive and is encoded as
'Encoding'. Then follows a content description as terminated string, encoded as
'Encoding'. The last thing in the frame is the actual object. The first two
strings may be omitted, leaving only their terminations. There may be more than
one "GEOB" frame in each tag, but only one with the same content descriptor.

  <Header for 'General encapsulated object', ID: "GEOB">
  Text encoding           $xx
  MIME type               <text string> $00
  Filename                <text string according to encoding> $00 (00)
  Content description     $00 (00)
  Encapsulated object     <binary data>


4.17. Play counter

This is simply a counter of the number of times a file has been played. The
value is increased by one every time the file begins to play. There may only be
one "PCNT" frame in each tag. When the counter reaches all one's, one byte is
inserted in front of the counter thus making the counter eight bits bigger. The
counter must be at least 32-bits long to begin with.

  <Header for 'Play counter', ID: "PCNT">
  Counter         $xx xx xx xx (xx ...)


4.18. Popularimeter

The purpose of this frame is to specify how good an audio file is. Many
interesting applications could be found to this frame such as a playlist that
features better audiofiles more often than others or it could be used to
profile a person's taste and find other 'good' files by comparing people's
profiles. The frame is very simple. It contains the email address to the user,
one rating byte and a four byte play counter, intended to be increased with one
for every time the file is played. The email is a terminated string. The rating
is 1-255 where 1 is worst and 255 is best. 0 is unknown. If no personal counter
is wanted it may be omitted. When the counter reaches all one's, one byte is
inserted in front of the counter thus making the counter eight bits bigger in
the same away as the play counter ("PCNT"). There may be more than one "POPM"
frame in each tag, but only one with the same email address.

  <Header for 'Popularimeter', ID: "POPM">
  Email to user   <text string> $00
  Rating          $xx
  Counter         $xx xx xx xx (xx ...)


4.19. Recommended buffer size

Sometimes the server from which a audio file is streamed is aware of
transmission or coding problems resulting in interruptions in the audio stream.
In these cases, the size of the buffer can be recommended by the server using
this frame. If the 'embedded info flag' is true (1) then this indicates that an
ID3 tag with the maximum size described in 'Buffer size' may occur in the
audiostream. In such case the tag should reside between two MPEG frames, if the
audio is MPEG encoded. If the position of the next tag is known, 'offset to
next tag' may be used. The offset is calculated from the end of tag in which
this frame resides to the first byte of the header in the next. This field may
be omitted. Embedded tags are generally not recommended since this could render
unpredictable behaviour from present software/hardware.
For applications like streaming audio it might be an idea to embed tags into
the audio stream though. If the clients connects to individual connections like
HTTP and there is a possibility to begin every transmission with a tag, then
this tag should include a 'recommended buffer size' frame. If the client is
connected to a arbitrary point in the stream, such as radio or multicast, then
the 'recommended buffer size' frame should be included in every tag. Every tag
that is picked up after the initial/first tag is to be considered as an update
of the previous one. E.g. if there is a "TIT2" frame in the first received tag
and one in the second tag, then the first should be 'replaced' with the second.
The 'Buffer size' should be kept to a minimum. There may only be one "RBUF"
frame in each tag.

  <Header for 'Recommended buffer size', ID: "RBUF">
  Buffer size             $xx xx xx
  Embedded info flag      %0000000x
  Offset to next tag      $xx xx xx xx


4.20. Audio encryption

This frame indicates if the actual audio stream is encrypted, and by whom.
Since standardisation of such encryption scheme is beyond this document, all
"AENC" frames begin with a terminated string with a URL containing an email
address, or a link to a location where an email address can be found, that
belongs to the organisation responsible for this specific encrypted audio file.
Questions regarding the encrypted audio should be sent to the email address
specified. If a $00 is found directly after the 'Frame size' and the audiofile
indeed is encrypted, the whole file may be considered useless.
After the 'Owner identifier', a pointer to an unencrypted part of the audio can
be specified. The 'Preview start' and 'Preview length' is described in frames.
If no part is unencrypted, these fields should be left zeroed. After the
'preview length' field follows optionally a datablock required for decryption
of the audio. There may be more than one "AENC" frames in a tag, but only one
with the same 'Owner identifier'.

  <Header for 'Audio encryption', ID: "AENC">
  Owner identifier        <text string> $00
  Preview start           $xx xx
  Preview length          $xx xx
  Encryption info         <binary data>


4.21. Linked information

To keep space waste as low as possible this frame may be used to link
information from another ID3v2 tag that might reside in another audio file or
alone in a binary file. It is recommended that this method is only used when
the files are stored on a CD-ROM or other circumstances when the risk of file
seperation is low. The frame contains a frame identifier, which is the frame
that should be linked into this tag, a URL field, where a reference to the file
where the frame is given, and additional ID data, if needed. Data should be
retrieved from the first tag found in the file to which this link points. There
may be more than one "LINK" frame in a tag, but only one with the same
contents. A linked frame is to be considered as part of the tag and has the
same restrictions as if it was a physical part of the tag (i.e. only one "RVRB"
frame allowed, whether it's linked or not).

  <Header for 'Linked information', ID: "LINK">
  Frame identifier        $xx xx xx
  URL                     <text string> $00
  ID and additional data  <text string(s)>

Frames that may be linked and need no additional data are "IPLS", "MCID",
"ETCO", "MLLT", "SYTC", "RVAD", "EQUA", "RVRB", "RBUF", the text information
frames and the URL link frames.
The "TXXX", "APIC", "GEOB" and "AENC" frames may be linked with the content
descriptor as additional ID data.
The "COMM", "SYLT" and "USLT" frames may be linked with three bytes of language
descriptor directly followed by a content descriptor as additional ID data.

4.22. Position synchronisation frame

This frame delivers information to the listener of how far into the audio
stream he picked up; in effect, it states the time offset of the first frame in
the stream. The frame layout is:

  <Head for 'Position synchronisation', ID: "POSS">
  Time stamp format   $xx
  Position            $xx (xx ...)

Where time stamp format is:

  $01 Absolute time, 32 bit sized, using MPEG frames as unit
  $02 Absolute time, 32 bit sized, using milliseconds as unit

and position is where in the audio the listener starts to receive, i.e. the
beginning of the next frame. If this frame is used in the beginning of a file
the value is always 0. There may only be one "POSS" frame in each tag.

4.23. Terms of use frame

This frame contains a brief description of the terms of use and ownership of
the file. More detailed information concerning the legal terms might be
available through the "WCOP" frame. Newlines are allowed in the text. There may
only be one "USER" frame in a tag.

  <Header for 'Terms of use frame', ID: "USER">
  Text encoding   $xx
  Language        $xx xx xx
  The actual text <text string according to encoding>


4.24. Ownership frame

The ownership frame might be used as a reminder of a made transaction or, if
signed, as proof. Note that the "USER" and "TOWN" frames are good to use in
conjunction with this one. The frame begins, after the frame ID, size and
encoding fields, with a 'price payed' field. The first three characters of this
field contains the currency used for the transaction, encoded according to ISO-
4217 alphabetic currency code. Concatenated to this is the actual price payed,
as a numerical string using "." as the decimal separator. Next is an 8
character date string (YYYYMMDD) followed by a string with the name of the
seller as the last field in the frame. There may only be one "OWNE" frame in a
tag.

  <Header for 'Ownership frame', ID: "OWNE">
  Text encoding   $xx
  Price payed     <text string> $00
  Date of purch.  <text string>
  Seller          <text string according to encoding>


4.25. Commercial frame

This frame enables several competing offers in the same tag by bundling all
needed information. That makes this frame rather complex but it's an easier
solution than if one tries to achieve the same result with several frames. The
frame begins, after the frame ID, size and encoding fields, with a price string
field. A price is constructed by one three character currency code, encoded
according to ISO-4217 alphabetic currency code, followed by a numerical value
where "." is used as decimal seperator. In the price string several prices may
be concatenated, seperated by a "/" character, but there may only be one
currency of each type.
The price string is followed by an 8 character date string in the format
YYYYMMDD, describing for how long the price is valid. After that is a contact
URL, with which the user can contact the seller, followed by a one byte
'received as' field. It describes how the audio is delivered when bought
according to the following list:

  $00     Other
  $01     Standard CD album with other songs
  $02     Compressed audio on CD
  $03     File over the Internet
  $04     Stream over the Internet
  $05     As note sheets
  $06     As note sheets in a book with other sheets
  $07     Music on other media
  $08     Non-musical merchandise

Next follows a terminated string with the name of the seller followed by a
terminated string with a short description of the product. The last thing is
the ability to include a company logotype. The first of them is the 'Picture
MIME type' field containing information about which picture format is used. In
the event that the MIME media type name is omitted, "image/" will be implied.
Currently only "image/png" and "image/jpeg" are allowed. This format string is
followed by the binary picture data. This two last fields may be omitted if no
picture is to attach.

  <Header for 'Commercial frame', ID: "COMR">
  Text encoding     $xx
  Price string      <text string> $00
  Valid until       <text string>
  Contact URL       <text string> $00
  Received as       $xx
  Name of seller    <text string according to encoding> $00 (00)
  Description       <text string according to encoding> $00 (00)
  Picture MIME type <string> $00
  Seller logo       <binary data>


4.26. Encryption method registration

To identify with which method a frame has been encrypted the encryption method
must be registered in the tag with this frame. The 'Owner identifier' is a
null-terminated string with a URL containing an email address, or a link to a
location where an email address can be found, that belongs to the organisation
responsible for this specific encryption method. Questions regarding the
encryption method should be sent to the indicated email address. The 'Method
symbol' contains a value that is associated with this method throughout the
whole tag. Values below $80 are reserved. The 'Method symbol' may optionally be
followed by encryption specific data. There may be several "ENCR" frames in a
tag but only one containing the same symbol and only one containing the same
owner identifier. The method must be used somewhere in the tag. See section
3.3.1, flag j for more information.

  <Header for 'Encryption method registration', ID: "ENCR">
  Owner identifier    <text string> $00
  Method symbol       $xx
  Encryption data     <binary data>


4.27. Group identification registration

This frame enables grouping of otherwise unrelated frames. This can be used
when some frames are to be signed. To identify which frames belongs to a set of
frames a group identifier must be registered in the tag with this frame. The
'Owner identifier' is a null-terminated string with a URL containing an email
address, or a link to a location where an email address can be found, that
belongs to the organisation responsible for this grouping. Questions regarding
the grouping should be sent to the indicated email address. The 'Group symbol'
contains a value that associates the frame with this group throughout the whole
tag. Values below $80 are reserved. The 'Group symbol' may optionally be
followed by some group specific data, e.g. a digital signature. There may be
several "GRID" frames in a tag but only one containing the same symbol and only
one containing the same owner identifier. The group symbol must be used
somewhere in the tag. See section_3.3.1, flag j for more information.

  <Header for 'Group ID registration', ID: "GRID">
  Owner identifier     <text string> $00
  Group symbol         $xx
  Group dependent data <binary data>


4.28. Private frame

This frame is used to contain information from a software producer that its
program uses and does not fit into the other frames. The frame consists of an
'Owner identifier' string and the binary data. The 'Owner identifier' is a
null-terminated string with a URL containing an email address, or a link to a
location where an email address can be found, that belongs to the organisation
responsible for the frame. Questions regarding the frame should be sent to the
indicated email address. The tag may contain more than one "PRIV" frame but
only with different contents. It is recommended to keep the number of "PRIV"
frames as low as possible.

  <Header for 'Private frame', ID: "PRIV">
  Owner identifier        <text string> $00
  The private data        <binary data>



5. The unsynchronisation scheme

The only purpose of the 'unsynchronisation scheme' is to make the ID3v2 tag as
compatible as possible with existing software. There is no use in
'unsynchronising' tags if the file is only to be processed by new software.
Unsynchronisation may only be made with MPEG 2 layer I, II and III and MPEG 2.5
files.
Whenever a false synchronisation is found within the tag, one zeroed byte is
inserted after the first false synchronisation byte. The format of a correct
sync that should be altered by ID3 encoders is as follows:

  %11111111 111xxxxx

And should be replaced with:

  %11111111 00000000 111xxxxx

This has the side effect that all $FF 00 combinations have to be altered, so
they won't be affected by the decoding process. Therefore all the $FF 00
combinations have to be replaced with the $FF 00 00 combination during the
unsynchronisation.
To indicate usage of the unsynchronisation, the first bit in 'ID3 flags' should
be set. This bit should only be set if the tag contains a, now corrected, false
synchronisation. The bit should only be clear if the tag does not contain any
false synchronisations.
Do bear in mind, that if a compression scheme is used by the encoder, the
unsynchronisation scheme should be applied *afterwards*. When decoding a
compressed, 'unsynchronised' file, the 'unsynchronisation scheme' should be
parsed first, decompression afterwards.
If the last byte in the tag is $FF, and there is a need to eliminate false
synchronisations in the tag, at least one byte of padding should be added.


6. Copyright

Copyright © Martin Nilsson 1998. All Rights Reserved.
This document and translations of it may be copied and furnished to others, and
derivative works that comment on or otherwise explain it or assist in its
implementation may be prepared, copied, published and distributed, in whole or
in part, without restriction of any kind, provided that a reference to this
document is included on all such copies and derivative works. However, this
document itself may not be modified in any way and reissued as the original
document.
The limited permissions granted above are perpetual and will not be revoked.
This document and the information contained herein is provided on an "AS IS"
basis and THE AUTHORS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT
INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR
A PARTICULAR PURPOSE.


7. References

[CDDB] Compact Disc Data Base http://www.cddb.com

[ID3v2] Martin Nilsson, "ID3v2_informal_standard".

 [ISO-639-2] ISO/FDIS 639-2. Codes for the representation of names of
languages, Part 2: Alpha-3 code. Technical committee / subcommittee: TC 37 / SC
2

 [ISO-4217] ISO 4217:1995. Codes for the representation of currencies and
funds. Technical committee / subcommittee: TC 68

 [ISO-8859-1] ISO/IEC DIS 8859-1. 8-bit single-byte coded graphic character
sets, Part 1: Latin alphabet No. 1. Technical committee / subcommittee: JTC 1 /
SC 2

 [ISRC] ISO 3901:1986 International Standard Recording Code (ISRC). Technical
committee / subcommittee: TC 46 / SC 9

 [JFIF] JPEG File Interchange Format, version 1.02, http://www.w3.org/Graphics/
JPEG/jfif.txt

 [MIME] Freed, N. and N. Borenstein, "Multipurpose Internet Mail Extensions
(MIME) Part One: Format of Internet Message Bodies", RFC 2045, November 1996.,
ftp://ftp.isi.edu/in-notes/rfc2045.txt

 [MPEG] ISO/IEC 11172-3:1993. Coding of moving pictures and associated audio
for digital storage media at up to about 1,5 Mbit/s, Part 3: Audio. Technical
committee / subcommittee: JTC 1 / SC 29 and ISO/IEC 13818-3:1995 Generic coding
of moving pictures and associated audio information, Part 3: Audio. Technical
committee / subcommittee: JTC 1 / SC 29 and ISO/IEC DIS 13818-3 Generic coding
of moving pictures and associated audio information, Part 3: Audio (Revision of
ISO/IEC 13818-3:1995)

 [PNG] Portable Network Graphics, version 1.0, http://www.w3.org/TR/REC-png-
multi.html

 [UNICODE] ISO/IEC 10646-1:1993. Universal Multiple-Octet Coded Character Set
(UCS), Part 1: Architecture and Basic Multilingual Plane. Technical committee /
subcommittee: JTC 1 / SC 2, http://www.unicode.org

 [URL] T. Berners-Lee, L. Masinter &amp; M. McCahill, "Uniform Resource
Locators (URL).", RFC 1738, December 1994., ftp://ftp.isi.edu/in-notes/
rfc1738.txt

 [ZLIB] P. Deutsch, Aladdin Enterprises &amp; J-L. Gailly, "ZLIB Compressed
Data Format Specification version 3.3", RFC 1950, May 1996., url:ftp://
ftp.isi.edu/in-notes/rfc1950.txt



8. Appendix


8.1. Appendix A - Genre List from ID3v1

The following genres is defined in ID3v1

   0. Blues
    1. Classic Rock
    2. Country
    3. Dance
    4. Disco
    5. Funk
    6. Grunge
    7. Hip-Hop
    8. Jazz
    9. Metal
   10. New Age
   11. Oldies
   12. Other
   13. Pop
   14. R&amp;B
   15. Rap
   16. Reggae
   17. Rock
   18. Techno
   19. Industrial
   20. Alternative
   21. Ska
   22. Death Metal
   23. Pranks
   24. Soundtrack
   25. Euro-Techno
   26. Ambient
   27. Trip-Hop
   28. Vocal
   29. Jazz+Funk
   30. Fusion
   31. Trance
   32. Classical
   33. Instrumental
   34. Acid
   35. House
   36. Game
   37. Sound Clip
   38. Gospel
   39. Noise
   40. AlternRock
   41. Bass
   42. Soul
   43. Punk
   44. Space
   45. Meditative
   46. Instrumental Pop
   47. Instrumental Rock
   48. Ethnic
   49. Gothic
   50. Darkwave
   51. Techno-Industrial
   52. Electronic
   53. Pop-Folk
   54. Eurodance
   55. Dream
   56. Southern Rock
   57. Comedy
   58. Cult
   59. Gangsta
   60. Top 40
   61. Christian Rap
   62. Pop/Funk
   63. Jungle
   64. Native American
   65. Cabaret
   66. New Wave
   67. Psychadelic
   68. Rave
   69. Showtunes
   70. Trailer
   71. Lo-Fi
   72. Tribal
   73. Acid Punk
   74. Acid Jazz
   75. Polka
   76. Retro
   77. Musical
   78. Rock &amp; Roll
   79. Hard Rock

The following genres are Winamp extensions

   80. Folk
   81. Folk-Rock
   82. National Folk
   83. Swing
   84. Fast Fusion
   85. Bebob
   86. Latin
   87. Revival
   88. Celtic
   89. Bluegrass
   90. Avantgarde
   91. Gothic Rock
   92. Progressive Rock
   93. Psychedelic Rock
   94. Symphonic Rock
   95. Slow Rock
   96. Big Band
   97. Chorus
   98. Easy Listening
   99. Acoustic
  100. Humour
  101. Speech
  102. Chanson
  103. Opera
  104. Chamber Music
  105. Sonata
  106. Symphony
  107. Booty Bass
  108. Primus
  109. Porn Groove
  110. Satire
  111. Slow Jam
  112. Club
  113. Tango
  114. Samba
  115. Folklore
  116. Ballad
  117. Power Ballad
  118. Rhythmic Soul
  119. Freestyle
  120. Duet
  121. Punk Rock
  122. Drum Solo
  123. A capella
  124. Euro-House
  125. Dance Hall



9. Author's Address

Written by
Martin Nilsson
Rydsven 246 C. 30
S-584 34 Linkoping
Sweden

Email: nilsson at id3.org

Edited by
Dirk Mahoney
57 Pechey Street
Chermside Q
Australia 4032

Email: dirk at id3.org

Johan Sundstrom
Alsttersgatan 5 A. 34
S-584 35 Linkoping
Sweden

Email: johan at id3.org
id3v2.3.0 (last edited 2006-12-18 06:25:16 by DanONeill)
