<?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>Mike's stuff &#187; music</title>
	<atom:link href="http://www.mfischer.com/wordpress/topics/music/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mfischer.com/wordpress</link>
	<description>Things from Mike's brain.</description>
	<lastBuildDate>Sat, 26 Jun 2010 16:18:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>MP3 metadata tagging</title>
		<link>http://www.mfischer.com/wordpress/2007/11/21/mp3-metadata-tagging/</link>
		<comments>http://www.mfischer.com/wordpress/2007/11/21/mp3-metadata-tagging/#comments</comments>
		<pubDate>Thu, 22 Nov 2007 01:32:26 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[computing]]></category>
		<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://www.mfischer.com/2007/11/21/mp3-metadata-tagging/</guid>
		<description><![CDATA[I&#8217;ve been trying to work on my MP3 collection&#8217;s ID3 metadata, and in the past weeks have gone through close to a dozen different ID3 tagging utilities and libraries, before finally finding a solution I&#8217;m happy with, so I thought I&#8217;d summarize my findings here. Going into all my crazy requirements would take forever, but [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been trying to work on my MP3 collection&#8217;s <a href="http://www.id3.org/">ID3 metadata</a>, and in the past weeks have gone through close to a dozen different ID3 tagging utilities and libraries, before finally finding a solution I&#8217;m happy with, so I thought I&#8217;d summarize my findings here.  Going into all my crazy requirements would take forever, but a few key ones were:</p>
<ol>
<li>Read and write ID3v2.4 tags (so that I could use the TSOP &#8220;sort-order&#8221; tag, causing &#8220;Sarah McLachlan&#8221; to sort into the M&#8217;s instead of the S&#8217;s iTunes)</li>
<li>Read and write multiple TXXX &#8220;user-text&#8221; tags (which I use for things like creating playlists)</li>
<li>Have a Linux command-line interface, or an API easy enough for me to make one</li>
<li>Support Latin1 multi-byte encoding for funky European lettering (like Björk)</li>
</ol>
<p>The underlying vision behind this is my non-standard workflow.  I rip all my CDs into <a href="http://flac.sourceforge.net/">FLAC (Free Lossless Audio Codec)</a> format using the <a href="http://www.sbooth.org/Max/">Max</a> CD ripper/encoder application for Mac OSX.  These FLAC files are my masters, and once ripped, the CDs go into a storage cabinet and (hopefully) are never seen again.  Once I&#8217;m happy with the metadata in the FLAC files, I kick off a script that converts them to MP3, and copies the metadata over (including some custom mappings).</p>
<p>After lots of trial and error, and finding utilities and libraries that were missing one feature or another, I finally settled on using <a href="http://developer.kde.org/~wheeler/taglib.html">TagLib</a> via its <a href="http://search.cpan.org/~dongxu/Audio-TagLib-1.43/">Perl interface</a>. Unfortunately, I couldn&#8217;t find <em>any</em> examples of code using this interface, so had to struggle through the terse docs and fall back on lots of experimentation.  Below is some of the code I came up with&#8230; hopefully it&#8217;ll help someone else with this library some day&#8230;</p>
<p><strong>Example 1:</strong> Printing all the ID3v2.4 tags in an MP3 file</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
</pre></td><td class="code"><pre class="perl" style="color: #FCFFBA;"><span style="color: #666666; font-style: italic;color: #CDC;">#!/usr/bin/perl -w</span>
&nbsp;
<span style="color: #666666; font-style: italic;color: #CDC;">#</span>
<span style="color: #666666; font-style: italic;color: #CDC;"># Just print out all the ID3v2.4 tags in the MP3 file</span>
<span style="color: #666666; font-style: italic;color: #CDC;">#</span>
&nbsp;
<span style="color: #000000; font-weight: bold;color: #577A61;">use</span> Audio<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #000000; font-weight: bold;color: #577A61;">use</span> warnings<span style="color: #339933;color: #CCC;">;</span>
<span style="color: #000000; font-weight: bold;color: #577A61;">use</span> strict<span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #b1b100;color: #B83A24;">if</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$#ARGV</span> <span style="color: #339933;color: #CCC;">!=</span> <span style="color: #cc66cc;color: #DDD;">0</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
  <span style="color: #000066;color: #8FB394;">print</span> <span style="color: #ff0000;color: #666666;">&quot;Usage: mp3-tagslist.pl mp3file<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;color: #CCC;">;</span>
  <span style="color: #000066;color: #8FB394;">exit</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #009900;color: #CCC;">&#125;</span>
&nbsp;
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$mp3fn</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$ARGV</span><span style="color: #009900;color: #CCC;">&#91;</span><span style="color: #cc66cc;color: #DDD;">0</span><span style="color: #009900;color: #CCC;">&#93;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$mp3</span> <span style="color: #339933;color: #CCC;">=</span> Audio<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">MPEG</span><span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">File</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">new</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$mp3fn</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$mp3tag</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$mp3</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">ID3v2Tag</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$list</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$mp3tag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">frameList</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$iter</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$list</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">begin</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #b1b100;color: #B83A24;">for</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$i</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #cc66cc;color: #DDD;">0</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #0000ff;">$i</span> <span style="color: #339933;color: #CCC;">&lt;</span> <span style="color: #0000ff;">$list</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">size</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;color: #CCC;">++</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
  <span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$id</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$iter</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">data</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">frameID</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
  <span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$iter2</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$id</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">begin</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
  <span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$idstr</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #ff0000;color: #666666;">&quot;&quot;</span><span style="color: #339933;color: #CCC;">;</span>
  <span style="color: #b1b100;color: #B83A24;">for</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$j</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #cc66cc;color: #DDD;">0</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #0000ff;">$j</span> <span style="color: #339933;color: #CCC;">&lt;</span> <span style="color: #0000ff;">$id</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">size</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;color: #CCC;">++</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
    <span style="color: #0000ff;">$idstr</span> <span style="color: #339933;color: #CCC;">.=</span> <span style="color: #0000ff;">$$iter2</span><span style="color: #339933;color: #CCC;">;</span>
    <span style="color: #0000ff;">$iter2</span><span style="color: #339933;color: #CCC;">++;</span>
  <span style="color: #009900;color: #CCC;">&#125;</span>
  <span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$data</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$iter</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">data</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">toString</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">toCString</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
  <span style="color: #000066;color: #8FB394;">print</span> <span style="color: #ff0000;color: #666666;">&quot;$idstr = $data<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;color: #CCC;">;</span>
  <span style="color: #0000ff;">$iter</span><span style="color: #339933;color: #CCC;">++;</span>
<span style="color: #009900;color: #CCC;">&#125;</span></pre></td></tr></table></div>

<p>Here&#8217;s what the output looks like:</p>
<blockquote><p>
&lt;10 home->bin> id3v24view.pl 02.\ Busy\ Child.mp3<br />
TIT2 = Busy Child<br />
TPE1 = The Crystal Method<br />
TALB = Vegas<br />
COMM = Ripped with EAC 0.95 beta 2<br />
TRCK = 2<br />
TSOP = Crystal Method<br />
TXXX = [MFPLAYLIST] Dance,Mike,NewWave,Popular,Techno,
</p></blockquote>
<p><strong>Example 2:</strong> Converting Vorbis tags (the common ones, and a few custom ones) from FLAC files to the corresponding ID3v2.4 tags in MP3 files</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
</pre></td><td class="code"><pre class="perl" style="color: #FCFFBA;"><span style="color: #666666; font-style: italic;color: #CDC;">#!/usr/bin/perl -w</span>
&nbsp;
<span style="color: #666666; font-style: italic;color: #CDC;">#</span>
<span style="color: #666666; font-style: italic;color: #CDC;"># Copy all our tags from a FLAC file to an MP3 file.</span>
<span style="color: #666666; font-style: italic;color: #CDC;">#</span>
&nbsp;
<span style="color: #000000; font-weight: bold;color: #577A61;">use</span> Audio<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #000000; font-weight: bold;color: #577A61;">use</span> warnings<span style="color: #339933;color: #CCC;">;</span>
<span style="color: #000000; font-weight: bold;color: #577A61;">use</span> strict<span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #b1b100;color: #B83A24;">if</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$#ARGV</span> <span style="color: #339933;color: #CCC;">!=</span> <span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
  <span style="color: #000066;color: #8FB394;">print</span> <span style="color: #ff0000;color: #666666;">&quot;Usage: flac2mp3-tags.pl flacfile mp3file<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;color: #CCC;">;</span>
  <span style="color: #000066;color: #8FB394;">exit</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #009900;color: #CCC;">&#125;</span>
&nbsp;
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$flacfn</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$ARGV</span><span style="color: #009900;color: #CCC;">&#91;</span><span style="color: #cc66cc;color: #DDD;">0</span><span style="color: #009900;color: #CCC;">&#93;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$mp3fn</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$ARGV</span><span style="color: #009900;color: #CCC;">&#91;</span><span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#93;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$flac</span> <span style="color: #339933;color: #CCC;">=</span> Audio<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">FLAC</span><span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">File</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">new</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flacfn</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$mp3</span> <span style="color: #339933;color: #CCC;">=</span> Audio<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">MPEG</span><span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">File</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">new</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$mp3fn</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$flactag</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$flac</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">xiphComment</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #cc66cc;color: #DDD;">0</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$mp3</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">strip</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$mp3tag</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$mp3</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">ID3v2Tag</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$mp3tag1</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$mp3</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">ID3v1Tag</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #0000ff;">$mp3tag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setTitle</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">title</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$mp3tag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setArtist</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">artist</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$mp3tag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setAlbum</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">album</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$mp3tag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setComment</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">comment</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$mp3tag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setGenre</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">genre</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$mp3tag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setYear</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">year</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$mp3tag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setTrack</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">track</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #0000ff;">$mp3tag1</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setTitle</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">title</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$mp3tag1</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setArtist</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">artist</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$mp3tag1</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setAlbum</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">album</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$mp3tag1</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setComment</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">comment</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$mp3tag1</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setGenre</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">genre</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$mp3tag1</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setYear</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">year</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$mp3tag1</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setTrack</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">track</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;color: #CDC;"># Add some custom fields</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$field</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;color: #CDC;"># Performer sort order</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$str</span> <span style="color: #339933;color: #CCC;">=</span> Audio<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">String</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">new</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #ff0000;color: #666666;">&quot;ARTISTSORT&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #b1b100;color: #B83A24;">if</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">fieldListMap</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">contains</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$str</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
  <span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$text</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">fieldListMap</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">getItem</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$str</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">toString</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
  <span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$bv</span> <span style="color: #339933;color: #CCC;">=</span> Audio<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">ByteVector</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">new</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #ff0000;color: #666666;">&quot;TSOP&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
  <span style="color: #0000ff;">$field</span> <span style="color: #339933;color: #CCC;">=</span> Audio<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">ID3v2</span><span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">TextIdentificationFrame</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">new</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$bv</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #ff0000;color: #666666;">&quot;Latin1&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
  <span style="color: #0000ff;">$field</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setText</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$text</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
  <span style="color: #0000ff;">$mp3tag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">addFrame</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$field</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #009900;color: #CCC;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;color: #CDC;"># Custom text entries for the TXXX fields</span>
<span style="color: #b1b100;color: #B83A24;">foreach</span> <span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$tagname</span> <span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #ff0000;color: #666666;">&quot;DATEADDED&quot;</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #ff0000;color: #666666;">&quot;MFPLAYLIST&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
  <span style="color: #0000ff;">$str</span> <span style="color: #339933;color: #CCC;">=</span> Audio<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">String</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">new</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$tagname</span><span style="color: #009900;color: #CCC;">&#41;</span>
  <span style="color: #b1b100;color: #B83A24;">if</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">fieldListMap</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">contains</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$str</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
    <span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$text</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$flactag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">fieldListMap</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">getItem</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$str</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">toString</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
    <span style="color: #0000ff;">$field</span> <span style="color: #339933;color: #CCC;">=</span> Audio<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">ID3v2</span><span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">UserTextIdentificationFrame</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">new</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #ff0000;color: #666666;">&quot;Latin1&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
    <span style="color: #0000ff;">$field</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setDescription</span><span style="color: #009900;color: #CCC;">&#40;</span>Audio<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">TagLib</span><span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">String</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">new</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$tagname</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
    <span style="color: #0000ff;">$field</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">setText</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$text</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
    <span style="color: #0000ff;">$mp3tag</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">addFrame</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$field</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
  <span style="color: #009900;color: #CCC;">&#125;</span>
<span style="color: #009900;color: #CCC;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">$mp3</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;color: #f6f;">save</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.mfischer.com/wordpress/2007/11/21/mp3-metadata-tagging/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->