<html><head>
<!-- base href="http://www.id3.org/id3v2-accessibility-1.0.html" --><title>ID3v2 Accessibility Addendum</title>

<style type="text/css">
body {font: 16px times}
h1 {font: 28px times}
h3 {font: 20px times; margin-left: 5%}
p.t {margin-left: 10%; margin-right: 10%}
p.ind {margin-left: 15%; margin-right: 15%}
a {font: 15px arial, helvetica; color: #CC5500; text-decoration: none}
</style>
<meta name="description" content="ID3v2 Accessibility Addendum">
<meta name="keywords" content="ID3v2, Accessibility"></head>
<body bgcolor="white" text="black">

<a name="top"></a>
<p><table border="0" width="100%"><tbody><tr><td>Informal standard<br>Document: id3v2-accessibility-1.0.html</td><td align="right">
C. Newell<br>22 August 2006</td></tr></tbody></table></p>

<h1 align="center">ID3v2 Accessibility Addendum</h1>

<a name="status"> </a>
<h3>Status of this document</h3>
<p class="t">
Third draft - this document is a proposed addendum to the ID3v2.3 <a href="#ref1">[1]</a> and
ID3v2.4 <a href="#ref2">[2]</a>, <a href="#ref3">[3]</a> standards.
Distribution of this document is unlimited.
</p>

<a name="abstract"> </a>
<h3>Abstract</h3>
<p class="t">
This document describes extensions which make ID3v2 metadata 
accessible to the visually impaired. The approach may also be 
useful for audio players which have limited display capabilities.
A new frame type is proposed that carries an audio clip which 
can provide a verbal expression of the textual information 
carried by another ID3v2 frame.
</p>

<a name="sec1"> </a>
<h3>1. Table of contents</h3>
<p></p><center><table border="0" width="80%"><tbody><tr><td>
<dl>
<dt>2. <a href="#sec2">Conventions in this document</a></dt>
<dt>3. <a href="#sec3">Introduction</a></dt>
<dt>4. <a href="#sec4">Proposed audio-text frame</a></dt>
<dt>5. <a href="#sec4">Scrambling scheme for non-MPEG audio formats</a></dt>
<dt>6. <a href="#sec6">Notes</a></dt>
<dt>7. <a href="#sec7">Copyright</a></dt>
<dt>8. <a href="#sec8">References</a></dt>
<dt>9. <a href="#sec9">Author's address</a></dt>
</dl>
</td></tr></tbody></table></center><p></p>

<a name="sec2"> </a>
<h3>2. Conventions in this document</h3>
<p class="t">
Text within "" is a text string exactly as it appears in a tag.
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 the ID3v2 main structure document
<a href="#ref2">[2]</a>. 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 "0123456789" only.
</p><p class="t">
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED",  "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 
<a href="#ref4">[4]</a>.
</p>

<a name="sec3"> </a>
<h3>3. Introduction</h3>
<p class="t">
The ID3v2 standards provide a way to deliver metadata that is 
predominantly human-readable, textual data. However, in this form 
the information is not easily accessible to the visually impaired.
</p><p class="t">
The purpose of this Addendum is to allow content providers or 
third-party tools to provide an audio description (i.e. a spoken 
narrative) that is equivalent to the textual information carried 
by an ID3v2 frame. A new "audio-text" frame is defined which
carries an audio clip and a matching equivalent text string.
These text strings can be compared against the strings carried by other
ID3v2 frames to identify when a matching audio description is 
available.
</p><p class="t">
The audio clips can be played whenever the equivalent textual 
information is displayed or highlighted, providing a greatly improved 
user interface for the visually impaired. However, the feature may 
also be popular with other users and useful for media players with 
limited display capabilities.
</p>

<a name="sec4"> </a>
<h3>4. Proposed audio-text frame</h3>
<p class="t">
The purpose of this frame is to carry a short audio clip which represents the
information carried by another ID3v2 frame that is present in the same tag. 
</p><p class="t">To avoid these audio clips being confused with the main audio
content of the file the ID3v2 unsynchronisation scheme must be used if the audio 
clip uses an MPEG audio format. If the unsynchronisation scheme is not 
appropriate for the audio format then the scrambling scheme defined in 
<a href="#sec5">section 5</a> must be applied to the audio clip data.
</p>

</p><p><center><table border=0 width="70%">
<tr><td colspan=2><ID3v2.3 or ID3v2.4 frame header, ID: "ATXT"></td></tr>
<tr><td>Text encoding</td><td>$xx</td></tr>
<tr><td>MIME type</td><td><text string> $00</td></tr>
<tr><td>Flags</td><td>%0000000a</td></tr>
<tr><td>Equivalent text</td><td><text string according to encoding> $00 (00)</td></tr>
<tr><td>Audio data</td><td><binary data></td></tr>
</table></center></p>

</p><p class="t">
The Frame ID for the audio-text frame shall be set to "ATXT" using ISO-8859-1 character encoding.
</p><p class="t">
The MIME type shall be represented as a terminated string encoded using ISO-8859-1 character encoding.
Where the MIME type corresponds to MPEG 1/2 layer I, II and III, MPEG 2.5 or AAC audio the ID3v2
unsynchronisation scheme should be applied, either to the audio-text frame or to the tag which contains it.
For other MIME types the scrambling scheme defined in the Appendix should be applied to the audio data.
</p><p class="t">
Flag a - Scrambling flag<br>
This flag shall be set if the scrambling method defined in Section 5 has been applied to the
audio data, or not set if no scrambling has been applied.
</p><p class="t">
The Equivalent text field carries a null terminated string encoded according to the Text encoding byte as
defined by the ID3v2 specifications <a href="#ref1">[1]</a>, <a href="#ref1">[2]</a>. This text must be 
semantically equivalent to the spoken narrative in the audio clip and should match the text and encoding 
used by another ID3v2 frame in the tag.
<p class="t">
The Audio data carries an audio clip which provides the audio description. The encoding of the audio data 
shall match the MIME type field and the data shall be scrambled if the scrambling flag is set.
</p><p class="t">
More than one audio-text frame may be present in a tag but each must carry a unique string in the Equivalent text 
field.
</p>

<a name="sec5"></a>
<h3>5. Scrambling scheme for non-MPEG audio formats</h3>
<p class="t">
This scrambling scheme is provided for non-MPEG audio formats where the unsynchronisation 
scheme defined by the ID3v2 specifications <a href="#ref1">[1]</a>, <a href="#ref1">[2]</a>
is unsuitable. Each bit of the audio data is scrambled by taking the exclusive-OR (XOR) 
between it and the equivalent bit of a pseudo-random byte sequence. The first byte of this 
pseudo-random byte sequence is always %11111110 and is used to scramble the first byte of 
the audio data. The next byte of the sequence is derived from the current byte of the sequence 
using the algorithm in Table 1 and is used to scramble the next byte of audio data. This 
process is repeated until all bytes in the audio clip have been scrambled.
</p><p class="t">

<table border="1" align="center">
<tr><th align="center">  byte N+1  </th><th>byte N</th></tr>
<tr><td align="center">  bit 7 =  </td><td>  bit 6 XOR bit 5  </td></tr>
<tr><td align="center">  bit 6 =  </td><td>  bit 5 XOR bit 4  </td></tr>
<tr><td align="center">  bit 5 =  </td><td>  bit 4 XOR bit 3  </td></tr>
<tr><td align="center">  bit 6 =  </td><td>  bit 3 XOR bit 2  </td></tr>
<tr><td align="center">  bit 3 =  </td><td>  bit 2 XOR bit 1  </td></tr>
<tr><td align="center">  bit 2 =  </td><td>  bit 1 XOR bit 0  </td></tr>
<tr><td align="center">  bit 1 =  </td><td>  bit 7 XOR bit 5  </td></tr>
<tr><td align="center">  bit 0 =  </td><td>  bit 6 XOR bit 4  </td></tr>
</table>
<h4 align="center" style="font-family: arial;">Table 1: Scrambling sequence algorithm</h4>
</p><p class="t">

This algorithm results in a 127-bit pseudo-random sequence which repeats on byte boundaries every 127 bytes. 
To recover the audio data from the scrambled data the scrambling procedure is repeated.
</p><p class="t">

<a name="sec6"></a>
<h3>6. Notes</h3>
<table border="0" width="80%" align="center">
<tr><td><ol>
<li>Failure to use the ID3v2 unsynchronisation scheme or the alternative scrambling scheme, 
as appropriate to the audio format, is very likely to confuse media players which are likely 
to start playback when an audio-text frame in encountered rather than at the end of the ID3v2 
tag.</li>
<p></p>
<li>Players which only support MPEG audio formats are not required to support the scrambling
scheme provided for non-MPEG formats.</li>
<p></p>
<li>It is not required to provide an audio-text frame to represent every 
text string present in a tag. The emphasis should be on text strings 
in frames that are commonly used to identify and describe the content 
(e.g "TIT2", "TALB" & "TPE1").</li>
<p></p>
<li>A parser that does not recognise "ATXT" frames can skip them 
using the size field in the frame header.</li>
<p></p>
<li>Editing text fields in ID3 tags may result in the retention of irrelevant ATXT frames and  
gaps in the provision of audio text unless action is taken to amend the corresponding ATXT frames.</li>
</ol></td></tr>
</table><p></p>

<a name="sec7"> </a>
<h3>7. Copyright</h3>
<p class="t">
Copyright © BBC Research & Development, 2006. 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 DISCLAIM 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="sec8"> </a>
<h3>8. References</h3>

<a name="ref1"> </a>
<p class="t">[1] M. Nilsson, "ID3 tag version 2.3.0".</p>
<p class="ind"><<a href="http://www.id3.org/id3v2.3.0.txt">http://www.id3.org/id3v2.3.0.txt</a>></p>

<a name="ref2"> </a>
<p class="t">[2] M. Nilsson, "ID3 tag version 2.4.0 - Main Structure".</p>
<p class="ind"><<a href="http://www.id3.org/id3v2.4.0-structure.txt">http://www.id3.org/id3v2.4.0-structure.txt</a>></p>


<a name="ref3"> </a>
<p class="t">[3] M. Nilsson, "ID3 tag version 2.4.0 - Native frames".</p>
<p class="ind"><<a href="http://www.id3.org/id3v2.4.0-frames.txt">http://www.id3.org/id3v2.4.0-frames.txt</a>></p>

<a name="ref4"> </a>
<p class="t">[4] S. Bradner, "Key words for use in RFCs to Indicate
Requirement Levels", RFC 2119, March 1997.</p>

<a name="sec9"> </a>
<h3>9. Author's address</h3>
<p class="ind">
Chris Newell<br>
BBC Research & Development<br>
Kingswood Warren<br>
Tadworth<br>
Surrey<br>
KT20 6NP<br>
UK</br>
</p><p class="ind">
Email: <a
href="mailto:chris.newell@rd.bbc.co.uk">chris.newell@rd.bbc.co.uk</a>
</p>

</div></body></html>