NAudioで信号処理 (その1)
チュートリアル その1
NAudioを使ってWaveファイルの再生
C# Audio Tutorial 1 - Wave File with NAudio
肝は、WAVファイルをロードして、DIrectSoundで再生する。
wave = new NAudio.Wave.WaveFileReader(open.FileName); output = new NAudio.Wave.DirectSoundOut(); output.Init(new NAudio.Wave.WaveChannel32(wave)); output.Play();
メインのソースコードは以下のようになる。WAVの再生には、WAVファイルの選択->WAVのReaderの設定->出力先を指定->再生開始。のほかにも再生中断/再開や、再生が停止されたときのDispose処理が関わってくる。このチュートリアル(その1)では基本的なWAVファイル再生をベースとして、周辺のプレ処理、クロージング処理を実装しているので注目して欲しい。
using System; using System.Windows.Forms; namespace Tutorial1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { button_PauseWav.Enabled = false; } private NAudio.Wave.WaveFileReader wave = null; private NAudio.Wave.DirectSoundOut output = null; private void button_OpenWav_Click(object sender, EventArgs e) { OpenFileDialog open = new OpenFileDialog(); open.Filter = "Wave File (*.wav,*.WAV) |*.wav;*.WAV;|All files (*.*)|*.*"; if (open.ShowDialog() != DialogResult.OK) return; DisposeWave(); wave = new NAudio.Wave.WaveFileReader(open.FileName); output = new NAudio.Wave.DirectSoundOut(); output.Init(new NAudio.Wave.WaveChannel32(wave)); output.Play(); button_PauseWav.Enabled = true; } private void button_PauseWav_Click(object sender, EventArgs e) { if (output != null) { if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing) output.Pause(); else if (output.PlaybackState == NAudio.Wave.PlaybackState.Paused) output.Play(); } } // Wave関連のインスタンスをDispose private void DisposeWave() { if (output != null) { if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing) output.Stop(); output.Dispose(); output = null; } if (wave != null) { wave.Dispose(); wave = null; } } // フォームが閉じられたとき、Wave関連のインスタンスをDispose private void Form1_FormClosing(object sender, FormClosingEventArgs e) { this.DisposeWave(); } } }