お知らせl(2008/8/10) こちらにiTunes for Windows向け重複した曲を削除するソフトchutilを公開しました。
音楽ファイルはもっぱらiTunesで管理しているんだけど、音楽ファイルが重複している事がよくある。 最初は手動で削除していたけど、時間はかかるし、重複ファイルは増えるし。
重複した音楽ファイルを削除するフリーソフトもなかなか見つからないので、重複した音楽ファイルを削除するスクリプトをrubyで作ってみた。iTunesはCOMで操作できるので、とっても楽。 コードについて少し解説すると、曲名、アーティスト名、アルバム名が同一の音楽ファイルを、同じ曲として判断して、最初にみつかったファイル以外を削除しています。自分用につくったので、かなり大雑把な仕様ですが。あとは、煮るなり焼くなり好きしてください。
ActiveRuby 1.8.6 + iTunes 7.6にて動作確認。 コードは以下の通り。MITライセンスです。
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 69 | # iTunes上の重複ファイルを削除する itunesdup.rb # (c) 2008 demuyan # # This code is freely distributable under the terms of an MIT-style license. # For details, see my web site: http://cocoa.jpn.org/ # require 'win32ole' $KCODE = 's' # 重複した曲情報を削除する def delete_music(music_list) music_list.keys.each do |key| # 同名のKeyがあれば、削除する if music_list[key].size > 1 cnt = music_list[key].size # 最初に見つけた曲以外は削除する 0.upto(cnt-2) do |i| mu = music_list[key].pop p "DELETE: #{mu.trackobj.Location}" # ファイルを削除する File.delete(mu.trackobj.Location) if File.exist?(mu.trackobj.Location) # プレイリストから削除する mu.trackobj.Delete end end end end ITTrackKindFile = 1 # 初期化 itunes_app = WIN32OLE.new('iTunes.Application') main_library = itunes_app.LibraryPlayList tracks = main_library.Tracks num_tracks = tracks.Count music_list = Hash.new music_info = Struct.new("MusicInfo", :name, :trackobj) num_tracks.downto(1) do |i| # 音楽ファイル情報を取り出す cur_track = tracks.Item(i); # 音楽ファイルとして存在する if cur_track.Kind == ITTrackKindFile # 曲名+アーティスト名+アルバム名をキーにする key = cur_track.Name+":"+cur_track.Artist+":"+cur_track.Album+":" music_list[key] = Array.new if music_list[key].nil? music_list[key] << music_info.new(cur_track.Name, cur_track) end # 適当なタイミングで重複ファイルを削除 if i % 1000 == 0 delete_music(music_list) end end # 残りの重複ファイルを削除する delete_music(music_list) |
ただ、このままじゃ使える人も限られるので、そのうちWindowsアプリとしてもリリースするつもり。 COMを使ったiTunesの扱い方も判ってきたしね。
参考サイト
COM Meets Ruby COMも操作できるWindows向けRuby(ActiveRuby)を配布している
iTunes Com for Windows SDK iTunesをCOMから操作するためのSDK。ヘルプファイルとサンプルプログラム(jscript)があります


