Исключение NAudio InvalidOperationException при построении WaveIn
Я очень новичок в NAudio и пытаюсь написать небольшую программу, которая записывает звук с микрофона и записывает его в файл Wave. Когда я вызываю функцию recordStuff () в основной функции моей программы, программа не проходит мимо конструкции на объекте WaveIn, и программа умирает с InvalidOperationException, который имеет сообщение "использовать WaveInEvent для записи в фоновом потоке". Может кто-то со знанием Наудио может сказать мне, что это значит? У меня есть попробовал вызвать функцию recordStuff () в собственном потоке, но в итоге получил тот же результат.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NAudio.Wave;
namespace SimpleWave
{
class Recorder
{
public Recorder()
{
writer = new WaveFileWriter("C:UsersPaulDesktopyeah.wav", new NAudio.Wave.WaveFormat(44100, 1));
}
public static List<byte> buff = new List<byte>();
public static WaveFileWriter writer;
public void recordStuff()
{
// WaveIn Streams for recording
WaveIn waveInStream;
waveInStream = new WaveIn();
waveInStream.DeviceNumber = 0;
waveInStream.WaveFormat = new WaveFormat(44100, 2);
writer = new WaveFileWriter(@"C:UsersPaulDesktopthis.wav", waveInStream.WaveFormat);
waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
waveInStream.StartRecording();
}
public void waveInStream_DataAvailable(object sender, WaveInEventArgs e)
{
writer.Write(e.Buffer, 0, e.BytesRecorded);
}
}
}
1 ответов
по умолчанию WaveIn
конструктор использует сообщения Windows для обратных вызовов. Однако при запуске консольного приложения или из фонового потока эти сообщения Windows обрабатываться не будут. Самое простое решение-использовать класса.
waveInStream = new WaveInEvent();
еще одна проблема с вашим кодом заключается в том, что вам нужно сохранить waveInStream
живой, пока вы не закончите запись (т. е. вам нужно будет позвонить StopRecording
в какой-то момент), поэтому вы должны сделать waveInStream
поле Recorder
класса.