iTunes COMをC#で操作

iTunesのもこもこした音に耐えかねて、ASIO対応のfoobar2000を経由させようと思ったら、iTunesのバージョンが新しくて対応していないという。
そこで、iTunesが再生したのを検知して、foobar2000を引数付きで起動するというプログラムを書いてみました。
結局、iTunesが起動している状態ではASIOが使えなかったりして、諦めたのですがw

せっかくなので、まとめておきます。

iTunes SDKのヘルプを入手する

これがないと始まりません。逆にこれがあれば基本的になんでもわかると思います。

  1. ADC Member Siteにアクセス
  2. ADC Memberでない方は、右側にある「Join Now」ボタンから、登録。
  3. ログイン後、「Downloads」→「Developer Tools」の順に選択。
  4. iTunes COM for Windows SDK」を見つけ出し、ダウンロード。
  5. 解凍後のファイルの中に「iTunesCOM.chm」があるはず。これがヘルプです。

参照設定ともろもろ

まず、VSを起動して、「参照の追加」ダイアログを開き、「COM」タブ→「iTunes Type Library」を追加。

using iTunesLib;

を追加しておきます。iTunesを操作するためにiTunesAppClass型の変数を作りましょう。例えば、

public partial class Form1 : Form
{
    iTunesAppClass iTunes;
....
}

FormのLoadイベントで、iTunes変数にインスタンスを作成(変数宣言時に初期化してもいいと思います)
ここでは、曲が再生されたときに呼ばれるイベントを指定しています。

private void Form1_Load(object sender, EventArgs e)
{
    iTunes = new iTunesAppClass();
    iTunes.OnPlayerPlayEvent += 
        new _IiTunesEvents_OnPlayerPlayEventEventHandler(iTunes_OnPlayerPlayEvent);
}

iTunes_OnPlayerPlayEventは引数として再生中の曲を受け取ります。

private void iTunes_OnPlayerPlayEvent(object iTrack)
{
    IITTrack iit = (IITTrack)iTrack;

    MessageBox.Show("Now playing..." + iit.Genre + ":" + iit.Artist + ":" + iit.Name);
}

また、IITTrackを継承したIITFileOrCDTrackにキャストすれば、再生中のファイルのパスも取得可能です。
iTunesAppClassを操作することにより、再生や停止、ボリュームの変更なども可能。

IITFileOrCDTrack iitf = (IITFileOrCDTrack)iTrack;
//iitf.Locationでファイルパスを取得

iTunes.Stop();
iTunes.Play();
iTunes.SoundVolume = 100; //0-100

その他様々な機能があります。ヘルプを見ればたいていのことはわかると思います。