NAudio を使ったWAVファイルの制御
NAudio を利用すると、WAVファイルの再生時間の取得や再生回数の制御が可能です。
目次
NAudio のインストール
NAudio を使用するには、NuGet からインストールする必要があります。
NuGet からインストール
Install-Package NAudio
Visual Studio の「NuGet パッケージ マネージャー」から NAudio を検索してインストールすることもできます。
1. WAVファイルの再生時間を取得
using System;
using NAudio.Wave;
class Program
{
static void Main()
{
using (var reader = new AudioFileReader("test.wav"))
{
TimeSpan duration = reader.TotalTime;
Console.WriteLine($"再生時間: {duration.TotalSeconds} 秒");
}
}
}
ポイント
reader.TotalTimeで 音声ファイルの再生時間を取得。
2. WAVファイルを再生
using System;
using NAudio.Wave;
class Program
{
static void Main()
{
using (var audioFile = new AudioFileReader("test.wav"))
using (var outputDevice = new WaveOutEvent())
{
outputDevice.Init(audioFile);
outputDevice.Play();
Console.WriteLine("再生中... Enterキーで終了");
Console.ReadLine(); // ユーザーがEnterを押すまで再生
}
}
}
ポイント
WaveOutEventを使用してWAVを再生。Console.ReadLine();で プログラムが即終了しないようにする。
3. 再生回数を指定して再生
方法1: ループを使う
using System;
using NAudio.Wave;
class Program
{
static void Main()
{
string filePath = "test.wav";
int repeatCount = 3; // 再生回数
for (int i = 0; i < repeatCount; i++)
{
using (var audioFile = new AudioFileReader(filePath))
using (var outputDevice = new WaveOutEvent())
{
outputDevice.Init(audioFile);
outputDevice.Play();
// 再生が終わるまで待つ
while (outputDevice.PlaybackState == PlaybackState.Playing)
{
System.Threading.Thread.Sleep(100);
}
}
}
}
}
ポイント
forループを使い 指定回数だけ再生。while (outputDevice.PlaybackState == PlaybackState.Playing)で 再生が終わるまで待機。
方法2: PlaybackStopped イベントを使う
using System;
using NAudio.Wave;
class Program
{
private static int playCount = 0;
private static int maxPlayCount = 3; // 再生回数
private static WaveOutEvent outputDevice;
private static AudioFileReader audioFile;
static void Main()
{
PlayAudio("test.wav");
// 再生が終わるまで待機
Console.WriteLine("Enterキーで終了");
Console.ReadLine();
}
static void PlayAudio(string filePath)
{
if (playCount < maxPlayCount)
{
playCount++;
Console.WriteLine($"再生 {playCount}/{maxPlayCount}");
outputDevice = new WaveOutEvent();
audioFile = new AudioFileReader(filePath);
outputDevice.Init(audioFile);
outputDevice.Play();
// 再生が終了したら次の再生を行う
outputDevice.PlaybackStopped += (sender, e) =>
{
outputDevice.Dispose();
audioFile.Dispose();
if (playCount < maxPlayCount)
{
PlayAudio(filePath);
}
};
}
}
}
ポイント
PlaybackStoppedイベントを利用して 再生終了後に次の再生を自動で開始。playCountをカウントし、指定回数に達したら終了。
まとめ
| 機能 | 方法 |
|---|---|
| WAVファイルの再生 | WaveOutEvent.Play(); |
| 再生時間の取得 | NAudio.AudioFileReader.TotalTime; |
| 再生回数の指定 | for ループ or PlaybackStopped イベント |
| 再生開始位置の変更 | audioFile.CurrentTime = TimeSpan.FromSeconds(x); |
| 一時停止・再開 | outputDevice.Pause(); / outputDevice.Play(); |
| 停止 | outputDevice.Stop(); |
どの方法を使うべきか?
| 用途 | 適した方法 |
|---|---|
| シンプルな再生のみ | WaveOutEvent を使用 |
| 再生時間の取得が必要 | NAudio.AudioFileReader.TotalTime |
| 再生回数を指定したい | for ループ または PlaybackStopped イベント |
.wav 以外のフォーマットも再生したい | NAudio |
結論
- 再生回数の指定・再生時間の取得には
NAudioが必要。 PlaybackStoppedを使うと綺麗にループできる。
NAudio を使うことで、柔軟な音声再生が可能になります!
訪問数 285 回, 今日の訪問数 1回






ディスカッション
コメント一覧
まだ、コメントがありません