NAudioを利用してサウンドファイルを再生するコード

NAudioを利用してサウンドファイルを再生するコードを紹介します。

事前準備

NAudioをインストールします。
NuGetパッケージマネージャーで以下のコマンドまたは、GUIのパッケージマネージャーでNAudioをインストールします。

Install-Package NAudio -Version 2.0.1

または

Install-Package NAudio

プロジェクトの依存関係のパッケージのノード内に、NAudioの項目が追加されます。
NAudioを利用してサウンドファイルを再生するコード:画像1

  • NuGetパッケージマネージャーコンソールでのインストール手順の詳細はこちらの記事を参照してください。
  • GUIのNuGetパッケージマネージャーでのインストール手順の詳細はこちらの記事を参照してください。

プログラム:サウンドファイルの再生

UI

下図のフォームを作成します。ボタンを1つ、OpenFileDialogを1つ配置します。

NAudioを利用してサウンドファイルを再生するコード:画像2

コード

下記のコードを記述します。

using NAudio.Wave;

namespace SimplePlaySound
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    }

    private void button1_Click(object sender, EventArgs e)
    {
      if (openFileDialog1.ShowDialog() == DialogResult.OK)
      {
        WaveOutEvent outputDevice = new WaveOutEvent();
        AudioFileReader afr = new AudioFileReader(openFileDialog1.FileName);
        outputDevice.Init(afr);
        outputDevice.Play();
      }
    }
  }
}

解説

OpenFileDialogを開き、ファイルを選択します。ファイルが選択された場合にifブロック内が実行されます。

  if (openFileDialog1.ShowDialog() == DialogResult.OK)
  {
    /* 中略 */
  }

WaveOutEventオブジェクトを作成し出力デバイスのオブジェクトを用意します。

  WaveOutEvent outputDevice = new WaveOutEvent();

AudioFileReaderオブジェクトを作成しサウンドファイルを読み込みます。AudioFileReaderのコンストラクタの第一引数にサウンドファイルのパスを与えます。

  AudioFileReader afr = new AudioFileReader(openFileDialog1.FileName);

WaveOutEventオブジェクトのInitメソッドを呼び出し、出力デバイスにサウンドファイルを設定します。Initメソッドの第一引数に再生するサウンドの AudioFileReaderオブジェクトを与えます。

  outputDevice.Init(afr);


WaveOutEventオブジェクトのPlayメソッドを呼び出し、サウンドを再生します。

  outputDevice.Play();

実行結果

上記のプロジェクトを実行します。下図のウィンドウが表示されます。
NAudioを利用してサウンドファイルを再生するコード:画像3

ボタンをクリックします。ファイルを開くダイアログが表示されますので、再生したいサウンドファイルを選択します。
NAudioを利用してサウンドファイルを再生するコード:画像4

サウンドが再生されます。ウィンドウの表示は変わりません。
NAudioを利用してサウンドファイルを再生するコード:画像5

補足1
サウンド再生中でもメインスレッドはブロックされません。ウィンドウはフリーズしません。
補足2
Waveファイル以外のサウンドファイルも再生できます。Flac, Mp3のサウンドも再生できます。

プログラム:サウンドファイルの再生停止、ボリューム変更

サウンドファイルの停止やボリュームの変更ができるコードを紹介します。

UI

下図のフォームを作成します。ボタンとOpeFileDialogとTrackBarコントロール(スライダー)を配置します。

NAudioを利用してサウンドファイルを再生するコード:画像6

コード

下記のコードを記述します。

using NAudio.Wave;

namespace SoundPlayer
{
  public partial class FormMain : Form
  {
    WaveOutEvent outputDevice;
    AudioFileReader afr;

    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      if (openFileDialog1.ShowDialog() == DialogResult.OK)
      {
        outputDevice = new WaveOutEvent();
        afr = new AudioFileReader(openFileDialog1.FileName);
        outputDevice.Init(afr);
        label1.Text = openFileDialog1.FileName;
      }
    }

    private void button2_Click(object sender, EventArgs e)
    {
      outputDevice.Play();
    }

    private void button3_Click(object sender, EventArgs e)
    {
      outputDevice.Pause();
    }

    private void button4_Click(object sender, EventArgs e)
    {
      outputDevice.Stop();
    }

