<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Calibri","sans-serif";
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri","sans-serif";}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">I am using TagLib-1.8 to try to extract cover art from an ID3v2.3.0 mp3 file which contains the following at the beginning (displayed in hex dump output):<o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000000 49 44 33 03 00 00 00 04 4c 39 54 50 45 31 00 00 |ID3.....L9TPE1..|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000010 00 0a 00 00 00 42 6f 62 20 44 79 6c 61 6e 54 59 |.....Bob DylanTY|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000020 45 52 00 00 00 05 00 00 00 31 39 36 35 54 43 4f |ER.......1965TCO|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000030 4d 00 00 00 01 00 00 00 54 4f 50 45 00 00 00 01 |M.......TOPE....|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000040 00 00 00 54 43 4f 50 00 00 00 01 00 00 00 57 4f |...TCOP.......WO|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000050 41 52 00 00 00 00 00 00 54 45 4e 43 00 00 00 01 |AR......TENC....|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000060 40 00 00 41 50 49 43 00 01 25 4e 00 00 00 69 6d |@..APIC..%N...im|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000070 61 67 65 2f 6a 70 65 67 00 00 00 ff d8 ff e0 00 |age/jpeg........|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000080 10 4a 46 49 46 00 01 01 01 00 7e 00 7e 00 00 ff |.JFIF.....~.~...|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000090 e1 0c 3a 45 78 69 66 00 00 49 49 2a 00 08 00 00 |..:Exif..II*....|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">000000a0 00 02 00 46 47 03 00 01 00 00 00 00 00 00 00 12 |...FG...........|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">000000b0 50 04 00 01 00 00 00 01 00 00 00 26 00 00 00 03 |P..........&....|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">000000c0 00 28 01 03 00 01 00 00 00 02 00 00 00 01 02 04 |.(..............|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">000000d0 00 01 00 00 00 50 00 00 00 02 02 04 00 01 00 00 |.....P..........|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">000000e0 00 e2 0b 00 00 00 00 00 00 ff d8 ff e0 00 10 4a |...............J|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">000000f0 46 49 46 00 01 01 01 00 0f 00 0f 00 00 ff db 00 |FIF.............|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000100 43 00 08 06 06 07 06 05 08 07 07 07 09 09 08 0a |C...............|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000110 0c 14 0d 0c 0b 0b 0c 19 12 13 0f 14 1d 1a 1f 1e |................|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000120 1d 1a 1c 1c 20 24 2e 27 20 22 2c 23 1c 1c 28 37 |.... $.' ",#..(7|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000130 29 2c 30 31 34 34 34 1f 27 39 3d 38 32 3c 2e 33 |),01444.'9=82<.3|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000140 34 32 ff db 00 43 01 09 09 09 0c 0b 0c 18 0d 0d |42...C..........|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000150 18 32 21 1c 21 32 32 32 32 32 32 32 32 32 32 32 |.2!.!22222222222|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">00000160 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 |2222222222222222|<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">…<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Used the following TagLib framelist.cpp module (framelist program in examples sub-directory) to dump frames but the APIC frame is not picked up i.e. not displayed:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">int main(int argc, char *argv[])<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> // process the command line args<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> for(int i = 1; i < argc; i++) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> cout << "******************** \"" << argv[i] << "\"********************" << endl;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> MPEG::File f(argv[i]);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> ID3v2::Tag *id3v2tag = f.ID3v2Tag();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> if(id3v2tag) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> cout << "ID3v2."<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> << id3v2tag->header()->majorVersion()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> << "."<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> << id3v2tag->header()->revisionNumber()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> << ", "<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> << id3v2tag->header()->tagSize()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> << " bytes in tag"<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> << endl;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> ID3v2::FrameList::ConstIterator it = id3v2tag->frameList().begin();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> for(; it != id3v2tag->frameList().end(); it++)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> cout << (*it)->frameID() << " - \"" << (*it)->toString() << "\"" << endl;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> else<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> cout << "file does not have a valid id3v2 tag" << endl;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">…<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">If I change APIC’s picture type from 00 (Other) to 03 (front Cover), TagLib-1.8 still fails to extract the APIC frame information via the framelist program. However, I am able to see the cover art using MediaMonkey and Mp3tag.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Any suggestions?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Ken<o:p></o:p></p>
</div>
</body>
</html>