MediaPlayer (System.Windows.Media.MediaPlayer)を用いてWaveファイルを再生する (ネットワークにあるファイルの再生時の音飛びを抑える方法) - C#

Waveファイルの再生方法として、SoundPlayerを用いる方法PlaySound APIを用いる方法MCIを用いる方法 を紹介しましたが、これらの再生方法ではネットワークフォルダにサウンドファイルがある場合、帯域幅によっては音飛びを起こすことがあります。ここでは、MediaPlayerを用いた音飛びを起こさない再生方法を紹介します。

プロジェクトの設定

プロジェクトのプロパティで使用フレームワークをクライアントプロファイルでないプロファイルに変えます。今回は".NET Framework 4"にしました。

アセンブリの参照設定

System.Windows.Media.MediaPlayerを利用するためのアセンブリ"PresentationCore.dll"アセンブリを参照に追加します。


System.Windows.Freezableを利用するためのアセンブリ"WindowsBase.dll"アセンブリを参照に追加します。


PresentationCore.dll, WindowsBase.dll共に .NET Framework 4の場合"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\"フォルダにあります。

コード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace SoundDemo
{
  public partial class FormMain : Form
  {
    System.Windows.Media.MediaPlayer mediaPlayer;

    public FormMain()
    {
      InitializeComponent();
    }

    private void button_MediaPlayerPlay_Click(object sender, EventArgs e)
    {
      if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
        mediaPlayer = new System.Windows.Media.MediaPlayer();
        mediaPlayer.Open(new System.Uri(openFileDialog1.FileName));
        mediaPlayer.Play();
      }
    }

    private void button_MediaPlayerStop_Click(object sender, EventArgs e)
    {
      mediaPlayer.Stop();
    }
  }
}

解説

openFileDialogを開きファイルを選択します。System.Windows.Media.MediaPlayerのインスタンスを作成し、Openメソッドでファイルを読み込みます。ファイルはUriオブジェクトを指定するため、ローカルのファイルを開く場合は、
mediaPlayer.Open(new System.Uri(openFileDialog1.FileName));
と記述します。
ファイルを開いた後Playメソッドで再生を開始します。再生の停止はStopメソッドを用います。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2011-12-01
iPentec all rights reserverd.