C# でオーディオ入力をキャプチャするために NAudio ライブラリを使用しています。
int _deviceID;
double _previewVal;
private void PreviewData()
{
WaveIn waveIn = new WaveIn();
waveIn.DeviceNumber = _deviceID;
waveIn.DataAvailable += waveIn_DataAvailable;
int sampleRate = 8000; // 8 kHz
int channels = 1; // mono
waveIn.WaveFormat = new WaveFormat(sampleRate, channels);
waveIn.StartRecording();
}
void waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
for (int index = 0; index < e.BytesRecorded; index += 2)
{
short sample = (short)((e.Buffer[index + 1] << 8) |
e.Buffer[index + 0]);
_previewVal = sample / 327.68f;
}
}
関数 PreviewData は、オーディオ入力デバイス (私のシステムでは 4 つ) ごとに同時に呼び出されます。1 つのデバイスに対してのみメソッドを呼び出すと、動作しているように見えますが、もう一度呼び出すと、「AlreadyAllocated calling waveInOpen」という例外が発生します。誰かがこれを回避する方法を知っていますか?