PlaySound Windows APIを用いてWavファイルを再生する - C#
Windows APIのPlaySound 関数を用いてWaveファイルを再生します。
UI
フォームにボタンを2つとopenFileDialogを設置します。
コード
フォームに設置したボタンのClickイベントにコードを実装します。usingにInteropSrivesへの参照を追加します。PlaySound APIの宣言コードを記述します。
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 SoundPlay
{
public partial class FormMain : Form
{
private System.Media.SoundPlayer player;
[System.Runtime.InteropServices.DllImport("winmm.DLL", EntryPoint = "PlaySound",
SetLastError = true, CharSet = CharSet.Unicode, ThrowOnUnmappableChar = true)]
private static extern bool PlaySound(string szSound, System.IntPtr hMod,
PlaySoundFlags flags);
[System.Flags]
public enum PlaySoundFlags : int
{
SND_SYNC = 0x0000,
SND_ASYNC = 0x0001,
SND_NODEFAULT = 0x0002,
SND_MEMORY = 0x0004,
SND_LOOP = 0x0008,
SND_NOSTOP = 0x0010,
SND_NOWAIT = 0x00002000,
SND_ALIAS = 0x00010000,
SND_ALIAS_ID = 0x00110000,
SND_FILENAME = 0x00020000,
SND_RESOURCE = 0x00040004,
SND_PURGE = 0x0040,
SND_APPLICATION = 0x0080
}
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
PlaySound(openFileDialog1.FileName, new System.IntPtr(), PlaySoundFlags.SND_ASYNC);
//PlaySound(openFileDialog1.FileName, IntPtr.Zero, PlaySoundFlags.SND_ASYNC); //こちらも可
}
}
private void button2_Click(object sender, EventArgs e)
{
PlaySound(null, new System.IntPtr(), PlaySoundFlags.SND_PURGE);
//PlaySound(null, IntPtr.Zero, PlaySoundFlags.SND_PURGE);
}
}
}
解説
Button1
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
}
ファイル選択ダイアログを開きます。ファイルを選択し、[OK]ボタンを押した場合にif文内を実行します。
PlaySound(openFileDialog1.FileName, new System.IntPtr(), PlaySoundFlags.SND_ASYNC);
にて、PlaySound関数にSND_ASYNCを与え呼び出します。再生を開始します。SND_ASYNCにより再生は非同期で実行されます。再生中にフォームが固まることはありません。SND_SYNCを与えて呼び出した場合は同期実行になり再生が終わるまでフォームに制御は移りません。
Button2
PlaySound(null, new System.IntPtr(), PlaySoundFlags.SND_PURGE);
PlaySound関数にSND_PURGEを与えて呼び出し再生を停止します。
実行結果
プログラムを実行しButton1を押すとファイル選択ダイアログボックスが表示されますので、Wavファイルを選択し、[OK]ボタンを押すとWaveファイルを再生します。Button2を押すと再生を中止します。
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。