NowPlayingLib を公開しました

プログラミング       2015年1月12日

.NET Framework から利用可能なライブラリ「NowPlayingLib」を公開しました。Windows 上で動作している音楽プレーヤーと連携して、再生中の曲の情報を取得したり、基本的な操作を行ったりすることができるライブラリです。次の音楽プレーヤーに対応しています。

  • Windows Media Player
  • iTunes
  • x-アプリ
  • LISMO Port(x-アプリ for LISMO)
  • foobar2000(要 COM Automation server コンポーネント)

ライブラリならびにソースコードは GitHub 上で MIT ライセンスで公開されています。
https://github.com/chitoku-k/NowPlayingLib

注意

  • このライブラリーは .NET Framework 4.5 のみに対応しています。
  • アルバムアートワークは foobar2000 では取得できません。

使い方

  1. 上記 GitHub ページの Releases より最新バージョンをダウンロードします。
  2. 使用するプロジェクトの [参照設定] を右クリックして、[参照の追加] をクリックします。
  3. 右下の [参照] ボタンよりダウンロードしたライブラリーを参照に追加します。

リファレンス

インスタンスの生成

使用する音楽プレーヤーのインスタンスを生成します。この操作には時間がかかる場合があります。
音楽プレーヤーがすでに起動している場合はアプリケーションが音楽プレーヤーに関連付けられ、起動していない場合は音楽プレーヤーが起動します。
音楽プレーヤーとの接続はライブラリー内部で共有されているため、いずれかのインスタンスに対して破棄を要求した場合でもすべてのインスタンスで接続は切断されたことになります。

var wmp    = new NowPlayingLib.WindowsMediaPlayer();
var itunes = new NowPlayingLib.iTunes();
var xapp   = new NowPlayingLib.XApplication();
var lismo  = new NowPlayingLib.LismoPort();
var foobar = new NowPlayingLib.Foobar2000();

インスタンスの生成に失敗した場合はSystem.TypeInitializationExceptionがスローされます。原因となった例外(ほとんどの場合System.Runtime.InteropServices.COMException)はInnerExceptionプロパティで取得できます。

現在再生している曲の情報を取得する

音楽プレーヤーが現在再生している曲の情報を取得します。取得できる場合はアルバムアートも格納されます。音楽プレーヤーが曲を再生していない場合nullが返ります。時間のかかる操作は非同期で行われます。

NowPlayingLib.MediaItem media = await player.GetCurrentMedia();

音楽プレーヤーにイベントを設定する

NowPlayingLib.INotifyPlayerStateChangedを実装している音楽プレーヤー(x-アプリと LISMO Port 以外)の場合は音楽プレーヤーが再生している曲が変更された場合などにそのイベントをハンドルすることができます。

player.CurrentMediaChanged += (sender, e) => Console.WriteLine(e.CurrentMedia);

音楽プレーヤーを操作する

Play, Pause, Stop, Rewind, FastForward, PreviousTrack, NextTrackの各メソッドで音楽プレーヤーを操作できます。またCurrentPositionプロパティで再生位置を取得または設定、PlayerStateプロパティで再生状態を取得できます。

音楽プレーヤーとの接続を切断する

各インスタンスはSystem.IDisposableを実装しており、Disposeを呼び出したり using ステートメントで囲ったりすることで適切にリソースを解放することができます。内部実装で利用される COM オブジェクトは自動的に解放されます。

その他

バグ等は GitHub のレポジトリページの Issues よりご報告ください。