目次

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やデータベースの記事なども担当。
掲載日: 2011-10-15
iPentec all rights reserverd.