C# Windows FormsでSoundPlayerを使ったWAVファイルの回数指定自動再生

このコードは、C# の Windows Forms アプリケーションで System.Media.SoundPlayer を使用して、特定のWAVファイル (test.wav) を再生するプログラムです。Timer を利用して、一定間隔で最大4回まで音を再生する仕組みになっています。


コードの解説

using System;
using System.Media;
using System.Windows.Forms;

public class Form1 : Form
{
    private SoundPlayer player;
    private Timer playTimer;
    private int playCount;

    public Form1()
    {
        player = new SoundPlayer("test.wav");
        player.Load(); // WAVファイルを事前に読み込む

        playTimer = new Timer { Interval = 500 }; // 500ms 間隔(音が途切れにくくなる)
        playTimer.Tick += PlaySound;
    }

    private void TogglePlay(object sender, EventArgs e)
    {
        if (playTimer.Enabled)
        {
            playTimer.Stop();
        }
        else
        {
            playCount = 0;
            playTimer.Start();
            PlaySound(null, null);
        }
    }

    private void PlaySound(object sender, EventArgs e)
    {
        if (playCount < 4)
        {
            player.Play();
            playCount++;
        }
        else
        {
            playTimer.Stop();
        }
    }
}

ポイント

1. SoundPlayer の事前読み込み

player = new SoundPlayer("test.wav");
player.Load();
  • SoundPlayer はデフォルトでは 再生時にファイルを読み込む ため、最初の再生時に遅延が発生する可能性があります。
  • Load(); を事前に実行することで、WAVファイルをメモリにロードし、スムーズに再生できます。

2. Timer を使用した再生管理

playTimer = new Timer { Interval = 500 };
playTimer.Tick += PlaySound;
  • Timer を使うことで、一定間隔(500msごと)に PlaySound を呼び出し、4回まで自動的に再生できます。

3. TogglePlay() で再生のON/OFF

private void TogglePlay(object sender, EventArgs e)
{
    if (playTimer.Enabled)
    {
        playTimer.Stop();
    }
    else
    {
        playCount = 0;
        playTimer.Start();
        PlaySound(null, null);
    }
}
  • playTimer が動作中なら停止、停止中なら 再生カウントをリセットして開始
  • PlaySound(null, null); を即時実行することで、最初の再生を待たずに行う。

4. PlaySound() で最大4回の再生

private void PlaySound(object sender, EventArgs e)
{
    if (playCount < 4)
    {
        player.Play();
        playCount++;
    }
    else
    {
        playTimer.Stop();
    }
}
  • playCount が4未満なら player.Play(); を実行し、カウントを増やす。
  • 4回再生したら playTimer.Stop(); でタイマーを停止する。

動作の流れ

  1. TogglePlay() が呼ばれる(ボタンを押すなど)。
  2. playTimer が動作していれば停止し、そうでなければ playCount をリセットして playTimer.Start()
  3. PlaySound(null, null); が即時実行され、1回目の player.Play(); が実行。
  4. playTimerTick イベントが 500ms ごとに発生し、PlaySound() が呼ばれる。
  5. 合計4回の再生が完了すると playTimer.Stop(); で自動的に停止。

まとめ

仕様説明
SoundPlayerWAVファイルを再生する
player.Load();事前読み込みで再生遅延を防ぐ
Timer500ms ごとに PlaySound() を呼び出す
TogglePlay()再生の開始・停止を管理
PlaySound()4回まで再生し、再生が終わったら Timer を停止

このプログラムは、一定回数のサウンド再生を制御するシンプルなWindows Formsアプリケーション になっています。