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
を使うことで、柔軟な音声再生が可能になります!
ディスカッション
コメント一覧
まだ、コメントがありません