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を愛用