NAudioを利用して、ASIOドライバでサウンドを再生する手順を紹介します。
NAudioをインストールします。
NuGetパッケージマネージャーで以下のコマンドまたは、GUIのパッケージマネージャーでNAudioをインストールします。
Install-Package NAudio -Version 2.0.1
または
Install-Package NAudio
正常にインストールできると、ソリューションエクスプローラーのプロジェクトの子ノードの[依存関係]ノードの[パッケージ]の子項目にNAudioの項目が追加されます。
下図のフォームを作成します。Button, ComboBox, TrackBar, OpeFileDialog のコントロールを配置します。
下記のコードを記述します。
using NAudio.Wave;
namespace AsioPlaySound
{
public partial class FormMain : Form
{
AsioOut asioOut;
AudioFileReader afr;
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string[] DriverList = AsioOut.GetDriverNames();
foreach (string s in DriverList)
{
comboBox1.Items.Add(s);
}
}
private void button2_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
asioOut = new AsioOut(comboBox1.SelectedItem.ToString());
afr = new AudioFileReader(openFileDialog1.FileName);
afr.Volume = (float)(trackBar1.Value / 100f);
asioOut.Init(afr);
asioOut.Play();
}
}
private void trackBar1_ValueChanged(object sender, EventArgs e)
{
afr.Volume = (float)(trackBar1.Value / 100f);
}
}
}
ASIOドライバーの一覧を取得しコンボボックスに表示します。
ASIOドライバーはAsioOut.GetDriverNames()
メソッドで取得できます。
private void button1_Click(object sender, EventArgs e)
{
string[] DriverList = AsioOut.GetDriverNames();
foreach (string s in DriverList)
{
comboBox1.Items.Add(s);
}
}
ファイルを開くダイアログを表示し再生するサウンドファイルを選択します。
ファイルを選択した場合にifブロック内を実行します。
private void button2_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
/* 中略 */
}
}
AsioOutオブジェクトを作成します。コンストラクタの第一引数に再生するASIOドライバー名を与えます。
asioOut = new AsioOut(comboBox1.SelectedItem.ToString());
AudioFileReaderオブジェクトを作成します。コンストラクタの第一引数に再生するサウンドファイル名を与えます。
afr = new AudioFileReader(openFileDialog1.FileName);
ボリュームを設定します。AsioOutではボリュームは設定できない(Volumeプロパティはあるが利用は非推奨)ため、入力ソースのサウンドファイル側のボリュームプロパティを設定します。
Volumeプロパティは0から1.0の範囲で指定するため、Maxプロパティを100にしたトラックバーコントロールでは、100で割った値をVolumeプロパティに設定します。
afr.Volume = (float)(trackBar1.Value / 100f);
AsioOutオブジェクトのInitプロパティを呼び出します。引数には再生するAudioFileReaderオブジェクトを与えます。
asioOut.Init(afr);
AsioOutオブジェクトのPlayメソッドを呼び出し、再生を開始します。
asioOut.Play();
プロジェクトを実行します。下図のウィンドウが表示されます。
[Button1]をクリックします。
Button1クリック後にコンボボックスを開くと、インストールされているASIOドライバーの一覧が表示されます。再生するASIOドライバーをクリックして選択します。
ASIOドライバーが選択できました。[button2]をクリックします。
button2をクリックするとファイルを開くダイアログが表示されます。再生するサウンドファイルを選択します。
ファイルが開かれ、サウンドが再生されます。トラックバーのつまみをドラッグしてボリュームを調整できます。
ASIOドライバーを利用してサウンドファイルを再生できました。