iTunesのcomインターフェイス
http://q.hatena.ne.jp/1252743398 の問題を考えてたら、iTunesはcom公開してないのかな?っと思ったので調べてみた。
WSH-vbsだと解析が面倒なのでEXCEL-VBAのIDEで下調べ。参照設定を見ると頭に"itunes"と付くライブラリが3つほど見えるのでチェックを入れて、
Sub a() Dim itunes As iTunesApp Set itunes = CreateObject("iTunes.Application") End Sub
同時にiTunesが起動する。おお、あるある(↓はブレイク中のウォッチウィンドウ)。
ちなみにデバッグ中にiTunesを終わらせると
ハッキングばれとるw
sdkとか入手しなくても良いみたいだ。
という訳で出来たのがこれ。ドライブ内のCDの全曲をwavとmp3両方とも作成する。
Option Explicit Dim itunes As iTunesApp 'iTunes本体 Sub encode() Dim tracks As iTunesLib.IITTrackCollection, track As IITTrack, s Set itunes = CreateObject("iTunes.Application") For Each s In itunes.Sources 'どのSourceがCDなのか探す If s.Kind = ITSourceKindAudioCD Then Set tracks = s.Playlists(1).tracks End If Next If tracks Is Nothing Then Exit Sub display_tracks tracks '曲名一覧を表示 For Each track In tracks '情報をセルに表示 Range("a9:b9") = Array("エンコード中の曲名", track.Name) Range("a10:b10") = Array("エンコード中のアルバム名", track.Album) Range("a11:b11") = Array("エンコード中のアーティスト", track.Artist) encode_track "MP3 Encoder", track encode_track "WAV Encoder", track Next End Sub Sub encode_track(etype As String, etrack As IITTrack) Dim state As IITOperationStatus 'エンコード中の状態 itunes.CurrentEncoder = itunes.Encoders.ItemByName(etype) 'エンコード形式の設定 Set state = itunes.ConvertTrack(etrack) Do While state.InProgress = True '終わるのを待つ Application.Wait TimeSerial(Hour(Now), Minute(Now), Second(Now) + 1) Loop End Sub Sub display_tracks(tracks As iTunesLib.IITTrackCollection) Dim track As IITTrack, i As Integer Cells(13, 1) = "CD内の曲一覧" i = 14 For Each track In tracks Cells(i, 1) = track.Index Cells(i, 2) = track.Name i = i + 1 Next End Sub
起動ボタンもつけてみた。(付け方は省略)
ついでにwshバージョンも作成
Option Explicit Dim itunes 'iTunes本体 dim ITSourceKindAudioCD, msg ITSourceKindAudioCD=3 do while msgbox("CDを入れたらOK、終了はキャンセル",vbOKCancel)=vbok encode msgbox "終了しました。" & vbcrlf & msg loop Sub encode() Dim tracks, track, s Set itunes = CreateObject("iTunes.Application") For Each s In itunes.Sources 'どのSourceがCDなのか探す If s.Kind = ITSourceKindAudioCD Then Set tracks = s.Playlists(1).tracks End If Next If tracks Is Nothing Then Exit Sub For Each track In tracks encode_track "MP3 Encoder", track encode_track "WAV Encoder", track Next 'msg = " エンコード中の曲名:" & track.Name & vbcrlf & msg=msg & " アルバム名:" & tracks(1).Album & vbcrlf & _ " アーティスト:" & tracks(1).Artist & vbcrlf display_tracks tracks '曲名一覧を表示 End Sub Sub encode_track(etype, etrack) Dim state 'エンコード中の状態 itunes.CurrentEncoder = itunes.Encoders.ItemByName(etype) 'エンコード形式の設定 Set state = itunes.ConvertTrack(etrack) Do While state.InProgress = True '終わるのを待つ wscript.sleep 200 Loop End Sub Sub display_tracks(tracks) Dim track msg = msg & "CD内の曲一覧" & vbcrlf For Each track In tracks msg = msg & track.Index & vbcrlf msg = msg & track.Name & vbcrlf Next End Sub