<?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; TagLib</title>
	<atom:link href="http://warped.org/blog/tag/taglib/feed/" rel="self" type="application/rss+xml" />
	<link>http://warped.org/blog</link>
	<description>Max Baker -- A Man with a Hand</description>
	<lastBuildDate>Fri, 08 Apr 2011 22:01:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>iTunes &#8211; Fixing ID3 tags in MP3&#8242;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&#8242;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 recently, it [...]]]></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&#8242;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&#8242;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: #339933;">@</span><span style="color: #000000; font-weight: bold;">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: #339933;">@</span><span style="color: #000000; font-weight: bold;">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>
	</channel>
</rss>

