Posted at

vbs初心者がiTunes COM Interfaceを使って音楽ファイルからiTunesのライブラリへ登録するscriptを作った


プロローグ

音源ファイルを自分を管理し、iTunesへ自分で音源ファイルをドラッグアンドドロップしてライブラリを構築していた。

ある日Windowsがお亡くなりになり、再インストール。音源ファイルはあるが、iTunesのライブラリは消えてなくなってしまった。

膨大な音源ファイルからiTunesライブラリを再構築させる方法を探し求め、なんとか復活したのでその道程を記す。


iTunes COM Interface

WindowsからiTunesを操作するAPIがある。まず、こいつの存在がなかなか知られてない。

そしてドキュメントがなかなか見つからない。

苦労して見つけたのでリンクしておく。これだけで救われる人も多いだろう・・・

iTunes COM Interface Documentation

ただこれは公式でもなんでもなさそうで、いつ消えるか含め内容は未保証。

そもそも2009年の情報らしいし・・・


iTunesに曲を登録するスクリプト

Sub addMusic(path)

Dim iTunesApp, iLibraryPlaylist, result

Set iTunesApp = WScript.CreateObject("iTunes.Application")
Set iLibraryPlaylist = iTunesApp.LibraryPlaylist
Set result = iLibraryPlaylist.AddFile(Path)
End Sub

iLibraryPlaylist がiTunesのライブラリのオブジェクト。

AddFile メソッドでファイルパスのファイルをiTunesに登録してくれる。

このスクリプト実行すると勝手にiTunesが立ち上がってくる。油断してるとビビる。


ライブラリに曲の情報を追加する

AddFile メソッドでは音源ファイルから、曲に付加できる情報は自動で付加される。たとえばファイル名から曲名をつける、など。MP3ファイルなどならファイルのタグ情報から自動で入ってくれるが、Waveファイルだとそのようなものはないので曲名しか自動で付加されない。

それをスクリプト内で付加するにはこうする。

Sub addMusic(path, artist, album)

Dim iTunesApp, iLibraryPlaylist, result

Set iTunesApp = WScript.CreateObject("iTunes.Application")
Set iLibraryPlaylist = iTunesApp.LibraryPlaylist
Set result = iLibraryPlaylist.AddFile(Path)
If Not result Is Nothing then
Set tracks = result.tracks
For Each track in tracks
track.Artist = artist
track.Album = album
track.Genru = "J-Pop"
End If
End Sub

AddFile メソッドの返り値のtracksに、メソッドで追加した曲の情報が入っているので、これを直接操作することでライブラリの曲の情報を編集できる。

ただし、この操作(ArtistやAlbumの更新など)はエラーが発生することがあるので、上記では省略しているけれども、エラー処理をしておかないと途中で処理が止まってしまう。


スクリプトの処理速度

AddFileで1ファイルずつ登録しArtist、Album、Genruを設定するスクリプトを動かしたところ、9000曲程度で2時間弱かかった。結構時間かかる印象。でも手で登録するよりは全然楽。

AddFile は音源ファイル単体だけでなく、フォルダを指定することでそのフォルダ配下の音源ファイルをまとめて登録するという動きもするらしい(未確認)。その場合はもっと処理速度が上がるかもしれない。