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 を直接操作しなければなりません。
私が公開している .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 に付属のサンプルコードを参考にしましたが、実用的に作りました。ただし、細かい点は手抜きしています。
このアプリケーションの使い方ですが、[ファイル]-[ファイルを開く] を選択すると、ファイル選択ダイアログボックスが開きますので、画像ファイル(.avi、.wmv、.mpeg ファイル)を選択してください。次に、画面下部にある左端のボタンを押すと、再生を開始します。
2 番目のボタンは [一時停止]、3 番目のボタンは [中止] です。"Volume" は音声のボリューム、"Speed" は再生速度で、1 が標準、1 未満のとき、標準より遅く、1 を超えると、標準より速くなります。"Position" は再生を開始する位置です。右端のプログレスバーは再生中の進捗状況を表示します。
アプリケーションの外観は、Windows Vista に付属の Windows フォトギャラリーや Windows ムービーメーカーなどの外観をマネしてみました。
MediaElementTest.lzh (54,839 bytes)
−以上−