ホーム >プログラム >Delphi 6 ローテクTips >TWindowsMediaPlayerでCDDBのようなCDアルバム情報を取得

TWindowsMediaPlayerを利用してCDDBのようなCDアルバムの各種情報を取得しようというページ。


CDを再生したりmp3に落とすときにCDDBなどからアルバム情報を取得できると便利です。
で、それがTWindowsMediaPlayerなら簡単にできてしまいます。

以下ではTWindowsMediaPlayerのOnCdromMediaChangeイベント内に書いていますのでCDドライブにCDを入れ替えたときなど自動で取得します。

procedure TForm1.WindowsMediaPlayer1CdromMediaChange(Sender: TObject; CdromNum: Integer);
var
  l_CdDriveList: IWMPCdromCollection; //CDドライブのリスト
  l_CdDrive:     IWMPCdrom;           //CDドライブ
  l_CdAlbum:     IWMPPlaylist;        //CDアルバム
  l_CdMedia:     IWMPMedia;           //トラック(曲)
  ls_Name, ls_Info: WideString;
  i, k: Integer;
begin
  l_CdDriveList := WindowsMediaPlayer1.cdromCollection;
  l_CdDrive     := l_CdDriveList.Item(CdromNum);
  l_CdAlbum     := l_CdDrive.Playlist;

  myDebug.gpcDebugAdd(l_CdDrive.driveSpecifier);  //G:とかH:とかのドライブ文字
  myDebug.gpcDebugAdd(l_CdAlbum.name);            //CDアルバムのタイトル
  for i := 0 to l_CdAlbum.count -1 do begin
    l_CdMedia := l_CdAlbum.Item[i];
    myDebug.gpcDebugAdd;
    myDebug.gpcDebugAdd(Format('%0.2d', [i + 1]), l_CdMedia.name);  //曲のタイトル
    for k := 0 to l_CdMedia.attributeCount -1 do begin
      ls_Name := l_CdMedia.getAttributeName(k);        //タグ名
      ls_Info := Trim(l_CdMedia.getItemInfo(ls_Name)); //タグ情報
      if (ls_Info <> '') then begin
        myDebug.gpcDebugAdd(WideFormat(' %-15s %s', [ls_Name, ls_Info])); //トラック(曲)の様々な情報
      end;
    end;
  end;
end;

IWMPCdromCollectionというのはCDドライブのリストオブジェクトになります。
分かりやすく言えばPCにつながっているCDドライブのリストです。
countプロパティでPCにつながっているCDドライブの数が分かります。
Itemプロパティはつながっている1台1台のCDドライブです。
取り出すには0から始まるインデックスで指定します。 例えばPCに2台のCDドライブがつながっていれば1台目はItem(0)、2台目はItem(1)として取り出すことができます。

IWMPCdromはPCにつながっているCDドライブオブジェクトのことです。
driveSpecifierプロパティで'G:'とか'H:'とかの、CDドライブのドライブ文字が分かります。
playlistプロパティはCDドライブに入っているCDアルバムの曲のリストオブジェクトです。
分かりやすく言えばCDに入っている曲のリストです。

IWMPCdromCollectionとIWMPCdromの二つのオブジェクトはCDドライブのオブジェクトなのでCDドライブにCDやDVDが入っていなくても取得できます。

IWMPPlaylistはCDドライブに入っているCDアルバムの曲のリストになります。
nameプロパティでCDアルバムのタイトルが取得できます。
countプロパティでCDに入っているトラック数が分かります。
ItemプロパティにはCDアルバムに入っているトラックがオブジェクトとして格納されています。
CDドライブにCDやDVDメディアが入っていない場合、
nameプロパティは「ドライブにディスクがありません」という文字列が返ります。
countプロパティには0が返ります。

IWMPMediaはCDアルバムに入っている曲です。
このメディアオブジェクトにCDDBのようなCDアルバムの曲情報が入っています。
attributeCountプロパティで取得できる情報の数が分かります。
getAttributeNameメソッドで取得できる情報の種類を文字列に取得します。
getItemInfoメソッドに↑で取得した文字列を与えると、希望する情報が取得できます。

流れとしてはこんな感じで、ID3タグを取得するのと一緒です。

ざっとこれだけの情報が取れます。

初めてのCDアルバム情報を取得するためにはPCがインターネットにつながっている必要があります。
一度取得してしまえば情報はローカルに保存されるようで、以降ネットにつながっていなくても取得できるようになります。

同じような要領でDVDの情報も取れます。
ただCDアルバムと違って有名なタイトルでないと情報なしになってしまうことが多いようです。


2008-12-28: