MediaElement クラスと MediaPlayer クラス

Last Updated 2011/09/21


WPF におけるマルチメディア関係のクラスとして、MediaElement クラスと MediaPlayer クラスとがあります。これらをどのように使い分けるのか、あるいは、従来の .Net Framework のクラスとの関係などについて解説します。


.Net Framework におけるマルチメディア関係のクラスとしては次の 3 種類があります。

System.Media.SoundPlayer.wav ファイルを再生する
System.Media.SystemSoundシステムサウンドを再生する
SystemSounds クラスWindows のシステムサウンドを保持する

いずれも音声だけの再生で、動画を再生するには Windows Media Player を直接操作しなければなりません。

Note 私が公開している .Net Framework クラスライブラリリファレンスの NETClass は Windows Media Player を操作する手順の解説を含みます。

しかし、WPF には MediaElement クラスと MediaPlayer クラスとが追加されました。MediaPlayer クラスは Windows Media Player を WPF で使えるようにした、いわゆるラップクラスです。一方、MediaElement クラスは MediaPlayer クラスのサブクラスのようなものです。基本的な機能に違いがあるわけではありませんが、MediaElement クラスのほうは XAML コードで使うことを想定しています。一方、MediaPlayer クラスは分離コードを使って操作することを前提としています。

両者をどう使い分けるかですが、音声の再生と動画の再生とに分けて説明します。

音声の再生だけであれば、ユーザーインターフェス(以後、UI と称する)との関係がありませんから System.Media.SoundPlayer クラスや System.Media.SystemSound クラスを使えばいいと思います。したがって、システムサウンドや .wav ファイル以外の音声を再生する場合は、MediaPlayer クラスを使うことになるでしょう。そこでまず、MediaPlayer クラスを使って音声を再生するコード例を以下に示します。

次の XAML コードはフォームを定義しますが、フォームに Button コントロールだけを配置し、ボタンをクリックすると、指定の .wav ファイルを再生します。

<Window x:Class="MultimediaTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300"
  >
  <StackPanel Name="stackPanel1" Orientation="Vertical">
    <Button Name="button1" Width="80" Height="25" Margin="10" Click="button1_Click">button1</Button>
 </StackPanel>
</Window>

分離コード

namespace MultimediaTest
{
  public partial class Window1 : Window
  {
    public Window1()
    {
      InitializeComponent();
    }

    //-----------------------------------------------------------------------------------
    // 音声だけを再生する
    private void button1_Click(object sender, RoutedEventArgs e)
    {
      MediaPlayer player = new MediaPlayer();

      // .wav ファイル名は実在するものに変更してください
      // 再生可能なファイルの種類は、.wav、.mid、.wma はテストして確認済みです
      player.Open(new Uri(@"D:\ImageData\Wave\BIRDS.WAV", UriKind.Absolute));

      player.Play();
    }
  }
}

このコード例では再生の一時停止や中止の機能を付けませんでしたが、以下の MediaElement クラスを使うコードを参考にすれば自力で何とかなると思います。

次に、動画の再生ですが、コードが長くなるので、サンプルプロジェクトを用意しました。下図は、実行中のサンプルアプリケーションの状態です。WPF SDK に付属のサンプルコードを参考にしましたが、実用的に作りました。ただし、細かい点は手抜きしています。

MediaElement

このアプリケーションの使い方ですが、[ファイル]-[ファイルを開く] を選択すると、ファイル選択ダイアログボックスが開きますので、画像ファイル(.avi、.wmv、.mpeg ファイル)を選択してください。次に、画面下部にある左端のボタンを押すと、再生を開始します。

2 番目のボタンは [一時停止]、3 番目のボタンは [中止] です。"Volume" は音声のボリューム、"Speed" は再生速度で、1 が標準、1 未満のとき、標準より遅く、1 を超えると、標準より速くなります。"Position" は再生を開始する位置です。右端のプログレスバーは再生中の進捗状況を表示します。

アプリケーションの外観は、Windows Vista に付属の Windows フォトギャラリーや Windows ムービーメーカーなどの外観をマネしてみました。

MediaElementTest.lzh (54,839 bytes)

−以上−