C#メモ Windowsフォームアプリケーションでm4aファイルを再生してみる

C#

再生するにはどうすりゃいいんかなぁ…とネットに聞いてみたら、Windowsなら何とかなりそうだったので試してみることに。

ポイントはこんなとこ。

  • 参照設定でPresentationCore.dllとWindowsBase.dllの参照を追加する
  • System.Windows.Media.MediaPlayerをnewでインスタンス化する
  • System.Windows.Media.MediaPlayer.Open()メソッドで開くメディアファイルを指定する
  • System.Windows.Media.MediaPlayer.Play()メソッドでメディアファイルを再生、System.Windows.Media.MediaPlayer.Stop()メソッドで再生を停止する

んで、まずはdllの参照設定をする。
参照設定はWPFのものを使うんだけど、今回はこんな感じ。

  1. ソリューションエクスプローラーでツリー上の参照を右クリックして"参照の追加"メニューをクリックする。
  2. 参照マネージャってダイアログが開くので、左にあるメニューの"参照"をクリックしてから右下の"参照"ボタンをクリックする。
  3. 参照するファイルの選択ダイアログが開くので、WPFフォルダーにある"PresentationCore.dll"ファイルを選択して"追加"ボタンをクリックする。
    今回の場合はC:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationCore.dllを選択した。
  4. 1.~3.と同じ要領で"WindowsBase.dll"を追加する。
    これも今回はC:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\WindowsBase.dllを選択した。
  5. 2つのdllをインポートするとソリューションエクスプローラの参照のところに表示されるので、念のため確認しとく。

ちなみに、WindowsBase.dllの参照を忘れるとビルド時にこんな感じで怒られちゃうので注意…。

error CS0012: 型 'Freezable’ は、参照されていないアセンブリに定義されています。アセンブリ 'WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ に参照を追加する必要があります。

んで、こんなフォームを用意しとく。
再生ボタンと停止ボタンの2つのボタンを追加する感じ。
再生ボタンはOnClickPlayButtonってメソッド名でClickイベントを定義しておく。
停止ボタンはOnClickStopButtonってメソッド名でClickイベントを定義しておく。

再生するm4aファイルはsample.m4aってファイル名でデスクトップに置いておくことにすると、コードはこんな感じ。

public partial class MainForm : Form
{
	/// <summary>
	/// メディアプレイヤー
	/// </summary>
	private System.Windows.Media.MediaPlayer Player
	{
		get;
		set;
	} = null;

	/// <summary>
	/// コンストラクタ
	/// </summary>
	public MainForm()
	{
		InitializeComponent();
	}

	/// <summary>
	/// 再生ボタンをクリックしたときのイベント
	/// </summary>
	/// <param name="sender">イベントを発生したオブジェクト</param>
	/// <param name="arguments">イベントの引数</param>
	private void OnClickPlayButton(object sender, EventArgs arguments)
	{
		// 再生するファイルのパスを設定する
		string location = @"C:\Users\tetsuyanbo\Desktop\Sample.m4a";
		if(!System.IO.File.Exists(location))
		{
			// ファイルが見つからない場合はエラー終了する
			throw new System.IO.FileNotFoundException(location);
		}
		// MediaPlayerをインスタンス化する
		Player = new System.Windows.Media.MediaPlayer();
		// m4aファイルを開く
		Player.Open(new System.Uri(location));
		// m4aファイルを再生する
		Player.Play();
	}
		
	/// <summary>
	/// 停止ボタンをクリックしたときのイベント
	/// </summary>
	/// <param name="sender">イベントを発生したオブジェクト</param>
	/// <param name="arguments">イベントの引数</param>
	private void OnClickStopButton(object sender, EventArgs arguments)
	{
		// MediaPlayerがインスタンス化されているかをあらかじめチェックしておく
		if (Player != null)
		{
			// 再生を停止する
			Player.Stop();
			// ファイルを閉じる
			Player.Close();
			// 初期化する
			Player = null;
		}
	}
}

実行してみたらこんな感じ。
再生ボタンをクリックするとOnClickPlayButtonメソッドが呼ばれてm4aファイルが再生される…って言っても動画ではないので、音が鳴ってることを想像してください…。

停止ボタンをクリックするとOnClickSpotButtonメソッドが呼ばれてm4aの音が鳴り止む。

んまま、明日への自分へのメモってことで。