iTunes COMをC#で操作
iTunesのもこもこした音に耐えかねて、ASIO対応のfoobar2000を経由させようと思ったら、iTunesのバージョンが新しくて対応していないという。
そこで、iTunesが再生したのを検知して、foobar2000を引数付きで起動するというプログラムを書いてみました。
結局、iTunesが起動している状態ではASIOが使えなかったりして、諦めたのですがw
せっかくなので、まとめておきます。
iTunes SDKのヘルプを入手する
これがないと始まりません。逆にこれがあれば基本的になんでもわかると思います。
- ADC Member Siteにアクセス
- ADC Memberでない方は、右側にある「Join Now」ボタンから、登録。
- ログイン後、「Downloads」→「Developer Tools」の順に選択。
- 「iTunes COM for Windows SDK」を見つけ出し、ダウンロード。
- 解凍後のファイルの中に「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
その他様々な機能があります。ヘルプを見ればたいていのことはわかると思います。