System.Media.SoundPlayer で音を再生する


さて、今回はプログラミングネタです。.NET を使ったもっともベーシックな音の再生に挑戦してみましょう。使用するのは、System.Media.SoundPlayer(MSDN) というクラスです。 .NET Framework 2.0 以上で使えますので、XP あたりでも十分動かせます。今回も、.NET C# で Visual Studio 2010 を使います。

SoundPlayer で音を出す

まず、いつも通り Windows フォームアプリケーションのプロジェクトを生成します。Play ボタン、Stop ボタン、そして再生するファイル名を入力するテキストボックスを配置します。

soundplay1

こんな感じ。あとは、System.Media.SoundPlayer のインスタンスを定義して、Play、Stopボタンを押した時の動作を指定するだけ。コードはこんな感じです。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace SoundPlayTest
{
	public partial class Form1 : Form
	{
		private System.Media.SoundPlayer player = null;
		public Form1()
		{
			InitializeComponent();
			// System.Media.SoundPlayer のインスタンス player を生成
			player = new System.Media.SoundPlayer();
		}
		// Play ボタン
		private void buttonPlay_Click(object sender, EventArgs e)
		{
			FileInfo fi = new FileInfo(textBoxSoundFile.Text); //using System.IO;
			if (fi.Extension == ".wav")
			{
				player.SoundLocation = textBoxSoundFile.Text;
				player.Load();
			}
			if (player.IsLoadCompleted)
			{
				player.Play();
			}

		}
		/// Stop ボタン
		private void buttonStop_Click(object sender, EventArgs e)
		{
			player.Stop();
		}
	}
}

FileInfo fi でファイルの拡張子が .wav であることを確認していますが、もっとシンプルに次のようにすることもできます。

private void buttonPlay_Click(object sender, EventArgs e)
{
	player.Play(textBoxSoundFile.Text);
}

これだけです。とても簡単。アプリケーションにちょっとした効果音を追加したりするのにピッタリです。ドラッグ&ドロップでファイルを指定できるようにしてみましょう。メインフォームの AllowDrop プロパティを True にして、DragEnter と DragDrop の2つのメソッドを追加するだけです。DragEnterメソッドでドロップされるのがファイルかどうか判断して、DragDrop メソッドでドロップされたファイルをテキストボックスにセットします。複数のファイルが指定されても、1つ目だけを取り出すようにしましょう。

private void Form1_DragEnter(object sender, DragEventArgs e)
{
	if (e.Data.GetDataPresent(DataFormats.FileDrop))
	{
		e.Effect = DragDropEffects.Copy;
	}
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
	string[] soundFiles =
		(string[])e.Data.GetData(DataFormats.FileDrop, false);
	if (soundFiles.Length>0) textBoxSoundFile.Text = soundFiles[0];
}

System.Media.SoundPlayer クラスでできるのはせいぜいこの程度です。対応するファイル形式は、.wavのみ。では、どんな機能が欲しいでしょうか?

  1. MP3やWMAファイルも再生したい
  2. 再生中などの表示が欲しい
  3. 再生時間表示が欲しい
  4. ポーズ、巻き戻し、早送りがしたい
  5. 音量やPANを調整したい(音量ボリュームでできますが)
  6. レベルメーターが欲しい
  7. プレイリストが欲しい

もし実用的なオーディオ再生アプリケーションを作るのなら、このくらいの機能が最低限欲しいですよね。そんな方には、NAudio がお勧めです。.NET でオーディオ再生やMIDIも扱えるライブラリでASIOにも対応しています。次回は、NAudio の解説でもしましょう。

load_downloadSoundPlayTest.zip をダウンロード

参考

  • ASIO(Wikipedia) http://ja.wikipedia.org/wiki/ASIO
  • System.Media.SoundPlayer(MSDN) http://msdn.microsoft.com/ja-jp/library/ms143766%28v=vs.80%29.aspx
  • NAudio http://naudio.codeplex.com/
印刷
You can skip to the end and leave a response. Pinging is currently not allowed.
Subscribe to RSS Feed Twitter は Ume108 だよ