    private void button6_Click(object sender, EventArgs e)
    {
      afr.Close();
      outputDevice.Dispose();
      label1.Text = "";
    }

    private void trackBar1_ValueChanged(object sender, EventArgs e)
    {
      outputDevice.Volume = (float)(trackBar1.Value/100f);
    }

    private void button7_Click(object sender, EventArgs e)
    {
      afr.Position = 0;
    }
  }
}

解説

[Open]ボタンのClickイベントです。WaveOutEventオブジェクトを作成して、AudioFileReaderでサウンドファイルを開き、 Initメソッドで設定します。先に紹介した再生のみのプログラムのコードとほぼ同じです。

    private void button1_Click(object sender, EventArgs e)
    {
      if (openFileDialog1.ShowDialog() == DialogResult.OK)
      {
        outputDevice = new WaveOutEvent();
        afr = new AudioFileReader(openFileDialog1.FileName);
        outputDevice.Init(afr);
        label1.Text = openFileDialog1.FileName;
      }
    }


[Play]ボタンのClickイベントです。WaveOutEventオブジェクトのPlayメソッドを呼び出し再生を開始します。

    private void button2_Click(object sender, EventArgs e)
    {
      outputDevice.Play();
    }

[Pause]ボタンのClickイベントです。WaveOutEventオブジェクトのPauseメソッドを呼び出します。~

    private void button3_Click(object sender, EventArgs e)
    {
      outputDevice.Pause();
    }

[Stop]ボタンのClickイベントです。WaveOutEventオブジェクトのStopメソッドを呼び出します。~

    private void button4_Click(object sender, EventArgs e)
    {
      outputDevice.Stop();
    }

[Prev]ボタンのClickイベントです。再生位置を最初に戻す場合は、AudioFileReaderオブジェクトのPositionプロパティを0に設定して、ファイルのシーク位置を最初に戻します。~

    private void button7_Click(object sender, EventArgs e)
    {
      afr.Position = 0;
    }


TrackBarのValueChangedイベントを実装します。トラックバーでつまみが変更したタイミングでイベントが呼び出されます。WaveOutEventオブジェクトのボリュームプロパティは0から1.0の範囲の値となるため、 トラックバーのMinプロパティを0、Maxプロパティを100に設定した場合は、100で割った値をVolumeプロパティに設定します。

    private void trackBar1_ValueChanged(object sender, EventArgs e)
    {
      outputDevice.Volume = (float)(trackBar1.Value/100f);
    }


[Close]ボタンのクリックイベントです。WaveOutEventオブジェクトを開放し、AudioFileReaderオブジェクトを閉じます。

    private void button6_Click(object sender, EventArgs e)
    {
      outputDevice.Dispose();
      afr.Close();
      label1.Text = "";
    }

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。
NAudioを利用してサウンドファイルを再生するコード:画像7

[Open]ボタンをクリックします。ファイルを開くダイアログが表示されますので、再生するサウンドファイルを選択します。ファイルが開かれるとラベルにファイルのパスが表示されます。
NAudioを利用してサウンドファイルを再生するコード:画像8

[Play]ボタンをクリックします。サウンドの再生が始まります。
NAudioを利用してサウンドファイルを再生するコード:画像9

スライダーをドラッグして変更するとボリュームが変化することが確認できます。
NAudioを利用してサウンドファイルを再生するコード:画像10

[Pause]ボタンをクリックするとサウンドが一時停止します。
NAudioを利用してサウンドファイルを再生するコード:画像11

[Play]ボタンをクリックすると再生が再開されます。
NAudioを利用してサウンドファイルを再生するコード:画像12

[Stop]ボタンをクリックすると再生が停止します。
NAudioを利用してサウンドファイルを再生するコード:画像13

[Prev]ボタンをクリックします。再生位置が最初に巻き戻されます。
NAudioを利用してサウンドファイルを再生するコード:画像14

[Play]ボタンをクリックすると、サウンドが最初から再生されます。
NAudioを利用してサウンドファイルを再生するコード:画像15

[Close]ボタンをクリックするとファイルが閉じられます。
NAudioを利用してサウンドファイルを再生するコード:画像16

ファイルが閉じられるとLabelの値がクリアされます。
NAudioを利用してサウンドファイルを再生するコード:画像17

サウンドの停止やボリュームの変更ができました。

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2022-02-06
Copyright © 1995–2025 iPentec all rights reserverd.