iTunes上の曲のアルバムアーティストを設定する

今までCDのリッピングの際に曲ごとの「アルバムアーティスト」という項目をあんまりちゃんと設定しておらず、「ジャンル」>「アーティスト」>「アルバム」>「曲」みたいなフォルダ階層で管理していたんだけど、この前買ったiPod Touchにはフォルダ階層という概念が無く、アルバムはアルバムアーティスト単位でまとめて表示され仕様だったので、そこで改めて「アルバムアーティスト」情報を活用することにした。*1


今まで取り込んだ曲も全く整理していないわけではなくて、ファイルパスの二つ上の階層のフォルダ名がアルバムアーティスト名になるように配置しているので、もしファイルのID3タグをプログラムから操作出来れば、全部の曲にアルバムアーティストを設定することが機械的に実行出来るはず。そして、iTunesには手動でアルバムアーティストを設定する機能が存在するため、iTunes自体がなんらかのライブラリを作って使用しているはずであり、なんとかそのライブラリを使ってやれないかと考えた。


そこでまず、iTunesが使っていると思われるライブラリを見つけるため、Mach-oファイルのリンク情報をotool -Lで見てみた。AudioToolboxというフレームワークがあるので見てみたところ、公開されているAPIを見る限り読み込みはあるが書き込みは無かった。


ID3タグでドキュメントを検索していたらAVFoundation Frameworkってのがあったので使ってみた。読み込みはできたが書き込みはなぜか上手く行かなかった。


libid3などの外部のライブラリを使えば実現出来そうなのは分かっていたんだけど、iTunesがアプリ上でやっていることを外部のライブラリを導入してやるのは何か癪だったので、なんとかiTunesライブラリの資産を使って出来ないか考えてたんだけど、よく考えたらAppleScriptiTunes自体に付けさせたら良かったわ。


ということでAppleScript書いてみた。多分あってる。

tell application "iTunes"
	set tmp to AppleScript's text item delimiters
	set AppleScript's text item delimiters to {":"}
	repeat with aTrack in tracks of user playlist "NEW"
		if album artist of aTrack is "" then
			set album artist of aTrack to text item -3 of (location of aTrack as string)
		end if
	end repeat
	set AppleScript's text item delimiters to tmp
end tell

「NEW」という名前のプレイリストに入っているトラックのうちでalbum artistが空のものについて、パス上でファイル自体より2階層上のフォルダの名前をトラックのalbum artistとして設定している。


実行したところ日本語名のフォルダを含めて上手くいった。


……なんか釈然としないが、間接的にiTunesのライブラリを再利用出来たので良かったことにする。

*1:今までKENWOODのHD30GA9使ってたが、これにはフォルダの概念があった。