aboutsummaryrefslogtreecommitdiffhomepage
path: root/doc/id3/id3v2.3.0.html
diff options
context:
space:
mode:
Diffstat (limited to 'doc/id3/id3v2.3.0.html')
-rwxr-xr-xdoc/id3/id3v2.3.0.html2257
1 files changed, 2257 insertions, 0 deletions
diff --git a/doc/id3/id3v2.3.0.html b/doc/id3/id3v2.3.0.html
new file mode 100755
index 0000000..2aee39d
--- /dev/null
+++ b/doc/id3/id3v2.3.0.html
@@ -0,0 +1,2257 @@
+<html><head><title>ID3v2 - Informal standard</title>
+<style type="text/css">
+body {font: 16px times}
+h1 {font: 34px times}
+h3 {font: 20px times; margin-left: 5%}
+div.h5 {font: 16px times; font-weight: bold; margin-left: 8%}
+div.t {margin-left: 10%; margin-right: 10%}
+p.t {margin-left: 10%; margin-right: 10%}
+p.ind {margin-left: 15%; margin-right: 15%}
+pre {font: 16px times}
+pre {margin-left: 40px}
+a {font: 15px arial, helvetica; color: #CC5500; text-decoration: none}
+</style>
+<META name="description" content="ID3v2 informal standard.">
+<META name="keywords" content="ID3v2">
+</head><body bgcolor=white text=black>
+
+<a name="top"> </a>
+
+<br>&nbsp;
+<p><table border=0 width=100%><tr><td>Informal standard<br>Document: id3v2.3.0.html</td><td align=right>
+M. Nilsson<br>3rd February 1999</td></tr></table></p>
+
+<h1 align=center>ID3 tag version 2.3.0</h1>
+
+<a name="status"> </a>
+<h3>Status of this document</h3>
+<p class=t>
+This document is an informal standard and replaces the <a href="#ID3v2">ID3v2.2.0</a>
+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.
+</p><p class=t>
+Distribution of this document is unlimited.
+</p>
+
+<a name="abstract"> </a>
+<h3>Abstract</h3>
+<p class=t>
+This document describes the <a href="#ID3v2">ID3v2.3.0</a>, which is a more developed
+version of the ID3v2 informal standard (version 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.
+</p>
+
+<a name="sec1"> </a>
+<h3>1.Table of contents</h3>
+
+<p><center><table border=0 width="80%"><tr><td>
+<dl>
+<dt>2. <a href="#sec2">Conventions in this document</a></dt>
+<dt>3. <a href="#sec3">ID3v2 overview</a>
+ <dd> 3.1. <a href="#sec3.1">ID3v2 header</a></dd>
+ <dd> 3.2. <a href="#sec3.2">ID3v2 extended header</a></dd>
+ <dd> 3.3. <a href="#sec3.3">ID3v2 frames overview</a></dd>
+ <dl><dd> 3.3.1. <a href="#sec3.3.1">Frame header flags</a></dd>
+ <dd> 3.3.2. <a href="#sec3.3.2">Default flags</a></dd></dl></dt>
+<dt>4. <a href="#sec4">Declared ID3v2 frames</a>
+ <dd> 4.1. <a href="#sec4.1">Unique file identifier</a></dd>
+ <dd> 4.2. <a href="#sec4.2">Text information frames</a>
+ <dl><dd> 4.2.1. <a href="#sec4.2.1">Text information frames - details</a></dd>
+ <dd> 4.2.2. <a href="#sec4.2.2">User defined text information frame</a></dd></dl></dd>
+ <dd> 4.3. <a href="#sec4.3">URL link frames</a>
+ <dl><dd>4.3.1. <a href="#sec4.3.1">URL link frames - details</a></dd>
+ <dd>4.3.2. <a href="#sec4.3.2">User defined URL link frame</a></dd></dl></dd>
+ <dd> 4.4. <a href="#sec4.4">Involved people list</a></dd>
+ <dd> 4.5. <a href="#sec4.5">Music CD Identifier</a></dd>
+ <dd> 4.6. <a href="#sec4.6">Event timing codes</a></dd>
+ <dd> 4.7. <a href="#sec4.7">MPEG location lookup table</a></dd>
+ <dd> 4.8. <a href="#sec4.8">Synced tempo codes</a></dd>
+ <dd> 4.9. <a href="#sec4.9">Unsychronised lyrics/text transcription</a></dd>
+ <dd> 4.10. <a href="#sec4.10">Synchronised lyrics/text</a></dd>
+ <dd> 4.11. <a href="#sec4.11">Comments</a></dd>
+ <dd> 4.12. <a href="#sec4.12">Relative volume adjustment</a></dd>
+ <dd> 4.13. <a href="#sec4.13">Equalisation</a></dd>
+ <dd> 4.14. <a href="#sec4.14">Reverb</a></dd>
+ <dd> 4.15. <a href="#sec4.15">Attached picture</a></dd>
+ <dd> 4.16. <a href="#sec4.16">General encapsulated object</a></dd>
+ <dd> 4.17. <a href="#sec4.17">Play counter</a></dd>
+ <dd> 4.18. <a href="#sec4.18">Popularimeter</a></dd>
+ <dd> 4.19. <a href="#sec4.19">Recommended buffer size</a></dd>
+ <dd> 4.20. <a href="#sec4.20">Audio encryption</a></dd>
+ <dd> 4.21. <a href="#sec4.21">Linked information</a></dd>
+ <dd> 4.22. <a href="#sec4.22">Position synchronisation frame</a></dd>
+ <dd> 4.23. <a href="#sec4.23">Terms of use</a></dd>
+ <dd> 4.24. <a href="#sec4.24">Ownership frame</a></dd>
+ <dd> 4.25. <a href="#sec4.25">Commercial frame</a></dd>
+ <dd> 4.26. <a href="#sec4.26">Encryption method registration</a></dd>
+ <dd> 4.27. <a href="#sec4.27">Group identification registration</a></dd>
+ <dd> 4.28. <a href="#sec4.28">Private frame</a></dd></dt>
+<dt>5. <a href="#sec5">The 'unsynchronisation scheme'</a></dt>
+<dt>6. <a href="#sec6">Copyright</a></dt>
+<dt>7. <a href="#sec7">References</a></dt>
+<dt>8. <a href="#sec8">Appendix</a>
+ <dd> A. <a href="#secA">Appendix A - Genre List from ID3v1</a></dd></dt>
+<dt>9. <a href="#sec9">Author's Address</a></dt>
+</dl>
+</td></tr></table></center></p>
+
+<a name="sec2"> </a>
+<h3>2.Conventions in this document</h3>
+<p class=t>
+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'.
+</p><p class=t>
+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.
+</p>
+
+<a name="sec3"> </a>
+<h3>3.ID3v2 overview</h3>
+<p class=t>
+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.
+</p><p class=t>
+The first criterion is met by the simple fact that the <a href="#MPEG">MPEG</a>
+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
+<a href="#sec5">section 5</a>.
+</p><p class=t>
+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.
+</p><p class=t>
+If a total revision of the ID3v2 tag should be needed, there is a
+version number and a size descriptor in the ID3v2 header.
+</p><p class=t>
+The ID3 tag described in this document is mainly targeted at files
+encoded with <a href="#MPEG">MPEG</a>-1/2 layer I, <a href="#MPEG">MPEG</a>-1/2 layer II, <a href="#MPEG">MPEG</a>-1/2 layer III
+and MPEG-2.5, but may work with other types of encoded audio.
+</p><p class=t>
+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).
+</p><p class=t>
+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.
+</p>
+
+<a name="sec3.1"> </a>
+<h3>3.1.ID3v2 header</h3>
+<p class=t>
+The ID3v2 tag header, which should be the first information in the
+file, is 10 bytes as follows:
+</p>
+<p><center><table border=0 width="70%">
+<tr><td nowrap>ID3v2/file identifier</td><td rowspan=4>&nbsp;</td><td width="100%">"ID3"</td></tr>
+<tr><td>ID3v2 version</td><td>$03 00</td></tr>
+<tr><td>ID3v2 flags</td><td>%abc00000</td></tr>
+<tr><td>ID3v2 size</td><td>4 * %0xxxxxxx</td></tr>
+</table></center></p>
+<p class=t>
+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.
+</p><p class=t>
+The version is followed by one the ID3v2 flags field, of which
+currently only three flags are used.
+</p>
+<p class=t>
+a - Unsynchronisation
+</p><p class=ind>
+Bit 7 in the 'ID3v2 flags' indicates whether or not unsynchronisation is used (see <a href="#sec5">section 5</a> for details); a set bit indicates usage.</p>
+<p class=t>
+b - Extended header
+</p><p class=ind>
+ The second bit (bit 6) indicates whether or not the header is
+ followed by an extended header. The extended header is described in
+ <a href="#sec3.2">section 3.2</a>.
+</p>
+<p class=t>
+c - Experimental indicator
+</p><p class=ind>
+ 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.
+</p><p class=t>
+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.
+</p><p class=t>
+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.
+</p><p class=t>
+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 introducuction of 'false syncsignals'.
+</p><p class=t>
+An ID3v2 tag can be detected with the following pattern:<br>
+ $49 44 33 yy yy xx zz zz zz zz<br>
+Where yy is less than $FF, xx is the 'flags' byte and zz is less than
+$80.
+</p>
+
+<a name="sec3.2"> </a>
+<h3>3.2.ID3v2 extended header</h3>
+<p class=t>
+The extended header contains information that is not vital to the
+correct parsing of the tag information, hence the extended header is
+optional.
+</p>
+<p><center><table border=0 width="70%">
+<tr><td nowrap> Extended header size</td><td rowspan=3>&nbsp;</td><td width=100%>$xx xx xx xx</td></tr>
+<tr><td>Extended Flags</td><td>$xx xx</td></tr>
+<tr><td>Size of padding</td><td>$xx xx xx xx</tr>
+</table></center></p>
+<p class=t>
+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.
+</p><p class=t>
+The extended flags are a secondary flag set which describes further
+attributes of the tag. These attributes are currently defined as
+follows
+</p><p class=ind>
+ %x0000000 00000000
+</p>
+<p class=t>
+x - CRC data present
+</p><p class=ind>
+ 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.
+</p>
+<p><center><table border=0 width="70%">
+<tr><td nowrap> Total frame CRC</td><td>&nbsp;</td><td>$xx xx xx xx</td></tr>
+</table></center></p>
+
+
+<a name="sec3.3"> </a>
+<h3>3.3.ID3v2 frame overview</h3>
+<p class=t>
+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:
+</p>
+<p><center><table border=0 width="70%">
+<tr><td nowrap> Frame ID</td><td rowspan=3>&nbsp;</td><td width="100%">$xx xx xx xx (four characters)</td></tr>
+<tr><td>Size</td><td>$xx xx xx xx</td></tr>
+<tr><td>Flags</td><td>$xx xx</td></tr>
+</table></center></p>
+<p class=t>
+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.
+</p><p class=t>
+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).
+</p><p class=t>
+In the frame header the size descriptor is followed by two flags
+bytes. These flags are described in <a href="#sec3.3.1">section 3.3.1.</a>
+</p><p class=t>
+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: <a href="#sec4.1">UFID</a>, <a href="#TIT2">TIT2</a>, <a href="#sec4.5">MCDI</a>, <a href="#TRCK">TRCK</a> ...
+</p><p class=t>
+A tag must contain at least one frame. A frame must be at least 1
+byte big, excluding the header.
+</p><p class=t>
+If nothing else is said a string is represented as
+<a href="#ISO-8859-1">ISO-8859-1</a> characters in the range $20 - $FF. Such strings are
+represented as &lt;text string&gt;, or &lt;full text string&gt; if newlines are
+allowed, in the frame descriptions. All <a href="#UNICODE">Unicode</a> 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.
+</p><p class=t>
+All numeric strings and <a href="#URL">URLs</a> are always encoded as <a href="#ISO-8859-1">ISO-8859-1</a>.
+Terminated strings are terminated with $00 if encoded with <a href="#ISO-8859-1">ISO-8859-1</a>
+and $00 00 if encoded as unicode. If nothing else is said newline
+character is forbidden. In <a href="#ISO-8859-1">ISO-8859-1</a> 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 <a href="#ISO-8859-1">ISO-8859-1</a> is used this byte should be $00, if Unicode
+is used it should be $01. Strings dependent on encoding is
+represented as &lt;text string according to encoding&gt;, or &lt;full text
+string according to encoding&gt; if newlines are allowed. Any empty
+<a href="#UNICODE">Unicode</a> strings which are NULL-terminated may have the Unicode BOM
+followed by a Unicode NULL ($FF FE 00 00 or $FE FF 00 00).
+</p><p class=t>
+The three byte language field is used to describe the language of the
+frame's content, according to <a href="#ISO-639-2">ISO-639-2</a>.
+</p><p class=t>
+All <a href="#URL">URLs</a> may be relative, e.g. "picture.png", "../doc.txt".
+</p><p class=t>
+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.
+</p>
+
+<a name="sec3.3.1"> </a>
+<h3>3.3.1.Frame header flags</h3>
+<p class=t>
+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.
+</p><p class=ind>
+ %abc00000 %ijk00000
+</p>
+<p class=t>
+a - Tag alter preservation
+</p><p class=ind>
+ 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.</p>
+<p><center><table border=0 width="70%">
+<tr><td>0&nbsp;</td><td>Frame should be preserved.</td></tr>
+<tr><td>1</td><td>Frame should be discarded.</td></tr>
+</table></center>
+</p>
+<p class=t>
+b - File alter preservation
+</p><p class=ind>
+ 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.</p>
+<p><center><table border=0 width="70%">
+<tr><td>0&nbsp;</td><td>Frame should be preserved.</td></tr>
+<tr><td>1</td><td>Frame should be discarded.</td></tr>
+</table></center>
+</p>
+<p class=t>
+c - Read only
+</p><p class=ind>
+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.
+</p>
+<p class=t>
+i - Compression
+</p>
+<p class=ind>This flag indicates whether or not the frame is compressed.</p>
+<p><center><table border=0 width="70%">
+<tr><td>0&nbsp;</td><td>Frame is not compressed.</td></tr>
+<tr><td>1</td><td>Frame is compressed using <a href="#ZLIB">zlib</a> with 4 bytes for 'decompressed size' appended to the frame header.</td></tr>
+</table></center>
+</p>
+<p class=t>
+j - Encryption
+</p><p class=ind>
+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 <a href="#sec4.26">section 4.26.</a> for more
+information about encryption method registration.
+</p><p><center><table border=0 width="70%">
+<tr><td>0&nbsp;</td><td>Frame is not encrypted.</td></tr>
+<tr><td>1</td><td>Frame is encrypted.</td></tr>
+</table></center>
+</p>
+<p class=t>
+k - Grouping identity
+</p><p class=ind>
+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.
+</p><p><center><table border=0 width="70%">
+<tr><td>0&nbsp;</td><td>Frame does not contain group information</td></tr>
+<tr><td>1</td><td>Frame contains group information</td></tr>
+</table></center>
+</p>
+<p class=t>
+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.
+</p>
+
+<a name="sec3.3.2"> </a>
+<h3>3.3.2.Default flags</h3>
+<p class=t>
+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.
+</p><p class=t>
+ 1. Discarded if tag is altered, discarded if file is altered.
+</p><p class=ind>
+ None.
+</p><p class=t>
+ 2. Discarded if tag is altered, preserved if file is altered.
+</p><p class=ind>
+ None.
+</p><p class=t>
+ 3. Preserved if tag is altered, discarded if file is altered.
+</p><p class=ind>
+ <a href="#sec4.21>AENC</a>, <a href="#sec4.6">ETCO</a>, <a href="#sec4.13">EQUA</a>, <a href="#sec4.7">MLLT</a>, <a href="#sec4.22">POSS</a>, <a href="#4.10">SYLT</a>, <a href="#sec4.8">SYTC</a>, <a href="#4.12">RVAD</a>, <a href="#TENC">TENC</a>, <a href="#TLEN">TLEN</a>, <a href="#TSIZ">TSIZ</a>
+</p><p class=t>
+ 4. Preserved if tag is altered, preserved if file is altered.
+</p><p class=ind>
+ The rest of the frames.
+</p>
+
+<a name="sec4"> </a>
+<h3>4.Declared ID3v2 frames</h3>
+</p><p class=t>
+The following frames are declared in this draft.
+</p><p><center><table border=0 width="70%">
+<tr><td>4.20</td><td>AENC</td><td width="100%"><a href="#sec4.20"> Audio encryption</a></td></tr>
+<tr><td>4.15</td><td>APIC</td><td><a href="#sec4.15">Attached picture</a></td></tr>
+
+<tr><td>4.11</td><td>COMM</td><td><a href="#sec4.11">Comments</a></td></tr>
+<tr><td>4.25</td><td>COMR</td><td><a href="#sec4.25">Commercial frame</a></td></tr>
+
+<tr><td>4.26</td><td>ENCR</td><td><a href="#sec4.26">Encryption method registration</a></td></tr>
+<tr><td>4.13</td><td>EQUA</td><td><a href="#sec4.13">Equalization</a></td></tr>
+<tr><td>4.6 </td><td>ETCO</td><td><a href="#sec4.6">Event timing codes</a></td></tr>
+
+<tr><td>4.16</td><td>GEOB</td><td><a href="#sec4.16">General encapsulated object</a></td></tr>
+<tr><td>4.27</td><td>GRID</td><td><a href="#sec4.27">Group identification registration</a></td></tr>
+
+<tr><td>4.4 </td><td>IPLS</td><td><a href="#sec4.4">Involved people list</a></td></tr>
+
+<tr><td>4.21</td><td>LINK</td><td><a href="#sec4.21">Linked information</a></td></tr>
+
+<tr><td>4.5 </td><td>MCDI</td><td><a href="#sec4.5">Music CD identifier</a></td></tr>
+<tr><td>4.7 </td><td>MLLT</td><td><a href="#sec4.7">MPEG location lookup table</a></td></tr>
+
+<tr><td>4.24</td><td>OWNE</td><td><a href="#sec4.24">Ownership frame</a></td></tr>
+
+<tr><td>4.28</td><td>PRIV</td><td><a href="#sec4.28">Private frame</a></td></tr>
+<tr><td>4.17</td><td>PCNT</td><td><a href="#sec4.17">Play counter</a></td></tr>
+<tr><td>4.18</td><td>POPM</td><td><a href="#sec4.18">Popularimeter</a></td></tr>
+<tr><td>4.22</td><td>POSS</td><td><a href="#sec4.22">Position synchronisation frame</a></td></tr>
+
+<tr><td>4.19</td><td>RBUF</td><td><a href="#sec4.19">Recommended buffer size</a></td></tr>
+<tr><td>4.12</td><td>RVAD</td><td><a href="#sec4.12">Relative volume adjustment</a></td></tr>
+<tr><td>4.14</td><td>RVRB</td><td><a href="#sec4.14">Reverb</a></td></tr>
+
+<tr><td>4.10</td><td>SYLT</td><td><a href="#sec4.10">Synchronized lyric/text</a></td></tr>
+<tr><td>4.8 </td><td>SYTC</td><td><a href="#sec4.8">Synchronized tempo codes</a></td></tr>
+
+<tr><td>4.2.1</td><td>TALB</td><td><a href="#TALB">Album/Movie/Show title</a></td></tr>
+<tr><td>4.2.1</td><td>TBPM</td><td><a href="#TBPM">BPM (beats per minute)</a></td></tr>
+<tr><td>4.2.1</td><td>TCOM</td><td><a href="#TCOM">Composer</a></td></tr>
+<tr><td>4.2.1</td><td>TCON</td><td><a href="#TCON">Content type</a></td></tr>
+<tr><td>4.2.1</td><td>TCOP</td><td><a href="#TCOP">Copyright message</a></td></tr>
+<tr><td>4.2.1</td><td>TDAT</td><td><a href="#TDAT">Date</a></td></tr>
+<tr><td>4.2.1</td><td>TDLY</td><td><a href="#TDLY">Playlist delay</a></td></tr>
+<tr><td>4.2.1</td><td>TENC</td><td><a href="#TENC">Encoded by</a></td></tr>
+<tr><td>4.2.1</td><td>TEXT</td><td><a href="#TEXT">Lyricist/Text writer</a></td></tr>
+<tr><td>4.2.1</td><td>TFLT</td><td><a href="#TFLT">File type</a></td></tr>
+<tr><td>4.2.1</td><td>TIME</td><td><a href="#TIME">Time</a></td></tr>
+<tr><td>4.2.1</td><td>TIT1</td><td><a href="#TIT1">Content group description</a></td></tr>
+<tr><td>4.2.1</td><td>TIT2</td><td><a href="#TIT2">Title/songname/content description</a></td></tr>
+<tr><td>4.2.1</td><td>TIT3</td><td><a href="#TIT3">Subtitle/Description refinement</a></td></tr>
+<tr><td>4.2.1</td><td>TKEY</td><td><a href="#TKEY">Initial key</a></td></tr>
+<tr><td>4.2.1</td><td>TLAN</td><td><a href="#TLAN">Language(s)</a></td></tr>
+<tr><td>4.2.1</td><td>TLEN</td><td><a href="#TLEN">Length</a></td></tr>
+<tr><td>4.2.1</td><td>TMED</td><td><a href="#TMED">Media type</a></td></tr>
+<tr><td>4.2.1</td><td>TOAL</td><td><a href="#TOAL">Original album/movie/show title</a></td></tr>
+<tr><td>4.2.1</td><td>TOFN</td><td><a href="#TOFN">Original filename</a></td></tr>
+<tr><td>4.2.1</td><td>TOLY</td><td><a href="#TOLY">Original lyricist(s)/text writer(s)</a></td></tr>
+<tr><td>4.2.1</td><td>TOPE</td><td><a href="#TOPE">Original artist(s)/performer(s)</a></td></tr>
+<tr><td>4.2.1</td><td>TORY</td><td><a href="#TORY">Original release year</a></td></tr>
+<tr><td>4.2.1</td><td>TOWN</td><td><a href="#TOWN">File owner/licensee</a></td></tr>
+<tr><td>4.2.1</td><td>TPE1</td><td><a href="#TPE1">Lead performer(s)/Soloist(s)</a></td></tr>
+<tr><td>4.2.1</td><td>TPE2</td><td><a href="#TPE2">Band/orchestra/accompaniment</a></td></tr>
+<tr><td>4.2.1</td><td>TPE3</td><td><a href="#TPE3">Conductor/performer refinement</a></td></tr>
+<tr><td>4.2.1</td><td>TPE4</td><td><a href="#TPE4">Interpreted, remixed, or otherwise modified by</a></td></tr>
+<tr><td>4.2.1</td><td>TPOS</td><td><a href="#TPOS">Part of a set</a></td></tr>
+<tr><td>4.2.1</td><td>TPUB</td><td><a href="#TPUB">Publisher</a></td></tr>
+<tr><td>4.2.1</td><td>TRCK</td><td><a href="#TRCK">Track number/Position in set</a></td></tr>
+<tr><td>4.2.1</td><td>TRDA</td><td><a href="#TRDA">Recording dates</a></td></tr>
+<tr><td>4.2.1</td><td>TRSN</td><td><a href="#TRSN">Internet radio station name</a></td></tr>
+<tr><td>4.2.1</td><td>TRSO</td><td><a href="#TRSO">Internet radio station owner</a></td></tr>
+<tr><td>4.2.1</td><td>TSIZ</td><td><a href="#TSIZ">Size</a></td></tr>
+<tr><td>4.2.1</td><td>TSRC</td><td><a href="#TSRC">ISRC (international standard recording code)</a></td></tr>
+<tr><td>4.2.1</td><td>TSSE</td><td><a href="#TSSE">Software/Hardware and settings used for encoding</a></td></tr>
+<tr><td>4.2.1</td><td>TYER</td><td><a href="#TYER">Year</a></td></tr>
+<tr><td>4.2.2</td><td>TXXX</td><td><a href="#TXXX">User defined text information frame</a></td></tr>
+
+<tr><td>4.1 </td><td>UFID</td><td><a href="#sec4.1">Unique file identifier</td></tr>
+<tr><td>4.23</td><td>USER</td><td><a href="#sec4.23">Terms of use</td></tr>
+<tr><td>4.9 </td><td>USLT</td><td><a href="#sec4.9">Unsychronized lyric/text transcription</td></tr>
+
+<tr><td>4.3.1</td><td>WCOM</td><td><a href="#WCOM">Commercial information</a></td></tr>
+<tr><td>4.3.1</td><td>WCOP</td><td><a href="#WCOP">Copyright/Legal information</a></td></tr>
+<tr><td>4.3.1</td><td>WOAF</td><td><a href="#WOAF">Official audio file webpage</a></td></tr>
+<tr><td>4.3.1</td><td>WOAR</td><td><a href="#WOAR">Official artist/performer webpage</a></td></tr>
+<tr><td>4.3.1</td><td>WOAS</td><td><a href="#WOAS">Official audio source webpage</a></td></tr>
+<tr><td>4.3.1</td><td>WORS</td><td><a href="#WORS">Official internet radio station homepage</a></td></tr>
+<tr><td>4.3.1</td><td>WPAY</td><td><a href="#WPAY">Payment</a></td></tr>
+<tr><td>4.3.1</td><td>WPUB</td><td><a href="#WPUB">Publishers official webpage</a></td></tr>
+<tr><td>4.3.2</td><td>WXXX</td><td><a href="#WXXX">User defined URL link frame</a></td></tr>
+</table></center>
+</p>
+
+<a name="sec4.1"> </a>
+<h3>4.1.Unique file identifier</h3>
+<p class=t>
+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 <a href="#URL">URL</a>
+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 <a href="#URL">URL</a>
+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'.
+</p>
+<p><center><table border=0 width="70%">
+<tr><td colspan=2>&lt;Header for 'Unique file identifier', ID: "UFID"&gt;</td></tr>
+<tr><td>Owner identifier</td><td width="80%">&lt;text string&gt; $00</td></tr>
+<tr><td>Identifier</td><td>&lt;up to 64 bytes binary data&gt;</td></tr>
+</table></center></p>
+
+<a name="sec4.2"> </a>
+<h3>4.2.Text information frames</h3>
+<p class=t>
+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 "<a href="#sec4.2.2">TXXX</a>" frame. All the text information frames have
+the following format:
+</p>
+<p><center><table border=0 width="70%">
+<tr><td colspan=2> &lt;Header for 'Text information frame', ID: "T000" - "TZZZ", excluding "TXXX" described in 4.2.2.&gt;</td></tr>
+<tr><td>Text encoding</td><td width="80%">$xx</td></tr>
+<tr><td>Information </td><td>&lt;text string according to encoding&gt;</td></tr>
+</table></center></p>
+
+<a name="sec4.2.1"> </a>
+<h3>4.2.1.Text information frames - details</h3>
+<p>
+<a name="TALB"> </a>
+<div class=h5>TALB</div>
+<div class=t>
+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.
+</div>
+</p>
+
+<p>
+<a name="TBPM"> </a>
+<div class=h5>TBPM</div>
+<div class=t>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.</div>
+</p>
+
+<p>
+<a name="TCOM"> </a>
+<div class=h5>TCOM</div>
+<div class=t>The 'Composer(s)' frame is intended for the name of the composer(s).
+They are seperated with the "/" character.</div>
+</p>
+
+<p>
+<a name="TCON"> </a>
+<div class=h5>TCON</div>
+<div class=t>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.
+</div></p>
+<p><div class=t>
+References to the ID3v1 genres can be made by, as first byte, enter
+"(" followed by a number from the genres list (<a href="#secA">appendix A</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)".</div>
+</p>
+<p><center><table border=0 width="70%">
+<tr><td>RX</td><td width="100%">Remix</td></tr>
+<tr><td>CR</td><td>Cover</td></tr>
+</table></center>
+</p>
+
+<p>
+<a name="TCOP"> </a>
+<div class=h5>TCOP</div>
+<div class=t>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 &copy; ".</div>
+</p>
+
+<p>
+<a name="TDAT"> </a>
+<div class=h5>TDAT</div>
+<div class=t>The 'Date' frame is a numeric string in the DDMM format containing
+the date for the recording. This field is always four characters
+long.</div>
+</p>
+
+<p>
+<a name="TDLY"> </a>
+<div class=h5>TDLY</div>
+<div class=t>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.</div>
+</p>
+
+<p>
+<a name="TENC"> </a>
+<div class=h5>TENC</div>
+<div class=t>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.</div>
+</p>
+
+<p>
+<a name="TEXT"> </a>
+<div class=h5>TEXT</div>
+<div class=t>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.</div>
+</p>
+
+<p>
+<a name="TFLT"> </a>
+<div class=h5>TFLT</div>
+<div class=t>The 'File type' frame indicates which type of audio this tag defines.
+The following type and refinements are defined:
+</div></p>
+<p><center><table border=0 width="70%">
+<tr><td>MPG</td><td rowspan=8>&nbsp;</td><td width="100%">MPEG Audio</td></tr>
+<tr><td align=right>/1</td><td>MPEG 1/2 layer I</td></tr>
+<tr><td align=right>/2</td><td>MPEG 1/2 layer II</td></tr>
+<tr><td align=right>/3</td><td>MPEG 1/2 layer III</td></tr>
+<tr><td align=right>/2.5</td><td>MPEG 2.5</td></tr>
+<tr><td align=right>&nbsp;/AAC</td><td>Advanced audio compression</td></tr>
+<tr><td>VQF</td><td>Transform-domain Weighted Interleave Vector Quantization</td></tr>
+<tr><td>PCM</td><td>Pulse Code Modulated audio</td></tr>
+</table></center></p>
+<p><div class=t>
+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".</div>
+</p>
+
+<p>
+<a name="TIME"> </a>
+<div class=h5>TIME</div>
+<div class=t>The 'Time' frame is a numeric string in the HHMM format containing
+the time for the recording. This field is always four characters
+long.</div>
+</p>
+
+<p>
+<a name="TIT1"> </a>
+<div class=h5>TIT1</div>
+<div class=t>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").</div>
+</p>
+
+<p>
+<a name="TIT2"> </a>
+<div class=h5>TIT2</div>
+<div class=t>The 'Title/Songname/Content description' frame is the actual name of
+the piece (e.g. "Adagio", "Hurricane Donna").</div>
+</p>
+
+<p>
+<a name="TIT3"> </a>
+<div class=h5>TIT3</div>
+<div class=t>The 'Subtitle/Description refinement' frame is used for information
+directly related to the contents title (e.g. "Op. 16" or "Performed
+live at Wembley").</div>
+</p>
+
+<p>
+<a name="TKEY"> </a>
+<div class=h5>TKEY</div>
+<div class=t>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.</div>
+</p>
+
+<p>
+<a name="TLAN"> </a>
+<div class=h5>TLAN</div>
+<div class=t>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 <a href="#ISO-639-2">ISO-639-2</a>. If more than one language is
+used in the text their language codes should follow according to
+their usage.</div>
+</p>
+
+<p>
+<a name="TLEN"> </a>
+<div class=h5>TLEN</div>
+<div class=t>The 'Length' frame contains the length of the audiofile in
+milliseconds, represented as a numeric string.</div>
+</p>
+
+<p>
+<a name="TMED"> </a>
+<div class=h5>TMED</div>
+<div class=t>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)".</div>
+</p>
+<p><center><table border=0 width="70%">
+<tr><td>DIG</td><td rowspan=67>&nbsp;</td><td width="100%">Other digital media</td></tr>
+<tr valign=top><td align=right>/A<br>&nbsp;</td><td>Analog transfer from media</td></tr>
+
+<tr><td>ANA</td><td>Other analog media</td></tr>
+<tr><td align=right>/WAC</td><td>Wax cylinder</td></tr>
+<tr valign=top><td align=right>/8CA<br>&nbsp;</td><td>8-track tape cassette</td></tr>
+
+<tr><td>CD</td><td>CD</td></tr>
+<tr><td align=right>/A</td><td>Analog transfer from media</td></tr>
+<tr><td align=right>/DD</td><td>DDD</td></tr>
+<tr><td align=right>/AD</td><td>ADD</td></tr>
+<tr valign=top><td align=right>/AA<br>&nbsp;</td><td>AAD</td></tr>
+
+<tr><td>LD</td><td>Laserdisc</td></tr>
+<tr valign=top><td align=right>/A<br>&nbsp;</td><td>Analog transfer from media</td></tr>
+
+<tr><td>TT</td><td>Turntable records</td></tr>
+<tr><td align=right>/33</td><td>33.33 rpm</td></tr>
+<tr><td align=right>/45</td><td>45 rpm</td></tr>
+<tr><td align=right>/71</td><td>71.29 rpm</td></tr>
+<tr><td align=right>/76</td><td>76.59 rpm</td></tr>
+<tr><td align=right>/78</td><td>78.26 rpm</td></tr>
+<tr valign=top><td align=right>/80<br>&nbsp;</td><td>80 rpm</td></tr>
+
+<tr><td>MD</td><td>MiniDisc</td></tr>
+<tr valign=top><td align=right>/A<br>&nbsp;</td><td>Analog transfer from media</td></tr>
+
+<tr><td>DAT</td><td>DAT</td></tr>
+<tr><td align=right>/A</td><td>Analog transfer from media</td></tr>
+<tr><td align=right>/1</td><td>standard, 48 kHz/16 bits, linear</td></tr>
+<tr><td align=right>/2</td><td>mode 2, 32 kHz/16 bits, linear</td></tr>
+<tr><td align=right>/3</td><td>mode 3, 32 kHz/12 bits, nonlinear, low speed</td></tr>
+<tr><td align=right>/4</td><td>mode 4, 32 kHz/12 bits, 4 channels</td></tr>
+<tr><td align=right>/5</td><td>mode 5, 44.1 kHz/16 bits, linear</td></tr>
+<tr valign=top><td align=right>/6<br>&nbsp;</td><td>mode 6, 44.1 kHz/16 bits, 'wide track' play</td></tr>
+
+<tr><td>DCC</td><td>DCC</td></tr>
+<tr valign=top><td align=right>/A<br>&nbsp;</td><td>Analog transfer from media</td></tr>
+
+<tr><td>DVD</td><td>DVD</td></tr>
+<tr valign=top><td align=right>/A<br>&nbsp;</td><td>Analog transfer from media</td></tr>
+
+<tr><td>TV</td><td>Television</td></tr>
+<tr><td align=right>/PAL</td><td>PAL</td></tr>
+<tr><td align=right>/NTSC</td><td>NTSC</td></tr>
+<tr valign=top><td align=right>&nbsp;/SECAM<br>&nbsp;</td><td>SECAM</td></tr>
+
+<tr><td>VID</td><td>Video</td></tr>
+<tr><td align=right>/PAL</td><td>PAL</td></tr>
+<tr><td align=right>/NTSC</td><td>NTSC</td></tr>
+<tr><td align=right>/SECAM</td><td>SECAM</td></tr>
+<tr><td align=right>/VHS</td><td>VHS</td></tr>
+<tr><td align=right>/SVHS</td><td>S-VHS</td></tr>
+<tr valign=top><td align=right>/BETA<br>&nbsp;</td><td>BETAMAX</td></tr>
+
+<tr><td>RAD</td><td>Radio</td></tr>
+<tr><td align=right>/FM</td><td>FM</td></tr>
+<tr><td align=right>/AM</td><td>AM</td></tr>
+<tr><td align=right>/LW</td><td>LW</td></tr>
+<tr valign=top><td align=right>/MW<br>&nbsp;</td><td>MW</td></tr>
+
+<tr><td>TEL</td><td>Telephone</td></tr>
+<tr valign=top><td align=right>/I<br>&nbsp;</td><td>ISDN</td></tr>
+
+<tr><td>MC</td><td>MC (normal cassette)</td></tr>
+<tr><td align=right>/4</td><td>4.75 cm/s (normal speed for a two sided cassette)</td></tr>
+<tr><td align=right>/9</td><td>9.5 cm/s</td></tr>
+<tr><td align=right>/I</td><td>Type I cassette (ferric/normal)</td></tr>
+<tr><td align=right>/II</td><td>Type II cassette (chrome)</td></tr>
+<tr><td align=right>/III</td><td>Type III cassette (ferric chrome)</td></tr>
+<tr valign=top><td align=right>/IV<br>&nbsp;</td><td>Type IV cassette (metal)</td></tr>
+
+<tr><td>REE</td><td>Reel</td></tr>
+<tr><td align=right>/9</td><td>9.5 cm/s</td></tr>
+<tr><td align=right>/19</td><td>19 cm/s</td></tr>
+<tr><td align=right>/38</td><td>38 cm/s</td></tr>
+<tr><td align=right>/76</td><td>76 cm/s</td></tr>
+<tr><td align=right>/I</td><td>Type I cassette (ferric/normal)</td></tr>
+<tr><td align=right>/II</td><td>Type II cassette (chrome)</td></tr>
+<tr><td align=right>/III</td><td>Type III cassette (ferric chrome)</td></tr>
+<tr><td align=right>/IV<br>&nbsp;</td><td>Type IV cassette (metal)</td></tr>
+</table></center>
+</p>
+
+<p>
+<a name="TOAL"> </a>
+<div class=h5>TOAL</div>
+<div class=t>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.
+</p></div>
+
+<p>
+<a name="TOFN"> </a>
+<div class=h5>TOFN</div>
+<div class=t>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.</div>
+</p>
+
+<p>
+<a name="TOLY"> </a>
+<div class=h5>TOLY</div>
+<div class=t>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.</div>
+</p>
+
+<p>
+<a name="TOPE"> </a>
+<div class=h5>TOPE</div>
+<div class=t>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.</div>
+</p>
+
+<p>
+<a name="TORY"> </a>
+<div class=h5>TORY</div>
+<div class=t>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.</div>
+</p>
+
+<p>
+<a name="TOWN"> </a>
+<div class=h5>TOWN</div>
+<div class=t>The 'File owner/licensee' frame contains the name of the owner or
+licensee of the file and it's contents.</div>
+</p>
+
+<p>
+<a name="TPE1"> </a>
+<div class=h5>TPE1</div>
+<div class=t>The 'Lead artist(s)/Lead performer(s)/Soloist(s)/Performing group' is
+used for the main artist(s). They are seperated with the "/"
+character.</div>
+</p>
+
+<p>
+<a name="TPE2"> </a>
+<div class=h5>TPE2</div>
+<div class=t>The 'Band/Orchestra/Accompaniment' frame is used for additional
+information about the performers in the recording.</div>
+</p>
+
+<p>
+<a name="TPE3"> </a>
+<div class=h5>TPE3</div>
+<div class=t>The 'Conductor' frame is used for the name of the conductor.</div>
+</p>
+
+<p>
+<a name="TPE4"> </a>
+<div class=h5>TPE4</div>
+<div class=t>The 'Interpreted, remixed, or otherwise modified by' frame contains
+more information about the people behind a remix and similar
+interpretations of another existing piece.</div>
+</p>
+
+<p>
+<a name="TPOS"> </a>
+<div class=h5>TPOS</div>
+<div class=t>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 "<a href="#TALB">TALB</a>" 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".</div>
+</p>
+
+<p>
+<a name="TPUB"> </a>
+<div class=h5>TPUB</div>
+<div class=t>The 'Publisher' frame simply contains the name of the label or
+publisher.</div>
+</p>
+
+<p>
+<a name="TRCK"> </a>
+<div class=h5>TRCK</div>
+<div class=t>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".</div>
+</p>
+
+<p>
+<a name="TRDA"> </a>
+<div class=h5>TRDA</div>
+<div class=t>The 'Recording dates' frame is a intended to be used as complement to
+the "<a href="#TYER">TYER</a>", "<a href="#TDAT">TDAT</a>" and "<a href="#TIME">TIME</a>" frames. E.g. "4th-7th June, 12th June"
+in combination with the "<a href="#TYER">TYER</a>" frame.</div>
+</p>
+
+<p>
+<a name="TRSN"> </a>
+<div class=h5>TRSN</div>
+<div class=t>The 'Internet radio station name' frame contains the name of the
+internet radio station from which the audio is streamed.</div>
+</p>
+
+<p>
+<a name="TRSO"> </a>
+<div class=h5>TRSO</div>
+<div class=t>The 'Internet radio station owner' frame contains the name of the
+owner of the internet radio station from which the audio is
+streamed.</div>
+</p>
+
+<p>
+<a name="TSIZ"> </a>
+<div class=h5>TSIZ</div>
+<div class=t>The 'Size' frame contains the size of the audiofile in bytes,
+excluding the ID3v2 tag, represented as a numeric string.</div>
+</p>
+
+<p>
+<a name="TSRC"> </a>
+<div class=h5>TSRC</div>
+<div class=t>The 'ISRC' frame should contain the International Standard Recording
+Code (<a href="#ISRC">ISRC</a>) (12 characters).</div>
+</p>
+
+<p>
+<a name="TSSE"> </a>
+<div class=h5>TSSE</div>
+<div class=t>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.</div>
+</p>
+
+<p>
+<a name="TYER"> </a>
+<div class=h5>TYER</div>
+<div class=t>The 'Year' frame is a numeric string with a year of the recording.
+This frames is always four characters long (until the year 10000).</div>
+</p>
+
+<h3>4.2.2.User defined text information frame</h3>
+<p class=t>
+<div class=t>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.
+</p>
+<p><center><table border=0 width="70%">
+<tr><td colspan=2>&lt;Header for 'User defined text information frame', ID: "TXXX"&gt;
+<tr><td>Text encoding</td><td>$xx</td></tr>
+<tr><td>Description</td><td>&lt;text string according to encoding&gt; $00 (00)</td></tr>
+<tr><td>Value</td><td>&lt;text string according to encoding&gt;</td></tr>
+</table></center></p>
+
+<a name="sec4.3"> </a>
+<h3>4.3.URL link frames</h3>
+<p class=t>
+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 <a href="#URL">URL</a> 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 <a href="#URL">URL</a> link
+frame identifiers begins with "W". Only <a href="#URL">URL</a> link frame identifiers
+begins with "W". All <a href="#URL">URL</a> link frames have the following format:
+</p>
+<p><center><table border=0 width="70%">
+<tr><td colspan=2>&lt;Header for 'URL link frame', ID: "W000" - "WZZZ", excluding "WXXX" described in 4.3.2.&gt;</td></tr>
+<tr><td>URL</td><td width="80%">&lt;text string&gt;</td></tr>
+</table></center></p>
+
+<a name="sec4.3.1"> </a>
+<h3>4.3.1.URL link frames - details</h3>
+<p>
+<a name="WCOM"> </a>
+<div class=h5>WCOM</div>
+<div class=t>The 'Commercial information' frame is a <a href="#URL">URL</a> 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.</div>
+</p>
+
+<p>
+<a name="WCOP"> </a>
+<div class=h5>WCOP</div>
+<div class=t>The 'Copyright/Legal information' frame is a <a href="#URL">URL</a> pointing at a
+webpage where the terms of use and ownership of the file is
+described.</div>
+</p>
+
+<p>
+<a name="WOAF"> </a>
+<div class=h5>WOAF</div>
+<div class=t>The 'Official audio file webpage' frame is a <a href="#URL">URL</a> pointing at a file
+specific webpage.</div>
+</p>
+
+<p>
+<a name="WOAR"> </a>
+<div class=h5>WOAR</div>
+<div class=t>The 'Official artist/performer webpage' frame is a <a href="#URL">URL</a> 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.</div>
+</p>
+
+<p>
+<a name="WOAS"> </a>
+<div class=h5>WOAS</div>
+<div class=t>The 'Official audio source webpage' frame is a <a href="#URL">URL</a> pointing at the
+official webpage for the source of the audio file, e.g. a movie.</div>
+</p>
+
+<p>
+<a name="WORS"> </a>
+<div class=h5>WORS</div>
+<div class=t>The 'Official internet radio station homepage' contains a <a href="#URL">URL</a>
+pointing at the homepage of the internet radio station.</div>
+</p>
+
+<p>
+<a name="WPAY"> </a>
+<div class=h5>WPAY</div>
+<div class=t>The 'Payment' frame is a <a href="#URL">URL</a> pointing at a webpage that will handle
+the process of paying for this file.</div>
+</p>
+
+<p>
+<a name="WPUB"> </a>
+<div class=h5>WPUB</div>
+<div class=t>The 'Publishers official webpage' frame is a <a href="#URL">URL</a> pointing at the
+official wepage for the publisher.</div>
+</p>
+
+<a name="sec4.3.2"> </a>
+<h3>4.3.2.User defined URL link frame</h3>
+<p class=t>
+This frame is intended for <a href="#URL">URL</a> 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 <a href="#URL">URL</a>. The <a href="#URL">URL</a> is always encoded with <a href="#ISO-8859-1">ISO-8859-1</a>. There may be more than one "WXXX" frame in each tag,
+but only one with the same description.
+</p>
+<p><center><table border=0 width="70%">
+<tr><td colspan=2> &lt;Header for 'User defined URL link frame', ID: "WXXX"&gt;</td></tr>
+<tr><td>Text encoding</td><td width="80%">$xx</td></tr>
+<tr><td>Description </td><td>&lt;text string according to encoding&gt; $00 (00)</td></tr>
+<tr><td>URL </td><td>&lt;text string&gt;</td></tr>
+</table></center></p>
+
+<a name="sec4.4"> </a>
+<h3>4.4.Involved people list</h3>
+<p class=t>
+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.
+</p>
+<p><center><table border=0 width="70%">
+<tr><td colspan=2> &lt;Header for 'Involved people list', ID: "IPLS"&gt;</td></tr>
+<tr><td>Text encoding</td><td width="80%">$xx</td></tr>
+<tr><td>People list strings</td><td>&lt;text strings according to encoding&gt;</td></tr>
+</table></center></p>
+
+<a name="sec4.5"> </a>
+<h3>4.5.Music CD identifier</h3>
+<p class=t>
+This frame is intended for music that comes from a CD, so that the CD
+can be identified in databases such as the <a href="#CDDB">CDDB</a>. 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 "<a href="#TRCK">TRCK</a>" frame, even if
+the CD's only got one track. There may only be one "MCDI" frame in
+each tag.
+</p>
+<p><center><table border=0 width="70%">
+<tr><td colspan=2> &lt;Header for 'Music CD identifier', ID: "MCDI"&gt;</td></tr>
+<tr><td>CD TOC</td><td>&lt;binary data&gt;</td></tr>
+</table></center></p>
+
+<a name="sec4.6"> </a>
+<h3>4.6.Event timing codes</h3>
+<p class=t>
+This frame allows synchronisation with key events in a song or sound.
+The header is:
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2> &lt;Header for 'Event timing codes', ID: "ETCO"&gt;</td></tr>
+<tr><td>Time stamp format</td><td width="80%">$xx</td></tr>
+</table></center>
+</p><p class=t>
+Where time stamp format is:
+</p><p class=ind>
+ $01 Absolute time, 32 bit sized, using <a href="#MPEG">MPEG</a> frames as unit<br>
+ $02 Absolute time, 32 bit sized, using milliseconds as unit
+</p><p class=t>
+Abolute time means that every stamp contains the time from the
+beginning of the file.
+</p><p class=t>
+Followed by a list of key events in the following format:
+</p><p><center><table border=0 width="70%">
+<tr><td>Type of event</td><td width="80%">$xx</td></tr>
+<tr><td>Time stamp</td><td>$xx (xx ...)</td></tr>
+</table></center>
+</p><p class=t>
+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:
+</p><p><center><table border=0 width="70%">
+<tr><td>$00</td><td width="80%">padding (has no meaning)</td></tr>
+<tr><td>$01</td><td>end of initial silence</td></tr>
+<tr><td>$02</td><td>intro start</td></tr>
+<tr><td>$03</td><td>mainpart start</td></tr>
+<tr><td>$04</td><td>outro start</td></tr>
+<tr><td>$05</td><td>outro end</td></tr>
+<tr><td>$06</td><td>verse start</td></tr>
+<tr><td>$07</td><td>refrain start</td></tr>
+<tr><td>$08</td><td>interlude start</td></tr>
+<tr><td>$09</td><td>theme start</td></tr>
+<tr><td>$0A</td><td>variation start</td></tr>
+<tr><td>$0B</td><td>key change</td></tr>
+<tr><td>$0C</td><td>time change</td></tr>
+<tr><td>$0D</td><td>momentary unwanted noise (Snap, Crackle & Pop)</td></tr>
+<tr><td>$0E</td><td>sustained noise</td></tr>
+<tr><td>$0F</td><td>sustained noise end</td></tr>
+<tr><td>$10</td><td>intro end</td></tr>
+<tr><td>$11</td><td>mainpart end</td></tr>
+<tr><td>$12</td><td>verse end</td></tr>
+<tr><td>$13</td><td>refrain end</td></tr>
+<tr><td>$14</td><td>theme end</td></tr>
+
+<tr><td>$15-$DF</td><td>reserved for future use</td></tr>
+
+<tr><td>$E0-$EF</td><td>not predefined sync 0-F</td></tr>
+
+<tr><td>$F0-$FC</td><td>reserved for future use</td></tr>
+
+<tr><td>$FD</td><td>audio end (start of silence)</td></tr>
+<tr><td>$FE</td><td>audio file ends</td></tr>
+<tr><td>$FF</td><td>one more byte of events follows (all the following bytes with the value $FF have the same function)</td></tr>
+</table></center>
+</p><p class=t>
+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.
+</p>
+<p class=t>There may only be one "ETCO" frame in each tag.</p>
+
+<a name="sec4.7"> </a>
+<h3>4.7.MPEG location lookup table</h3>
+<p class=t>
+To increase performance and accuracy of jumps within a <a href="#MPEG">MPEG</a>
+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.
+</p><p class=t>
+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.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2> &lt;Header for 'Location lookup table', ID: "MLLT"&gt;</td></tr>
+<tr><td nowrap>MPEG frames between reference</td><td width="80%">$xx xx</td></tr>
+<tr><td>Bytes between reference</td><td>$xx xx xx</td></tr>
+<tr><td>Milliseconds between reference</td><td>$xx xx xx</td></tr>
+<tr><td>Bits for bytes deviation</td><td>$xx</td></tr>
+<tr><td>Bits for milliseconds dev.</td><td>$xx</td></tr>
+</table></center>
+</p><p class=t>
+Then for every reference the following data is included;
+</p><p><center><table border=0 width="70%">
+<tr><td>Deviation in bytes</td><td width="80%">%xxx....</td></tr>
+<tr><td>Deviation in milliseconds</td><td>%xxx....</td></tr>
+</table></center>
+</p>
+
+<a name="sec4.8"> </a>
+<h3>4.8.Synchronised tempo codes</h3>
+<p class=t>
+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.
+</p><p class=t>
+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.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2> &lt;Header for 'Synchronised tempo codes', ID: "SYTC"&gt;</td></tr>
+<tr><td>Time stamp format</td><td width="80%">$xx</td></tr>
+<tr><td>Tempo data </td><td>&lt;binary data&gt;</td></tr>
+</table></center>
+</p><p class=t>
+Where time stamp format is:
+</p><p class=ind>
+ $01 Absolute time, 32 bit sized, using <a href="#MPEG">MPEG</a> frames as unit<br>
+ $02 Absolute time, 32 bit sized, using milliseconds as unit
+</p><p class=t>
+Abolute time means that every stamp contains the time from the
+beginning of the file.
+</p>
+
+<a name="sec4.9"> </a>
+<h3>4.9.Unsychronised lyrics/text transcription</h3>
+<p class=t>
+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.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2>&lt;Header for 'Unsynchronised lyrics/text transcription', ID: "USLT"&gt;</td></tr>
+<tr><td>Text encoding</td><td width="80%">$xx</td></tr>
+<tr><td>Language</td><td>$xx xx xx</td></tr>
+<tr><td>Content descriptor</td><td>&lt;text string according to encoding&gt; $00 (00)</td></tr>
+<tr><td>Lyrics/text</td><td>&lt;full text string according to encoding&gt;</td></tr>
+</table></center>
+</p>
+
+<a name="sec4.10"> </a>
+<h3>4.10.Synchronised lyrics/text</h3>
+<p class=t>
+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.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2>&lt;Header for 'Synchronised lyrics/text', ID: "SYLT"&gt;</td></tr>
+<tr><td>Text encoding</td><td width="80%">$xx</td></tr>
+<tr><td>Language</td><td>$xx xx xx</td></tr>
+<tr><td>Time stamp format</td><td>$xx</td></tr>
+<tr><td>Content type</td><td>$xx</td></tr>
+<tr><td>Content descriptor</td><td>&lt;text string according to encoding&gt; $00 (00)</td></tr>
+</table></center>
+</p>
+<p><center><table border=0 width="70%">
+<tr><td rowspan=2 valign=top>Encoding:</td><td>$00</td><td><a href="#ISO-8859-1">ISO-8859-1</a> character set is used => $00
+ is sync identifier.</td></tr>
+<tr><td>$01</td><td><a href="#UNICODE">Unicode</a> character set is used => $00 00 is
+ sync identifier.</td></tr>
+</table></center></p>
+
+<p><center><table border=0 width="70%">
+<tr><td rowspan=7 valign=top>Content type:</td><td>$00</td><td width="80%">is other</td></tr>
+<tr><td>$01</td><td>is lyrics</td></tr>
+<tr><td>$02</td><td>is text transcription</td></tr>
+<tr><td>$03</td><td>is movement/part name (e.g. "Adagio")</td></tr>
+<tr><td>$04</td><td>is events (e.g. "Don Quijote enters the stage")</td></tr>
+<tr><td>$05</td><td>is chord (e.g. "Bb F Fsus")</td></tr>
+<tr><td>$06</td><td>is trivia/'pop up' information</td></tr>
+</table></center></p>
+<p class=t>
+Time stamp format is:
+</p><p class=ind>
+ $01 Absolute time, 32 bit sized, using <a href="#MPEG">MPEG</a> frames as unit<br>
+ $02 Absolute time, 32 bit sized, using milliseconds as unit
+</p>
+<p class=t>
+Abolute time means that every stamp contains the time from the
+beginning of the file.
+</p><p class=t>
+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:
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2>Terminated text to be synced (typically a syllable)</td></tr>
+<tr><td nowrap>Sync identifier (terminator to above string)</td><td width="80%">$00 (00)</td></tr>
+<tr><td>Time stamp</td><td>$xx (xx ...)</td></tr>
+</table></center>
+<p class=t>
+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.
+</p><p class=t>
+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.
+</p><p class=t>
+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).</p>
+<p class=t>An example: The "USLT" passage</p>
+<p class=ind>"Strangers in the night" $0A "Exchanging glances"</p>
+<p class=t>would be "SYLT" encoded as:</p>
+<p class=ind>
+ "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
+</p>
+<p class=t>There may be more than one "SYLT" frame in each tag, but only one
+with the same language and content descriptor.</p>
+
+<a name="sec4.11"> </a>
+<h3>4.11.Comments</h3>
+<p class=t>
+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.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2>&lt;Header for 'Comment', ID: "COMM"&gt;</td></tr>
+<tr><td>Text encoding</td><td width="80%">$xx</td></tr>
+<tr><td>Language </td><td>$xx xx xx</td></tr>
+<tr><td>Short content descrip.</td><td>&lt;text string according to encoding&gt; $00 (00)</td></tr>
+<tr><td>The actual text </td><td>&lt;full text string according to encoding&gt;</td></tr>
+</table></center>
+</p>
+
+<a name="sec4.12"> </a>
+<h3>4.12.Relative volume adjustment</h3>
+<p class=t>
+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.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2>&lt;Header for 'Relative volume adjustment', ID: "RVAD"&gt;</td></tr>
+<tr><td>Increment/decrement</td><td width="80%">%00xxxxxx</td></tr>
+<tr><td>Bits used for volume descr.</td><td>$xx</td></tr>
+<tr><td>Relative volume change, right</td><td>$xx xx (xx ...)</td></tr>
+<tr><td>Relative volume change, left</td><td>$xx xx (xx ...)</td></tr>
+<tr><td>Peak volume right</td><td>$xx xx (xx ...)</td></tr>
+<tr><td>Peak volume left</td><td>$xx xx (xx ...)</td></tr>
+</table></center></p>
+<p class=t>
+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.
+</p><p class=t>
+The 'bits used for volume description' field is normally $10 (16
+bits) for <a href="#MPEG">MPEG</a> 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.
+</p><p class=t>
+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.
+</p><p><center><table border=0 width="70%">
+<tr><td nowrap>Relative volume change, right back</td><td width="80%">$xx xx (xx ...)</td></tr>
+<tr><td>Relative volume change, left back</td><td>$xx xx (xx ...)</td></tr>
+<tr><td>Peak volume right back</td><td>$xx xx (xx ...)</td></tr>
+<tr><td>Peak volume left back</td><td>$xx xx (xx ...)</td></tr>
+</table></center></p>
+<p class=t>
+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.
+</p><p><center><table border=0 width="70%">
+<tr><td nowrap>Relative volume change, center</td><td width="80%">$xx xx (xx ...)</td></tr>
+<tr><td>Peak volume center</td><td>$xx xx (xx ...)</td></tr>
+</table></center></p>
+<p class=t>
+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.
+</p><p><center><table border=0 width="70%">
+<tr><td nowrap>Relative volume change, bass</td><td width="80%">$xx xx (xx ...)</td></tr>
+<tr><td>Peak volume bass</td><td>$xx xx (xx ...)</td></tr>
+</table></center></p>
+
+<a name="sec4.13"> </a>
+<h3>4.13.Equalisation</h3>
+<p class=t>
+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.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2>&lt;Header of 'Equalisation', ID: "EQUA"&gt;</td></tr>
+<tr><td>Adjustment bits</td><td width="80%">$xx</td></tr>
+</table></center></p>
+<p class=t>
+The 'adjustment bits' field defines the number of bits used for
+representation of the adjustment. This is normally $10 (16 bits) for
+<a href="#MPEG">MPEG</a> 2 layer I, II and III and MPEG 2.5. This value may not be
+$00.
+</p><p class=t>
+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:
+</p><p><center><table border=0 width="70%">
+<tr><td>Increment/decrement</td><td width="80%">%x (MSB of the Frequency)</td></tr>
+<tr><td>Frequency </td><td>(lower 15 bits)</td></tr>
+<tr><td>Adjustment</td><td>$xx (xx ...)</td></tr>
+</Table></center></p>
+<p class=t>
+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.
+</p>
+
+<a name="sec4.14"> </a>
+<h3>4.14.Reverb</h3>
+<p class=t>
+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.
+</p><p class=t>
+'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.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2> &lt;Header for 'Reverb', ID: "RVRB"&gt;</td></tr>
+<tr><td>Reverb left (ms) </td><td>$xx xx</td></tr>
+<tr><td>Reverb right (ms) </td><td>$xx xx</td></tr>
+<tr><td>Reverb bounces, left </td><td>$xx</td></tr>
+<tr><td>Reverb bounces, right</td><td>$xx</td></tr>
+<tr><td>Reverb feedback, left to left </td><td>$xx</td></tr>
+<tr><td>Reverb feedback, left to right</td><td>$xx</td></tr>
+<tr><td>Reverb feedback, right to right </td><td>$xx</td></tr>
+<tr><td>Reverb feedback, right to left</td><td>$xx</td></tr>
+<tr><td>Premix left to right </td><td>$xx</td></tr>
+<tr><td>Premix right to left </td><td>$xx</td></tr>
+</table></center></p>
+
+<a name="sec4.15"> </a>
+<h3>4.15.Attached picture</h3>
+<p class=t>
+This frame contains a picture directly related to the audio file.
+Image format is the <a href="#MIME">MIME</a> type and subtype for the image. In
+the event that the <a href="#MIME">MIME</a> media type name is omitted, "image/" will be
+implied. The "<a href="#PNG">image/png</a>" or "<a href="#JFIF">image/jpeg</a>" 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 '<a href="#MIME">MIME</a>
+type' "-->" and having a complete <a href="#URL">URL</a> instead of picture data.
+The use of linked files should however be used sparingly since there
+is the risk of separation of files.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2> &lt;Header for 'Attached picture', ID: "APIC"&gt;</td></tr>
+<tr><td>Text encoding</td><td>$xx</td></tr>
+<tr><td>MIME type </td><td>&lt;text string&gt; $00</td></tr>
+<tr><td>Picture type </td><td>$xx</td></tr>
+<tr><td>Description </td><td>&lt;text string according to encoding&gt; $00 (00)</td></tr>
+<tr><td>Picture data </td><td>&lt;binary data&gt;</td></tr>
+</table>
+</center></p>
+<p><center><table border=0 width="70%">
+<tr><td rowspan=21 valign=top>Picture type:</td><td>$00</td><td>Other</td></tr>
+<tr><td>$01</td><td>32x32 pixels 'file icon' (PNG only)</td></tr>
+<tr><td>$02</td><td>Other file icon</td></tr>
+<tr><td>$03</td><td>Cover (front)</td></tr>
+<tr><td>$04</td><td>Cover (back)</td></tr>
+<tr><td>$05</td><td>Leaflet page</td></tr>
+<tr><td>$06</td><td>Media (e.g. lable side of CD)</td></tr>
+<tr><td>$07</td><td>Lead artist/lead performer/soloist</td></tr>
+<tr><td>$08</td><td>Artist/performer</td></tr>
+<tr><td>$09</td><td>Conductor</td></tr>
+<tr><td>$0A</td><td>Band/Orchestra</td></tr>
+<tr><td>$0B</td><td>Composer</td></tr>
+<tr><td>$0C</td><td>Lyricist/text writer</td></tr>
+<tr><td>$0D</td><td>Recording Location</td></tr>
+<tr><td>$0E</td><td>During recording</td></tr>
+<tr><td>$0F</td><td>During performance</td></tr>
+<tr><td>$10</td><td>Movie/video screen capture</td></tr>
+<tr><td>$11</td><td>A bright coloured fish</td></tr>
+<tr><td>$12</td><td>Illustration</td></tr>
+<tr><td>$13</td><td>Band/artist logotype</td></tr>
+<tr><td>$14</td><td>Publisher/Studio logotype</td></tr>
+</table></center></p>
+
+<a name="sec4.16"> </a>
+<h3>4.16.General encapsulated object</h3>
+<p class=t>
+In this frame any type of file can be encapsulated. After the header,
+'Frame size' and 'Encoding' follows '<a href="#MIME">MIME</a> type' represented as
+as a terminated string encoded with <a href="#ISO-8859-1">ISO-8859-1</a>. 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.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2> &lt;Header for 'General encapsulated object', ID: "GEOB"&gt;</td></tr>
+<tr><td>Text encoding </td><td>$xx</td></tr>
+<tr><td>MIME type </td><td>&lt;text string&gt; $00</td></tr>
+<tr><td>Filename</td><td>&lt;text string according to encoding&gt; $00 (00)</td></tr>
+<tr><td>Content description </td><td><text string according to encóding> $00 (00)</td></tr>
+<tr><td>Encapsulated object </td><td>&lt;binary data&gt;</td></tr>
+</table></center></p>
+
+<a name="sec4.17"> </a>
+<h3>4.17.Play counter</h3>
+<p class=t>
+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.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2> &lt;Header for 'Play counter', ID: "PCNT"&gt;</td></tr>
+<tr><td>Counter </td><td>$xx xx xx xx (xx ...)</td></tr>
+</table></center></p>
+
+
+<a name="sec4.18"> </a>
+<h3>4.18.Popularimeter</h3>
+<p class=t>
+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.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2> &lt;Header for 'Popularimeter', ID: "POPM"&gt;</td></tr>
+<tr><td>Email to user</td><td>&lt;text string&gt; $00</td></tr>
+<tr><td>Rating </td><td>$xx</td></tr>
+<tr><td>Counter</td><td>$xx xx xx xx (xx ...)</td></tr>
+</table></center></p>
+
+<a name="sec4.19"> </a>
+<h3>4.19.Recommended buffer size</h3>
+<p class=t>
+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 <a href="#MPEG">MPEG</a> frames, if
+the audio is <a href="#MPEG">MPEG</a> 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.
+</p><p class=t>
+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
+"<a href="#TIT2">TIT2</a>" frame in the first received tag and one in the second tag,
+then the first should be 'replaced' with the second.
+</p><p class=t>
+The 'Buffer size' should be kept to a minimum. There may only be one
+"RBUF" frame in each tag.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2>&lt;Header for 'Recommended buffer size', ID: "RBUF"&gt;</td></tr>
+<tr><td>Buffer size</td><td>$xx xx xx</td></tr>
+<tr><td>Embedded info flag</td><td>%0000000x</td></tr>
+<tr><td>Offset to next tag</td><td>$xx xx xx xx</td></tr>
+</table></center></p>
+
+<a name="sec4.20"> </a>
+<h3>4.20.Audio encryption</h3>
+<p class=t>
+This frame indicates if the actual audio stream is encrypted, and by
+whom. Since standardisation of such encrypion 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.
+</p><p class=t>
+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'.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2>&lt;Header for 'Audio encryption', ID: "AENC"&gt;</td></tr>
+<tr><td>Owner identifier</td><td>&lt;text string&gt; $00</td></tr>
+<tr><td>Preview start</td><td>$xx xx</td></tr>
+<tr><td>Preview length</td><td>$xx xx</td></tr>
+<tr><td>Encryption info</td><td>&lt;binary data&gt;</td></tr>
+</table></center></p>
+
+<a name="sec4.21"> </a>
+<h3>4.21.Linked information</h3>
+<p class=t>
+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 <a href="#URL">URL</a> 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).
+</p><p><center><table border=0 width="70%">
+<tr><td>&lt;Header for 'Linked information', ID: "LINK"&gt;</td></tr>
+<tr><td>Frame identifier</td><td>$xx xx xx</td></tr>
+<tr><td>URL</td><td>&lt;text string&gt; $00</td></tr>
+<tr><td>ID and additional data</td><td>&lt;text string(s)&gt;</td></tr>
+</table></center></p>
+<p class=t>
+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.
+</p><p class=t>
+The "TXXX", "APIC", "GEOB" and "AENC" frames may be linked with
+the content descriptor as additional ID data.
+</p><p class=t>
+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.
+</p>
+
+<a name="sec4.22"> </a>
+<h3>4.22.Position synchronisation frame</h3>
+<p class=t>
+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:
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2>&lt;Head for 'Position synchronisation', ID: "POSS"&gt;</td></tr>
+<tr><td>Time stamp format</td><td>$xx</td></tr>
+<tr><td>Position</td><td>$xx (xx ...)</td></tr>
+</table></center></p>
+<p class=t>
+Where time stamp format is:
+</p><p class=ind>
+$01 Absolute time, 32 bit sized, using <a href="#MPEG">MPEG</a> frames as unit<br>
+$02 Absolute time, 32 bit sized, using milliseconds as unit
+</p><p class=t>
+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.
+</p>
+
+<a name="sec4.23"> </a>
+<h3>4.23.Terms of use frame</h3>
+<p class=t>
+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.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2>&lt;Header for 'Terms of use frame', ID: "USER"&gt;</td></tr>
+<tr><td>Text encoding</td><td>$xx</td></tr>
+<tr><td>Language</td><td>$xx xx xx</td></tr>
+<tr><td>The actual text</td><td>&lt;text string according to encoding&gt;</td></tr>
+</table></center></p>
+
+<a name="sec4.24"> </a>
+<h3>4.24.Ownership frame</h3>
+<p class=t>
+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 <a href="#ISO-4217">ISO-4217</a> 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.
+</p><p><center><table border=0 width="70%">
+<tr><td>&lt;Header for 'Ownership frame', ID: "OWNE"&gt;</td></tr>
+<tr><td>Text encoding</td><td>$xx</td></tr>
+<tr><td>Price payed</td><td>&lt;text string&gt; $00</td></tr>
+<tr><td>Date of purch.</td><td>&lt;text string&gt;</td></tr>
+<tr><td>Seller</td><td>&lt;text string according to encoding&gt;</td></tr>
+</table></center></p>
+
+<a name="sec4.25"> </a>
+<h3>4.25.Commercial frame</h3>
+<p class=t>
+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 <a href="#ISO-4217">ISO-4217</a> 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.
+</p><p class=t>
+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 <a href="#URL">URL</a>, 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:
+</p><p><center><table border=0 width="70%">
+<tr><td>$00</td><td>Other</td></tr>
+<tr><td>$01</td><td>Standard CD album with other songs</td></tr>
+<tr><td>$02</td><td>Compressed audio on CD</td></tr>
+<tr><td>$03</td><td>File over the Internet</td></tr>
+<tr><td>$04</td><td>Stream over the Internet</td></tr>
+<tr><td>$05</td><td>As note sheets</td></tr>
+<tr><td>$06</td><td>As note sheets in a book with other sheets</td></tr>
+<tr><td>$07</td><td>Music on other media</td></tr>
+<tr><td>$08</td><td>Non-musical merchandise</td></tr>
+</table></center></p>
+<p class=t>
+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 <a href="#MIME">MIME</a> media type
+name is omitted, "image/" will be implied. Currently only "<a href="#PNG">image/png</a>"
+and "<a href="#JFIF">image/jpeg</a>" 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.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2> &lt;Header for 'Commercial frame', ID: "COMR"&gt;</td></tr>
+<tr><td>Text encoding</td><td>$xx</td></tr>
+<tr><td>Price string</td><td>&lt;text string&gt; $00</td></tr>
+<tr><td>Valid until</td><td>&lt;text string&gt;</td></tr>
+<tr><td>Contact URL</td><td>&lt;text string&gt; $00</td></tr>
+<tr><td>Received as</td><td>$xx</td></tr>
+<tr><td>Name of seller</td><td>&lt;text string according to encoding&gt; $00 (00)</td></tr>
+<tr><td>Description</td><td>&lt;text string according to encoding&gt; $00 (00)</td></tr>
+<tr><td>Picture MIME type</td><td>&lt;string&gt; $00</td></tr>
+<tr><td>Seller logo</td><td>&lt;binary data&gt;</td></tr>
+</table></center></p>
+
+<a name="sec4.26"> </a>
+<h3>4.26.Encryption method registration</h3>
+<p class=t>
+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 <a href="#URL">URL</a>
+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 <a href="#sec3.3.1">section 3.3.1</a>, flag j
+for more information.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2>&lt;Header for 'Encryption method registration', ID: "ENCR"&gt;</td></tr>
+<tr><td>Owner identifier</td><td width="80%">&lt;text string&gt; $00</td></tr>
+<tr><td>Method symbol</td><td>$xx</td></tr>
+<tr><td>Encryption data</td><td>&lt;binary data&gt;</td></tr>
+</table></center></p>
+
+<a name="sec4.27"> </a>
+<h3>4.27.Group identification registration</h3>
+<p class=t>
+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 <a href="#URL">URL</a> 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 <a href="#sec3.3.1">section 3.3.1</a>, flag j for more information.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2>&lt;Header for 'Group ID registration', ID: "GRID"&gt;</td></tr>
+<tr><td>Owner identifier</td><td>&lt;text string&gt; $00</td></tr>
+<tr><td>Group symbol</td><td width="80%">$xx</td></tr>
+<tr><td>Group dependent data</td><td>&lt;binary data&gt;</td></tr>
+</table></center></p>
+
+<a name="sec4.28"> </a>
+<h3>4.28.Private frame</h3>
+<p class=t>
+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 <a href="#URL">URL</a>
+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.
+</p><p><center><table border=0 width="70%">
+<tr><td colspan=2>&lt;Header for 'Private frame', ID: "PRIV"&gt;</td></tr>
+<tr><td>Owner identifier</td><td width="80%">&lt;text string&gt; $00</td></tr>
+<tr><td>The private data</td><td>&lt;binary data&gt;</td></tr>
+</table></center></p>
+
+<a name="sec5"> </a>
+<h3>5.The 'unsynchronisation scheme'</h3>
+<p class=t>
+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.
+</p><p class=t>
+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:
+</p><p class=ind>
+%11111111 111xxxxx
+</p><p class=t>
+And should be replaced with:
+</p><p class=ind>
+%11111111 00000000 111xxxxx
+</p><p class=t>
+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.
+</p><p class=t>
+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.
+</p><p class=t>
+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.
+</p><p class=t>
+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.
+</p>
+
+<a name="sec6"> </a>
+<h3>6.Copyright</h3>
+<p class=t>
+Copyright &copy; Martin Nilsson 1998. All Rights Reserved.
+</p><p class=t>
+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.
+</p><p class=t>
+The limited permissions granted above are perpetual and will not be revoked.
+</p><p class=t>
+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.
+</p>
+
+
+<a name="sec7"> </a>
+<h3>7.References</h3>
+
+<a name="CDDB"> </a>
+<p class=t>[CDDB] Compact Disc Data Base</p>
+<p class=ind>&lt;url:<a href="http://www.cddb.com">http://www.cddb.com</a>&gt;</p>
+
+<a name="ID3v2"> </a>
+<p class=t>[ID3v2] Martin Nilsson, "ID3v2 informal standard".</p>
+<p class=ind>&lt;url:<a href="http://www.id3.org/id3v2-00.txt">http://www.id3.org/id3v2-00.txt</a>&gt;</p>
+
+<a name="ISO-639-2"> </a>
+<p class=t>[ISO-639-2] ISO/FDIS 639-2.<br>
+Codes for the representation of names of languages, Part 2: Alpha-3 code. Technical committee / subcommittee: TC 37 / SC 2</p>
+
+<a name="ISO-4217"> </a>
+<p class=t>[ISO-4217] ISO 4217:1995.<br>
+Codes for the representation of currencies and funds. Technical committee / subcommittee: TC 68</p>
+
+<a name="ISO-8859-1"> </a>
+<p class=t>[ISO-8859-1] ISO/IEC DIS 8859-1.<br>
+8-bit single-byte coded graphic character sets, Part 1: Latin alphabet No. 1. Technical committee / subcommittee: JTC 1 / SC 2</p>
+
+<a name="ISRC"> </a>
+<p class=t>[ISRC] ISO 3901:1986<br>
+International Standard Recording Code (ISRC). Technical committee / subcommittee: TC 46 / SC 9</p>
+
+<a name="JFIF"> </a>
+<p class=t>[JFIF] JPEG File Interchange Format, version 1.02</p>
+<p class=ind>&lt;url:<a href="http://www.w3.org/Graphics/JPEG/jfif.txt">http://www.w3.org/Graphics/JPEG/jfif.txt</a>&gt;</p>
+
+<a name="MIME"> </a>
+<p class=t>[MIME] Freed, N. and N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies", RFC 2045, November 1996.</p>
+<p class=ind>&lt;url:<a href="ftp://ftp.isi.edu/in-notes/rfc2045.txt">ftp://ftp.isi.edu/in-notes/rfc2045.txt</a>&gt;</p>
+
+<a name="MPEG"> </a>
+<p class=t>[MPEG] ISO/IEC 11172-3:1993.<br>
+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<br>
+&nbsp;and<br>
+ISO/IEC 13818-3:1995<br>
+Generic coding of moving pictures and associated audio information, Part 3: Audio. Technical committee / subcommittee: JTC 1 / SC 29<br>
+&nbsp;and<br>
+ISO/IEC DIS 13818-3<br>
+Generic coding of moving pictures and associated audio information, Part 3: Audio (Revision of ISO/IEC 13818-3:1995)</p>
+
+<a name="PNG"> </a>
+<p class=t>[PNG] Portable Network Graphics, version 1.0</p>
+<p class=ind>&lt;url:<a href="http://www.w3.org/TR/REC-png-multi.html">http://www.w3.org/TR/REC-png-multi.html</a>&gt;</p>
+
+<a name="UNICODE"> </a>
+<p class=t>[UNICODE] ISO/IEC 10646-1:1993.<br>
+Universal Multiple-Octet Coded Character Set (UCS), Part 1: Architecture and Basic Multilingual Plane. Technical committee / subcommittee: JTC 1 / SC 2</p>
+<p class=ind>&lt;url:<a href="http://www.unicode.org">http://www.unicode.org</a>&gt;</p>
+
+<a name="URL"> </a>
+<p class=t>[URL] T. Berners-Lee, L. Masinter & M. McCahill, "Uniform Resource Locators (URL).", RFC 1738, December 1994.</p>
+<p class=ind>&lt;url:<a href="ftp://ftp.isi.edu/in-notes/rfc1738.txt">ftp://ftp.isi.edu/in-notes/rfc1738.txt</a>&gt;</p>
+
+<a name="ZLIB"> </a>
+<p class=t>[ZLIB] P. Deutsch, Aladdin Enterprises & J-L. Gailly, "ZLIB Compressed Data Format Specification version 3.3", RFC 1950, May 1996.</p>
+<p class=ind>&lt;url:<a href="ftp://ftp.isi.edu/in-notes/rfc1950.txt">ftp://ftp.isi.edu/in-notes/rfc1950.txt</a>&gt;</p>
+
+
+<a name="sec8"> </a>
+<h3>8.Appendix</h3>
+
+<a name="secA"> </a>
+<h3>A.Appendix A - Genre List from ID3v1</h3>
+<center><table border=0 width="70%"><tr valign=top><td>
+The following genres is defined in ID3v1
+<pre>
+ 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&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 & Roll
+ 79.Hard Rock
+</pre>
+</td><td>
+The following genres are Winamp extensions
+<pre>
+ 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
+</pre></td></tr></table></center>
+
+<a name="sec9"> </a>
+<h3>9.Author's Address</h3>
+<p class=t>
+Written by
+</p><p class=ind>
+Martin Nilsson<br>
+Rydsvägen 246 C. 30<br>
+S-584 34 Linköping<br>
+Sweden<br>
+</p><p class=ind>
+Email: <a href="mailto:nilsson@id3.org">nilsson@id3.org</a>
+</p>
+
+<p class=t>
+Edited by
+</p><p class=ind>
+Dirk Mahoney<br>
+57 Pechey Street<br>
+Chermside Q<br>
+Australia 4032<br>
+</p><p class=ind>
+Email: <a href="mailto:dirk@id3.org">dirk@id3.org</a>
+</p>
+<p class=ind>
+Johan Sundström<br>
+Alsättersgatan 5 A. 34<br>
+S-584 35 Linköping<br>
+Sweden<br>
+</p><p class=ind>
+Email: <a href="mailto:johan@id3.org">johan@id3.org</a>
+</p>
+
+</body></html> \ No newline at end of file