<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>One hand clapping &#187; mp3</title>
	<atom:link href="http://warped.org/blog/tag/mp3/feed/" rel="self" type="application/rss+xml" />
	<link>http://warped.org/blog</link>
	<description>Max Baker -- A Man with a Hand</description>
	<lastBuildDate>Mon, 10 May 2010 03:26:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>iTunes &#8211; Fixing ID3 tags in MP3&#8217;s &#8211; Take two</title>
		<link>http://warped.org/blog/2009/05/03/itunes-fixing-id3-tags-in-mp3s-take-two/</link>
		<comments>http://warped.org/blog/2009/05/03/itunes-fixing-id3-tags-in-mp3s-take-two/#comments</comments>
		<pubDate>Sun, 03 May 2009 20:15:18 +0000</pubDate>
		<dc:creator>max</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Coverflow]]></category>
		<category><![CDATA[id3]]></category>
		<category><![CDATA[iTunes]]></category>
		<category><![CDATA[mp3]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[TagLib]]></category>

		<guid isPermaLink="false">http://warped.org/blog/?p=62</guid>
		<description><![CDATA[Overview
In these last three posts [1] [2] [3] I tackled fixing my existing MP3&#8217;s to make them more iTunes friendly.   I did it with three Perl scripts using two different ID3 libraries : Audio::TabLib which is a Perl wrapper to KDE&#8217;s TagLib,  and MP3::Tag.
I&#8217;ve since given up on MP3::Tag.  Although updated [...]]]></description>
			<content:encoded><![CDATA[<h1>Overview</h1>
<p>In these last three posts <a href="http://warped.org/blog/2009/04/29/itunes-embedding-folderjpg-into-your-mp3s-for-cover-flow/">[1]</a> <a href="http://warped.org/blog/2009/05/02/itunes-setting-the-compilation-flag-on-mp3s-using-perl/">[2]</a> <a href="http://warped.org/blog/2009/05/02/itunes-copying-id3-tags-in-your-mp3s-from-id3v1-to-id3v2-in-perl/">[3]</a> I tackled fixing my existing MP3&#8217;s to make them more iTunes friendly.   I did it with three Perl scripts using two different ID3 libraries : <a HREF="http://search.cpan.org/~dongxu/Audio-TagLib-1.43/">Audio::TabLib</a> which is a Perl wrapper to KDE&#8217;s <a HREF="http://developer.kde.org/~wheeler/taglib.html">TagLib</a>,  and <a HREF="http://search.cpan.org/~ilyaz/MP3-Tag-1.00/">MP3::Tag</a>.</p>
<p>I&#8217;ve since given up on MP3::Tag.  Although updated recently, it still does not support ID3v2 2.4, which, unfortunately is the default in iTunes versions 7 and 8.   So I&#8217;ve combined all three scripts into one script that only uses Audio::TagLib.    One bonus of this, is that TagLib is a fast C++ library, and so the script runs a lot faster than a Pure Perl based method.   One batch run on 160GB of MP3&#8217;s only took a couple minutes.</p>
<h1>The Script</h1>
<p>The following script does all three of the functions from my last posts : </p>
<ol>
<li>Add Folder.jpg (or another image) to the MP3 for Cover Art</li>
<li>Convert version 1 tags (ID3v1) to version 2 (ID3v2)</li>
<li>Set the iTunes Compilation Flag (ICMP)</li>
</ol>
<p>You can download the script here : <a href="http://warped.org/linux/mp3_fix_tag">http://warped.org/linux/mp3_fix_tag</a>  or copy paste from below :</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl -w</span>
<span style="color: #666666; font-style: italic;"># mp3_tag_fix</span>
<span style="color: #666666; font-style: italic;"># Max Baker max@warped.org</span>
<span style="color: #666666; font-style: italic;"># 5/3/09</span>
&nbsp;
<span style="color: #0000ff;">$VERSION</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">1.1</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">use</span> File<span style="color: #339933;">::</span><span style="color: #006600;">Glob</span> <span style="color: #000066;">qw</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">:</span>globally <span style="color: #339933;">:</span><span style="color: #000066;">glob</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> Getopt<span style="color: #339933;">::</span><span style="color: #006600;">Long</span><span style="color: #339933;">;</span>
GetOptions <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">\%Args</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;h|help&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;f|front=s&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'b|back=s'</span><span style="color: #339933;">,</span>
            <span style="color: #ff0000;">'c|covers|addcovers'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'v1tov2'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'comp|compilation'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #0000ff;">$Cover_Front</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$Args</span><span style="color: #009900;">&#123;</span>f<span style="color: #009900;">&#125;</span> <span style="color: #339933;">||</span> <span style="color: #ff0000;">&quot;Folder.jpg&quot;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$Cover_Back</span>  <span style="color: #339933;">=</span> <span style="color: #0000ff;">$Args</span><span style="color: #009900;">&#123;</span>b<span style="color: #009900;">&#125;</span> <span style="color: #339933;">||</span> <span style="color: #ff0000;">&quot;Folder_back.jpg&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066;">die</span> <span style="color: #0000ff;">&amp;usage</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span> <span style="color: #000066;">scalar</span> <span style="color: #0000ff;">@ARGV</span> <span style="color: #b1b100;">or</span> <span style="color: #0000ff;">$Args</span><span style="color: #009900;">&#123;</span>h<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">die</span> <span style="color: #0000ff;">&amp;usage</span> <span style="color: #b1b100;">unless</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$Args</span><span style="color: #009900;">&#123;</span>c<span style="color: #009900;">&#125;</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$Args</span><span style="color: #009900;">&#123;</span>v1tov2<span style="color: #009900;">&#125;</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$Args</span><span style="color: #009900;">&#123;</span>comp<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$f</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@ARGV</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>d <span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        recurse_dir<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">next</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    go<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066;">exit</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> go <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$f</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Only work on files that end in .mp3</span>
    <span style="color: #000066;">return</span> <span style="color: #b1b100;">if</span> <span style="color: #0000ff;">$f</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'.'</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #b1b100;">if</span> <span style="color: #0000ff;">$f</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'..'</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #b1b100;">unless</span> <span style="color: #339933;">-</span>r <span style="color: #0000ff;">$f</span> <span style="color: #b1b100;">and</span> <span style="color: #0000ff;">$f</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/\.mp3$/i</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;  $f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$mp3</span> <span style="color: #339933;">=</span> Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">MPEG</span><span style="color: #339933;">::</span><span style="color: #006600;">File</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$id3v1</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">ID3v1Tag</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$id3v2</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">ID3v2Tag</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Cover Art</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$Args</span><span style="color: #009900;">&#123;</span>c<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">#print &quot;    --&gt; Adding Cover Art\n&quot;;</span>
        add_image<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$f</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;$root/$Cover_Front&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;FrontCover&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;Cover (front)&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">if</span> <span style="color: #339933;">-</span>r <span style="color: #ff0000;">&quot;$root/$Cover_Front&quot;</span><span style="color: #339933;">;</span>
        add_image<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$f</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;$root/$Cover_Back&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;BackCover&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Cover (back)&quot;</span><span style="color: #009900;">&#41;</span>  <span style="color: #b1b100;">if</span> <span style="color: #339933;">-</span>r <span style="color: #ff0000;">&quot;$root/$Cover_Back&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Copy v1 tags to v2</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$Args</span><span style="color: #009900;">&#123;</span>v1tov2<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;    --&gt; Copying ID3v1 data to ID3v2<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setArtist</span><span style="color: #009900;">&#40;</span>Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">String</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">artist</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">if</span> nb<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">artist</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setAlbum</span><span style="color: #009900;">&#40;</span>Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">String</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">album</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>  <span style="color: #b1b100;">if</span> nb<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">album</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setTitle</span><span style="color: #009900;">&#40;</span>Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">String</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">title</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>  <span style="color: #b1b100;">if</span> nb<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setYear</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">year</span><span style="color: #009900;">&#41;</span>                                <span style="color: #b1b100;">if</span> nb<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">year</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setTrack</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">track</span><span style="color: #009900;">&#41;</span>                              <span style="color: #b1b100;">if</span> nb<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">track</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setGenre</span><span style="color: #009900;">&#40;</span>Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">String</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">genre</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>  <span style="color: #b1b100;">if</span> nb<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">genre</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Add/Replace TCMP - Compilation Tag</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$Args</span><span style="color: #009900;">&#123;</span>comp<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;    --&gt; Setting Compilation Flag<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$tcmp</span> <span style="color: #339933;">=</span> Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">ByteVector</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;TCMP&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">removeFrames</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$tcmp</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">#my $f = Audio::TagLib::ID3v2::TextIdentificationFrame-&gt;new($tcmp, &quot;UTF8&quot;);</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$f</span> <span style="color: #339933;">=</span> Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">ID3v2</span><span style="color: #339933;">::</span><span style="color: #006600;">TextIdentificationFrame</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$tcmp</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$f</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setText</span><span style="color: #009900;">&#40;</span>Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">String</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">addFrame</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">save</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> recurse_dir <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$root</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Entering $root<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># bsd_glob handles spaces in file names/paths</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@files</span> <span style="color: #339933;">=</span> bsd_glob<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;$root/*&quot;</span><span style="color: #339933;">,</span>GLOB_QUOTE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$f</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>d <span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            recurse_dir<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">next</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        go<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># not blank or undef</span>
<span style="color: #000000; font-weight: bold;">sub</span> nb <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$string</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">unless</span> <span style="color: #000066;">defined</span> <span style="color: #0000ff;">$string</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">if</span> <span style="color: #0000ff;">$string</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/^\s*$/</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> add_image <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$f</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$img</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$type</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$desc</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;    --&gt; add_image($type) $img -&gt; $f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span>PICFILE<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;&lt; $img&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;Can't open image $img. $!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$imgdata</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$filesize</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #000066;">s</span> PICFILE<span style="color: #339933;">;</span>
    <span style="color: #000066;">binmode</span><span style="color: #009900;">&#40;</span>PICFILE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">read</span><span style="color: #009900;">&#40;</span>PICFILE<span style="color: #339933;">,</span> <span style="color: #0000ff;">$imgdata</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$filesize</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">close</span><span style="color: #009900;">&#40;</span>PICFILE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$imgbv</span> <span style="color: #339933;">=</span> Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">ByteVector</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$imgbv</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setData</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$imgdata</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$filesize</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$bv</span> <span style="color: #339933;">=</span> Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">ByteVector</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;APIC&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$field</span> <span style="color: #339933;">=</span> Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">ID3v2</span><span style="color: #339933;">::</span><span style="color: #006600;">AttachedPictureFrame</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$bv</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;UTF8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$field</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setPicture</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$imgbv</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$field</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setTextEncoding</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;UTF8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$field</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setMimeType</span><span style="color: #009900;">&#40;</span>Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">String</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;image/jpeg&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$field</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setType</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$type</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$field</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setDescription</span><span style="color: #009900;">&#40;</span>Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">String</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$desc</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">addFrame</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$field</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> usage <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">return</span> <span style="color: #339933;">&lt;</span> <span style="color: #339933;">&lt;</span> <span style="color: #ff0000;">&quot;end_usage&quot;</span><span style="color: #339933;">;</span>
USAGE<span style="color: #339933;">:</span> <span style="color: #0000ff;">$0</span> <span style="color: #009999;">&lt;dir&gt;</span> <span style="color: #009999;">&lt;cmd&gt;</span> <span style="color: #009900;">&#91;</span>options<span style="color: #009900;">&#93;</span>
&nbsp;
mp3_tag_fix Version <span style="color: #0000ff;">$VERSION</span>
&nbsp;
This script is used to fix up MP3 files <span style="color: #b1b100;">for</span> <span style="color: #000000; font-weight: bold;">use</span> in iTunes<span style="color: #339933;">.</span>
&nbsp;
It can <span style="color: #b1b100;">do</span> the following things <span style="color: #339933;">:</span>
    <span style="color: #339933;">*</span> Recursively go through a directory <span style="color: #b1b100;">and</span> embed album art 
    <span style="color: #339933;">*</span> Copy ID3v1 tag data into ID3v2
&nbsp;
<span style="color: #009999;">&lt;commands&gt;</span>
    <span style="color: #339933;">-</span>c <span style="color: #339933;">|</span> <span style="color: #339933;">--</span>addcovers <span style="color: #339933;">-</span> Embed <span style="color: #0000ff;">$Cover_Front</span> <span style="color: #339933;">/</span> <span style="color: #0000ff;">$Cover_Back</span> into the MP3
    <span style="color: #339933;">--</span>v1tov2         <span style="color: #339933;">-</span> Copy ID3v1 Tags into ID3v2 Tag
    <span style="color: #339933;">--</span>comp           <span style="color: #339933;">-</span> Set iTunes Compilation flag <span style="color: #009900;">&#40;</span>TCMP<span style="color: #009900;">&#41;</span>
&nbsp;
<span style="color: #009900;">&#91;</span>OPTIONS<span style="color: #009900;">&#93;</span>
    <span style="color: #339933;">-</span>f <span style="color: #339933;">-</span> The name of the image to look <span style="color: #b1b100;">for</span> in <span style="color: #000066;">each</span> dir to embed front<span style="color: #339933;">-</span>covers
    <span style="color: #339933;">-</span>b <span style="color: #339933;">-</span> The name of the image to look <span style="color: #b1b100;">for</span> in <span style="color: #000066;">each</span> dir to embed back<span style="color: #339933;">-</span>covers
&nbsp;
Max Baker max<span style="color: #0000ff;">\@warped</span><span style="color: #339933;">.</span>org <span style="color: #cc66cc;">5</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">2009</span>
end_usage
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&lt;/</span>commands<span style="color: #339933;">&gt;&lt;/</span>cmd<span style="color: #339933;">&gt;</span></pre></div></div>

<h1>Prerequisites</h1>
<p>See the Prerequisites section on <a href="http://warped.org/blog/2009/04/29/itunes-embedding-folderjpg-into-your-mp3s-for-cover-flow/">this post</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://warped.org/blog/2009/05/03/itunes-fixing-id3-tags-in-mp3s-take-two/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>iTunes &#8211; Copying ID3 Tags in your MP3s from ID3v1 to ID3v2 in Perl</title>
		<link>http://warped.org/blog/2009/05/02/itunes-copying-id3-tags-in-your-mp3s-from-id3v1-to-id3v2-in-perl/</link>
		<comments>http://warped.org/blog/2009/05/02/itunes-copying-id3-tags-in-your-mp3s-from-id3v1-to-id3v2-in-perl/#comments</comments>
		<pubDate>Sun, 03 May 2009 00:24:42 +0000</pubDate>
		<dc:creator>max</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Coverflow]]></category>
		<category><![CDATA[id3]]></category>
		<category><![CDATA[iTunes]]></category>
		<category><![CDATA[mp3]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://warped.org/blog/?p=56</guid>
		<description><![CDATA[Update
I&#8217;ve consolidated this script into a new one. GO HERE : http://warped.org/blog/2009/05/03/itunes-fixing-id3-tags-in-mp3s-take-two/
Overview
MP3&#8217;s have been around almost 15 years now.  In the beginning there was a slot in the top of the MP3 file where you could hold the Artist, Album Name, Title, Track Number, etc.   This is called the ID3 tag, and [...]]]></description>
			<content:encoded><![CDATA[<h1>Update</h1>
<p>I&#8217;ve consolidated this script into a new one. GO HERE : <a href="http://warped.org/blog/2009/05/03/itunes-fixing-id3-tags-in-mp3s-take-two/">http://warped.org/blog/2009/05/03/itunes-fixing-id3-tags-in-mp3s-take-two/</a></p>
<h1>Overview</h1>
<p>MP3&#8217;s have been around almost 15 years now.  In the beginning there was a slot in the top of the MP3 file where you could hold the Artist, Album Name, Title, Track Number, etc.   This is called the ID3 tag, and is part of every MP3 file.     Fast forward some years and the ID3 standard has changed a number of times from V1 to V2 to V2.2, V2.4, etc.</p>
<p>iTunes sucks.  iTunes will only use the ID3v2 information in your file, even though the other info is present and perfectly usable.  Thanks Apple.  FAIL.</p>
<h1>The Script</h1>
<p>The following script is based on this one by Bob of the UK : <a href="http://rnewson.blogspot.com/2005/10/itunes-artwork-fetcher.html">http://rnewson.blogspot.com/2005/10/itunes-artwork-fetcher.html</a></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl -w</span>
<span style="color: #666666; font-style: italic;"># Based on http://rnewson.blogspot.com/2005/10/itunes-artwork-fetcher.html</span>
<span style="color: #000000; font-weight: bold;">use</span> MP3<span style="color: #339933;">::</span><span style="color: #006600;">Tag</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Bug that you may need to patch for : https://rt.cpan.org/Ticket/Display.html?id=45647</span>
&nbsp;
&nbsp;
<span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$file</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@ARGV</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">next</span> <span style="color: #b1b100;">unless</span> <span style="color: #339933;">-</span>r <span style="color: #0000ff;">$file</span><span style="color: #339933;">;</span>
    id3v1_to_id3v2<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> id3v1_to_id3v2 <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$file</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;$file<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$mp3</span> <span style="color: #339933;">=</span> MP3<span style="color: #339933;">::</span><span style="color: #006600;">Tag</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">get_tags</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">config</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'write_v24'</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$id3v1</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ID3v1<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$id3v2</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ID3v2<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$id3v2</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new_tag</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;ID3v2&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">unless</span> <span style="color: #000066;">defined</span> <span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
    <span style="color: #666666; font-style: italic;"># === TIT2 (Title/songname/content description): Sordid</span>
    <span style="color: #666666; font-style: italic;"># === TPE1 (Lead performer(s)/Soloist(s)): Amon Tobin</span>
    <span style="color: #666666; font-style: italic;"># === TALB (Album/Movie/Show title): Funkungfusion: Ninja Cuts, Vol</span>
    <span style="color: #666666; font-style: italic;"># === TYER (Year): 1998</span>
    <span style="color: #666666; font-style: italic;"># === TRCK (Track number/Position in set): 2</span>
&nbsp;
    copy<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'TPE1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">artist</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    copy<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'TALB'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">album</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    copy<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'TCON'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">genre</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    copy<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'TRCK'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">track</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    copy<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'TIT2'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">song</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    copy<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'TYER'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">year</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    copy<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'COMM'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'ENG'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">comment</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">comment</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">if</span> <span style="color: #0000ff;">$id3v1</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">comment</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">write_tag</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">close</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> copy <span style="color: #009900;">&#123;</span>
   <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$frame</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">@data</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$value</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #b1b100;">unless</span> <span style="color: #000066;">defined</span> <span style="color: #0000ff;">$value</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #b1b100;">unless</span> <span style="color: #0000ff;">$value</span> <span style="color: #339933;">!~</span> <span style="color: #009966; font-style: italic;">/^\s*$/</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$frameids</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">get_frame_ids</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066;">exists</span> <span style="color: #0000ff;">$$frameids</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$frame</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;  Changing $frame to @data<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">change_frame</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$frame</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">@data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;  Adding $frame = @data<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">add_frame</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$frame</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">@data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h1>Prerequisites</h1>
<p>This script uses <a href="http://search.cpan.org/~ilyaz/MP3-Tag-1.00/">MP3::Tag</a>.   I had to patch it to work around a bug.  See <a href="http://warped.org/blog/2009/05/02/itunes-setting-the-compilation-flag-on-mp3s-using-perl/">my post on setting the compilation tag</a> for details.</p>
]]></content:encoded>
			<wfw:commentRss>http://warped.org/blog/2009/05/02/itunes-copying-id3-tags-in-your-mp3s-from-id3v1-to-id3v2-in-perl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iTunes &#8211; Setting the Compilation Flag on MP3&#8217;s using Perl</title>
		<link>http://warped.org/blog/2009/05/02/itunes-setting-the-compilation-flag-on-mp3s-using-perl/</link>
		<comments>http://warped.org/blog/2009/05/02/itunes-setting-the-compilation-flag-on-mp3s-using-perl/#comments</comments>
		<pubDate>Sun, 03 May 2009 00:10:13 +0000</pubDate>
		<dc:creator>max</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[compilation]]></category>
		<category><![CDATA[Coverflow]]></category>
		<category><![CDATA[id3]]></category>
		<category><![CDATA[iTunes]]></category>
		<category><![CDATA[mp3]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://warped.org/blog/?p=50</guid>
		<description><![CDATA[Update
I&#8217;ve consolidated this script into a new one. GO HERE : http://warped.org/blog/2009/05/03/itunes-fixing-id3-tags-in-mp3s-take-two/
Overview
If you have an album that&#8217;s a compilation or DJ mix, then Cover Flow gets confused and does not group all the tracks together into an album because there is a different &#8220;Artist&#8221; for each track.
iTunes gets around this by setting it&#8217;s own custom [...]]]></description>
			<content:encoded><![CDATA[<h1>Update</h1>
<p>I&#8217;ve consolidated this script into a new one. GO HERE : <a href="http://warped.org/blog/2009/05/03/itunes-fixing-id3-tags-in-mp3s-take-two/">http://warped.org/blog/2009/05/03/itunes-fixing-id3-tags-in-mp3s-take-two/</a></p>
<h1>Overview</h1>
<p>If you have an album that&#8217;s a compilation or DJ mix, then Cover Flow gets confused and does not group all the tracks together into an album because there is a different &#8220;Artist&#8221; for each track.</p>
<p>iTunes gets around this by setting it&#8217;s own custom flag in the ID3 tag : the TCMP frame in ID3v2 to be specific.</p>
<h1>The Script</h1>
<p>The following script uses <a href="http://search.cpan.org/~ilyaz/MP3-Tag-1.00/">MP3::Tag</a> to set the TCMP flag on all the MP3&#8217;s in the current directory, or the files specified on the command line.</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl -w</span>
<span style="color: #666666; font-style: italic;"># mp3_make_comp</span>
<span style="color: #666666; font-style: italic;"># Max Baker</span>
<span style="color: #666666; font-style: italic;"># 4/29/09</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># This script will set the I-Tunes Compilation Tag (TCMP)</span>
<span style="color: #666666; font-style: italic;"># on Files passed to it.   If no files are passed, it works on *.mp3 in the current directory.</span>
<span style="color: #666666; font-style: italic;">#</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">use</span> MP3<span style="color: #339933;">::</span><span style="color: #006600;">Tag</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">unless</span> <span style="color: #009900;">&#40;</span><span style="color: #000066;">scalar</span> <span style="color: #0000ff;">@ARGV</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">@ARGV</span> <span style="color: #339933;">=</span> <span style="color: #000066;">glob</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;*.mp3&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$f</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@ARGV</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">next</span> <span style="color: #b1b100;">unless</span> <span style="color: #339933;">-</span>r <span style="color: #0000ff;">$f</span><span style="color: #339933;">;</span>
    add_comp<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> add_comp <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$file</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$mp3</span> <span style="color: #339933;">=</span> MP3<span style="color: #339933;">::</span><span style="color: #006600;">Tag</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span>new<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span>config<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'write_v24'</span> <span style="color: #339933;">=</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># scan file for existing tags</span>
    <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span>get_tags<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">unless</span> <span style="color: #009900;">&#40;</span><span style="color: #000066;">exists</span> <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span><span style="color: #009900;">&#123;</span>ID3v2<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span>new_tag<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;ID3v2&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># check for existing tag</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$info</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$name</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">@rest</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span><span style="color: #009900;">&#123;</span>ID3v2<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span>get_frame<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;TCMP&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$info</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;$file : TCMP=$info already set.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">return</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>   
&nbsp;
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;$file : Setting TCMP=1<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span><span style="color: #009900;">&#123;</span>ID3v2<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span>add_frame<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;TCMP&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;$file : Adding TCMP frame failed.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span><span style="color: #009900;">&#123;</span>ID3v2<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span>write_tag<span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span>close<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h1>Prerequisites</h1>
<p>I managed to find a bug in MP3::Tag, so you may have to do the patch found <a href="http://rt.cpan.org/Public/Bug/Display.html?id=45647">here</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">$data</span> <span style="color: #339933;">=</span> <span style="color: #000066;">pack</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;N&quot;</span><span style="color: #339933;">,</span> <span style="color: #000066;">length</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> compress <span style="color: #0000ff;">$data</span>
<span style="color: #b1b100;">unless</span> <span style="color: #0000ff;">$frame</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span>flags<span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span><span style="color: #009900;">&#123;</span>unchanged<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Becomes:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #0000ff;">$data</span> <span style="color: #339933;">=</span> <span style="color: #000066;">pack</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;N&quot;</span><span style="color: #339933;">,</span> <span style="color: #000066;">length</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> compress <span style="color: #0000ff;">$data</span>
<span style="color: #b1b100;">unless</span> <span style="color: #0000ff;">$frame</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span><span style="color: #009900;">&#123;</span>flags<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span><span style="color: #009900;">&#123;</span>unchanged<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>On line 585 of <a href="http://cpansearch.perl.org/src/ILYAZ/MP3-Tag-1.00/lib/MP3/Tag/ID3v2.pm">ID3v2.pm</a>.</p>
<p>Next Up : Copying ID3v1 tags to ID3v2 tags.</p>
]]></content:encoded>
			<wfw:commentRss>http://warped.org/blog/2009/05/02/itunes-setting-the-compilation-flag-on-mp3s-using-perl/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ITunes &#8211; Embedding Folder.jpg into your MP3s for Cover Flow</title>
		<link>http://warped.org/blog/2009/04/29/itunes-embedding-folderjpg-into-your-mp3s-for-cover-flow/</link>
		<comments>http://warped.org/blog/2009/04/29/itunes-embedding-folderjpg-into-your-mp3s-for-cover-flow/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 05:32:29 +0000</pubDate>
		<dc:creator>max</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Coverflow]]></category>
		<category><![CDATA[id3]]></category>
		<category><![CDATA[iTunes]]></category>
		<category><![CDATA[mp3]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://warped.org/blog/?p=44</guid>
		<description><![CDATA[Update
I&#8217;ve consolidated this script into a new one. GO HERE : http://warped.org/blog/2009/05/03/itunes-fixing-id3-tags-in-mp3s-take-two/
Overview
Let&#8217;s say that you have a well organized MP3 collection that you previously used with something like nAMP / Apache::MP3 that already has album art in each directory.  Or better yet, you have a friend who does!  
You may have collected album [...]]]></description>
			<content:encoded><![CDATA[<h1>Update</h1>
<p>I&#8217;ve consolidated this script into a new one. GO HERE : <a href="http://warped.org/blog/2009/05/03/itunes-fixing-id3-tags-in-mp3s-take-two/">http://warped.org/blog/2009/05/03/itunes-fixing-id3-tags-in-mp3s-take-two/</a></p>
<h1>Overview</h1>
<p>Let&#8217;s say that you have a well organized MP3 collection that you previously used with something like nAMP / Apache::MP3 that already has album art in each directory.  Or better yet, you have a friend who does!  </p>
<p>You may have collected album art for every album that you have, but good old Itunes will not recognize that.  It will only find album art based on the ID3v2 tags in the files, and if the album is available for purchase from Apple. </p>
<p>There are plenty of programs you can download to help you manually add album art to the MP3&#8217;s.  But if you already have done this,  it sucks to have to do it again.</p>
<h1>The Script</h1>
<p>This script in Perl will embed a Folder.jpg and a Folder_back.jpg to files for use in Itunes.  It&#8217;s partially based on another script I saw.  As soon as I found that again, I&#8217;ll add the attribution back in here.</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl -w</span>
<span style="color: #666666; font-style: italic;"># mp3_add_art</span>
<span style="color: #666666; font-style: italic;"># Max Baker &lt;max @warped.org&gt;</span>
<span style="color: #666666; font-style: italic;"># 4/5/09</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">use</span> File<span style="color: #339933;">::</span><span style="color: #006600;">Glob</span> <span style="color: #000066;">qw</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">:</span>globally <span style="color: #339933;">:</span><span style="color: #000066;">glob</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> Getopt<span style="color: #339933;">::</span><span style="color: #006600;">Long</span><span style="color: #339933;">;</span>
GetOptions <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">\%Args</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;h|help&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;f|front=s&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'b|back=s'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #0000ff;">$Cover_Front</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$Args</span><span style="color: #009900;">&#123;</span>f<span style="color: #009900;">&#125;</span> <span style="color: #339933;">||</span> <span style="color: #ff0000;">&quot;Folder.jpg&quot;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$Cover_Back</span>  <span style="color: #339933;">=</span> <span style="color: #0000ff;">$Args</span><span style="color: #009900;">&#123;</span>b<span style="color: #009900;">&#125;</span> <span style="color: #339933;">||</span> <span style="color: #ff0000;">&quot;Folder_back.jpg&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066;">die</span> <span style="color: #0000ff;">&amp;usage</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span> <span style="color: #000066;">scalar</span> <span style="color: #0000ff;">@ARGV</span> <span style="color: #b1b100;">or</span> <span style="color: #0000ff;">$Args</span><span style="color: #009900;">&#123;</span>h<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$d</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@ARGV</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    recurse_dir<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$d</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066;">exit</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> recurse_dir <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$root</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Entering $root<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># bsd_glob handles spaces in file names/paths</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@files</span> <span style="color: #339933;">=</span> bsd_glob<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;$root/*&quot;</span><span style="color: #339933;">,</span>GLOB_QUOTE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$f</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@files</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">#print &quot;'$f'\n&quot;;</span>
        <span style="color: #b1b100;">next</span> <span style="color: #b1b100;">if</span> <span style="color: #0000ff;">$f</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'.'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">next</span> <span style="color: #b1b100;">if</span> <span style="color: #0000ff;">$f</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'..'</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>d <span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            recurse_dir<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">next</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>r <span style="color: #0000ff;">$f</span> <span style="color: #b1b100;">and</span> <span style="color: #0000ff;">$f</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/\.mp3$/</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            add_image<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;$root/$Cover_Front&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;FrontCover&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;Cover (front)&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">if</span> <span style="color: #339933;">-</span>r <span style="color: #ff0000;">&quot;$root/$Cover_Front&quot;</span><span style="color: #339933;">;</span>
            add_image<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;$root/$Cover_Back&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;BackCover&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Cover (back)&quot;</span><span style="color: #009900;">&#41;</span>  <span style="color: #b1b100;">if</span> <span style="color: #339933;">-</span>r <span style="color: #ff0000;">&quot;$root/$Cover_Back&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">sub</span> add_image <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$img</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$type</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$desc</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;add_image($type) $img -&gt; $f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$mp3</span> <span style="color: #339933;">=</span> Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">MPEG</span><span style="color: #339933;">::</span><span style="color: #006600;">File</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$id3v2</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">ID3v2Tag</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span>PICFILE<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;&lt; $img&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;Can't open image $img. $!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$imgdata</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$filesize</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #000066;">s</span> PICFILE<span style="color: #339933;">;</span>
    <span style="color: #000066;">binmode</span><span style="color: #009900;">&#40;</span>PICFILE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">read</span><span style="color: #009900;">&#40;</span>PICFILE<span style="color: #339933;">,</span> <span style="color: #0000ff;">$imgdata</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$filesize</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">close</span><span style="color: #009900;">&#40;</span>PICFILE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$imgbv</span> <span style="color: #339933;">=</span> Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">ByteVector</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$imgbv</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setData</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$imgdata</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$filesize</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$bv</span> <span style="color: #339933;">=</span> Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">ByteVector</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;APIC&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$field</span> <span style="color: #339933;">=</span> Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">ID3v2</span><span style="color: #339933;">::</span><span style="color: #006600;">AttachedPictureFrame</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$bv</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;UTF8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$field</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setPicture</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$imgbv</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$field</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setTextEncoding</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;UTF8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$field</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setMimeType</span><span style="color: #009900;">&#40;</span>Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">String</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;image/jpeg&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$field</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setType</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$type</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$field</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setDescription</span><span style="color: #009900;">&#40;</span>Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">::</span><span style="color: #006600;">String</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$desc</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$id3v2</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">addFrame</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$field</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$mp3</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">save</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> usage <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">return</span> <span style="color: #339933;">&lt;</span> <span style="color: #339933;">&lt;</span> <span style="color: #ff0000;">&quot;end_usage&quot;</span><span style="color: #339933;">;</span>
&nbsp;
mp3addart <span style="color: #009999;">&lt;dir&gt;</span>
&nbsp;
Max Baker <span style="color: #339933;">&lt;/</span>max<span style="color: #339933;">&gt;&lt;</span>max <span style="color: #0000ff;">\@warped</span><span style="color: #339933;">.</span>org<span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">6</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">2009</span>
&nbsp;
This script recursively goes through a directory <span style="color: #b1b100;">and</span> imbeds album
art into MP3 Files<span style="color: #339933;">.</span> It uses taglib <span style="color: #b1b100;">and</span> Audio<span style="color: #339933;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;">.</span>
&nbsp;
USAGE<span style="color: #339933;">:</span> <span style="color: #0000ff;">$0</span> <span style="color: #009999;">&lt;dir&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #339933;">-</span>f <span style="color: #0000ff;">$Cover_Front</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#91;</span><span style="color: #339933;">-</span>b <span style="color: #0000ff;">$Cover_Back</span><span style="color: #009900;">&#93;</span>
&nbsp;
    <span style="color: #339933;">-</span>f <span style="color: #339933;">-</span> The name of the image to look <span style="color: #b1b100;">for</span> in <span style="color: #000066;">each</span> dir to embed front<span style="color: #339933;">-</span>covers
    <span style="color: #339933;">-</span>b <span style="color: #339933;">-</span> The name of the image to look <span style="color: #b1b100;">for</span> in <span style="color: #000066;">each</span> dir to embed back<span style="color: #339933;">-</span>covers
&nbsp;
&nbsp;
end_usage
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&lt;/</span>dir<span style="color: #339933;">&gt;&lt;/</span>max<span style="color: #339933;">&gt;</span></pre></div></div>

<h2>Prerequisites</h2>
<p>You&#8217;ll notice in the prerequisites a Perl module you can get off of CPAN : <a href="http://search.cpan.org/~dongxu/Audio-TagLib-1.43/lib/Audio/TagLib.pm">Audio::Taglib</a>.<br />
For which you&#8217;ll need the <a href="http://developer.kde.org/~wheeler/taglib.html">TagLib library</a>.</p>
<p>You should install the TagLib library using packages. For me using Fedora/Mythdora 10 I used this command :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">yum <span style="color: #c20cb9; font-weight: bold;">install</span> taglib-devel</pre></div></div>

<p>The only problem is that TagLib has moved on to version 1.5 and Audio::TagLib hasn&#8217;t quite caught up yet.  So you need to modify one line in Audio::TagLib before installing it.  The file you are editing is<br />
<a href="http://cpansearch.perl.org/src/DONGXU/Audio-TagLib-1.43/Makefile.PL">Makefile.PL</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">BEGIN</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;"># a simple work around to perform the neccessary pre-check</span>
    <span style="color: #666666; font-style: italic;"># instead of overloading subs of MakeMaker or other wrapper</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;ONLY support TagLib version 1.4.*<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">require</span> Carp<span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;"># FIXME</span>
	<span style="color: #666666; font-style: italic;"># openned for FreeBSD, OS X (darwin) and Cygwin</span>
    Carp<span style="color: #339933;">::</span><span style="color: #006600;">croak</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;$^O is not supported currently&quot;</span><span style="color: #009900;">&#41;</span> 
		<span style="color: #b1b100;">unless</span> <span style="color: #0000ff;">$^O</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'linux'</span> <span style="color: #b1b100;">or</span> <span style="color: #0000ff;">$^O</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'freebsd'</span> <span style="color: #b1b100;">or</span> <span style="color: #0000ff;">$^O</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'darwin'</span> <span style="color: #b1b100;">or</span> 
		    <span style="color: #0000ff;">$^O</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'cygwin'</span><span style="color: #339933;">;</span>
	Carp<span style="color: #339933;">::</span><span style="color: #006600;">croak</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Please install taglib C++ package first&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">unless</span> 
		<span style="color: #000066;">system</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;taglib-config --version&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">our</span> <span style="color: #0000ff;">$libver</span> <span style="color: #339933;">=</span> <span style="color: #000066;">qx</span><span style="color: #009900;">&#40;</span>taglib<span style="color: #339933;">-</span>config <span style="color: #339933;">--</span>version<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">chomp</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$libver</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Carp<span style="color: #339933;">::</span><span style="color: #006600;">croak</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Please install taglib ver 1.4.*&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">unless</span> 
		<span style="color: #0000ff;">$libver</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">m/^1\.4/io</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">our</span> <span style="color: #0000ff;">$libs</span> <span style="color: #339933;">=</span> <span style="color: #000066;">qx</span><span style="color: #009900;">&#40;</span>taglib<span style="color: #339933;">-</span>config <span style="color: #339933;">--</span>libs<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">our</span> <span style="color: #0000ff;">$inc</span>  <span style="color: #339933;">=</span> <span style="color: #ff0000;">' -I/usr/include -I./include -I. '</span><span style="color: #339933;">.</span> <span style="color: #000066;">qx</span><span style="color: #009900;">&#40;</span>taglib<span style="color: #339933;">-</span>config <span style="color: #339933;">--</span>cflags<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>BECOMES :</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">BEGIN</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;"># a simple work around to perform the neccessary pre-check</span>
    <span style="color: #666666; font-style: italic;"># instead of overloading subs of MakeMaker or other wrapper</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;ONLY support TagLib version 1.4.*<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">require</span> Carp<span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;"># FIXME</span>
	<span style="color: #666666; font-style: italic;"># openned for FreeBSD, OS X (darwin) and Cygwin</span>
    Carp<span style="color: #339933;">::</span><span style="color: #006600;">croak</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;$^O is not supported currently&quot;</span><span style="color: #009900;">&#41;</span> 
		<span style="color: #b1b100;">unless</span> <span style="color: #0000ff;">$^O</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'linux'</span> <span style="color: #b1b100;">or</span> <span style="color: #0000ff;">$^O</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'freebsd'</span> <span style="color: #b1b100;">or</span> <span style="color: #0000ff;">$^O</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'darwin'</span> <span style="color: #b1b100;">or</span> 
		    <span style="color: #0000ff;">$^O</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'cygwin'</span><span style="color: #339933;">;</span>
	Carp<span style="color: #339933;">::</span><span style="color: #006600;">croak</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Please install taglib C++ package first&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">unless</span> 
		<span style="color: #000066;">system</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;taglib-config --version&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">our</span> <span style="color: #0000ff;">$libver</span> <span style="color: #339933;">=</span> <span style="color: #000066;">qx</span><span style="color: #009900;">&#40;</span>taglib<span style="color: #339933;">-</span>config <span style="color: #339933;">--</span>version<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">chomp</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$libver</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Carp<span style="color: #339933;">::</span><span style="color: #006600;">croak</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Please install taglib ver &gt;1.4.*&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">unless</span> 
		<span style="color: #0000ff;">$libver</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">m/^1\.[45]/io</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">our</span> <span style="color: #0000ff;">$libs</span> <span style="color: #339933;">=</span> <span style="color: #000066;">qx</span><span style="color: #009900;">&#40;</span>taglib<span style="color: #339933;">-</span>config <span style="color: #339933;">--</span>libs<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">our</span> <span style="color: #0000ff;">$inc</span>  <span style="color: #339933;">=</span> <span style="color: #ff0000;">' -I/usr/include -I./include -I. '</span><span style="color: #339933;">.</span> <span style="color: #000066;">qx</span><span style="color: #009900;">&#40;</span>taglib<span style="color: #339933;">-</span>config <span style="color: #339933;">--</span>cflags<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>So that Version 1.4 and 1.5 are OK.  Some tests fail, but otherwise it seems to work fine for me.</p>
<p>Next up : Setting the compilation Flag from a script.</p>
]]></content:encoded>
			<wfw:commentRss>http://warped.org/blog/2009/04/29/itunes-embedding-folderjpg-into-your-mp3s-for-cover-flow/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
