<DIV>If you wont to understand how something works you mast broks it in parts. Play with Mirosoft Windows Media Player SDK 10 or with Windows Media Format 9.5 SDK (in .NET), check winamp, way iTunes is so important for you? its more important to support standards! When in some case something doesn't work its best to not do it, in this case heuristical algoritm, in some cases it will not work. Like i say, way iTunes?<BR><BR><B><I>Ben Bennett <fiji@ayup.limey.net></I></B> wrote:
<BLOCKQUOTE class=replbq style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #1010ff 2px solid">On Mon, Aug 22, 2005 at 03:00:37PM +0100, Ion Todirel wrote:<BR>> First you cannot determine if is syncsafe or not! based on MSB in<BR>> all bytes. Second in your library you only can put an option to read<BR>> frame size as syncsafe or as normal integers, you cannot read<BR><BR>Unfortunately that won't do it since iTunes leaves frames alone if it<BR>hasn't changed them, so you may have a mix.<BR><BR>I have a heuristic in my parser that looks at the unsynchronized frame<BR>size and check to see if there is a legal frame identifier following<BR>it or if we have hit padding or the end of the file. I also check the<BR>size of the following frame to make sure it is less than the tag<BR>size. If either the frame id or the size are invalid I sanity check<BR>the original size to see if it leads to a valid frame. If that check<BR>fails too, I give up and go with the unsynchronized
 size.<BR><BR>It is clearly not perfect, but this seems to do a decent job of<BR>catching the errors.<BR><BR>> ID3v2.3 or ID3v2.4 as normal because iTunes write these information<BR>> as normal integers, look how WindowsMedia Player or Winamp write<BR>> these, if what you say is true then iTunes does'n support ID3v2<BR>> standard.<BR><BR>I agree. I have checked a few tools and some follow the spec... sadly<BR>iTunes doesn't.<BR><BR><BR>Anyway, you can get the tag I was playing with from:<BR>http://limey.net/~fiji/t/id3v2.4_itunes-4.9.0.17.mp3<BR>As the name suggests, that is an ID3v2.4 tag written by the latest<BR>version of iTunes for Windows: 4.9.0.17.<BR><BR>The COMM frame is where the issue arises in that frame since it is the<BR>only one long enough to trigger the issue. But it happens with any<BR>frame larger than 127 bytes.<BR><BR>The frame in question looks like:<BR>Header (10 Bytes):<BR>43 4f 4d 4d Frame ID $xx xx xx xx (four characters)<BR>00 00 01 05 Size 4 *
 %0xxxxxxx<BR>00 00 Flags $xx xx<BR><BR>Payload (261 bytes):<BR>00 Text encoding $xx<BR>65 6e 67 Language $xx $xx $xx<BR>00 Short content <ENCODED string text>$00 (00)<BR>(256 bytes) The actual text <FULL string text encoded><BR><BR>This frame is followed by padding out to the end of the tag.<BR><BR><BR>The Frame ID is "COMM", and there are no special flags. I will get to<BR>the size in a minute. The text encoding is $00 which means ISO-8859-1<BR>(Latin1). There is no short content so you just see $00 indicating<BR>the end of the string (since ISO-8859-1 is not a wide char there is no<BR>second $00). Finally the actual text is 1234567890 repeated 25 times,<BR>followed by 12FOO for a total of 255 characters + 1 byte for the null<BR>at the end.<BR><BR>So Looking more closely at the size, the hex values:<BR>00 00 01 05<BR>Are the bit strings:<BR>00000000 00000000 00000001 00000101<BR>Which if syncsafe would drop the most significant bit from each byte:<BR>0000 00000000 00000000
 10000101<BR>Which when converted to base-10 is 134.<BR><BR>However if we don't unsynchronize the number it is 261. Which matches<BR>the actual frame payload size.<BR><BR>Hopefully this proves to you that iTunes is totally borked in the<BR>2.4 frame length handling.<BR><BR>-ben<BR><BR>---------------------------------------------------------------------<BR>To unsubscribe, e-mail: id3v2-unsubscribe@id3.org<BR>For additional commands, e-mail: id3v2-help@id3.org<BR><BR></BLOCKQUOTE></DIV><p>
                <hr size=1><font face="Arial" size="2">How much free photo storage do you get? Store your holiday snaps for FREE with Yahoo! Photos. <a href="http://us.rd.yahoo.com/mail/uk/taglines/default/photos/*http://uk.photos.yahoo.com/"><b>Get Yahoo! 
Photos</b></a></font>