X

MediaElementで音楽を再生する

MediaElementはWP7で音楽や動画を再生する機能を提供するクラスです。

今回は音楽の再生や停止などの基本的な機能の実装方法を紹介します。

詳細は以下から。

本記事では逆引き的に実装したい項目を主に解説していきます。

MediaElementの詳細な情報はMSDNのページを参照して下さい。

アプリに埋め込まれた音楽を再生する

音楽を再生する機能は次の手順で実装します。

ここではアプリに埋め込まれたリソースを再生します。

  1. 音楽のリソースをアプリに埋め込む
  2. リソースをMediaElementインスタンスに設定する
  3. 再生を開始する

音楽のリソースをアプリに埋め込む
音楽のリソースをアプリに埋め込む最も簡単な方法はエクスプローラからドラッグアンドドロップでアプリに入れることです。

以下の画像のように、埋め込みたい音楽をソリューション名の上でドロップします。

リソースを埋め込んだら、MediaElementで再生できるように、追加したファイルのビルドアクションを”コンテンツ”に設定します。

リソースをMediaElementインスタンスに設定する
リソースをMediaElementインスタンスに設定するにはMediaElement#Sourceプロパティに、再生するリソースのUriを設定します。

Uriの設定にはUriクラスを使用します。
このクラスはファイルの格納場所をUriで表現するための機能を提供するクラスです。

MediaElement#SourceプロパティにはこのUriクラスのインスタンスを代入します。

mediaElement1.Source = new Uri("/music.mp3", UriKind.Relative);

Uriクラスのコンストラクタでは絶対Pathか相対Pathかを第二引数で指定するようになっています。

端末のディレクトリ構造は機種によって違う場合があるので通常は相対Path(UriKind.Relative)を指定します。

絶対Pathで指定したい場合は、第二引数にUriKind.Absoluteを指定します。

再生を開始する
再生を開始するには、MediaElement#Playメソッドを使用します。

このメソッドを呼び出すと、MediaElement#Sourceプロパティに設定したデータが再生されます。

mediaElement1.Play();

また、再生を停止するにはMediaElement#Stopメソッドを使用します。

mediaElement1.Stop();

Web上のファイルを再生する

MediaElementはローカルコンテンツだけでなく、Web上のファイルも再生することができます。

Web上のファイルを再生するには、ローカルファイルと同じようにMediaElement#SourceプロパティにファイルのUriを指定します。

mediaElement1.Source = new Uri("Web上のデータのURL", UriKind.Absolute);
mediaElement1.Play();

気をつけなければならないのは、Uriのコンストラクタで第二引数にUriKind.Absoluteを指定しなければならないことです。

ボリュームを変更する

ボリューム(音の大きさ)を変更するにはMediaElement#Volumeプロパティの値を変更します。

このプロパティは0~1の間でボリュームが変化します。

mediaElement1.Volume += 0.01;

早送り、巻戻しを実装する

早送り、巻戻しを実装するには、再生位置を管理する、MediaElement#Positionプロパティの値を変化させます。

MediaElement#PositionプロパティはTimeSpan構造体のインスタンスです。

TimeSpan構造体は時間間隔を表します。

TimeSpan ts = new TimeSpan(0, 0, 0, 0, 10000);

TimeSpan構造体のコンストラクタの引数は(日, 時間, 分, 秒, ミリ秒)という構成になっています。

10秒早送りしたい場合は以下のようなコードになります。

TimeSpan ts = new TimeSpan(0, 0, 0, 10, 0);
mediaElement1.Position = ts;

TimeSpan構造体は負数を指定することも可能なため、10秒巻き戻しをしたい場合は以下のようなコードになります。

TimeSpan ts = new TimeSpan(0, 0, 0, -10, 0);
mediaElement1.Position = ts;
kei_i_t: