Это новая область программирования на C #, в которую я углубляюсь, поэтому, пожалуйста, прости мое невежество по этому поводу. Я пытался узнать больше о цифровой обработке сигналов с помощью NAudio. Я начинаю с того, что пытаюсь создать простое консольное приложение. Используя приведенный ниже код, событие NAudio «DataAvailable» используется только в течение 5 секунд, после чего оно больше не вызывается. Когда данные сохраняются в файл .WAV, длина файла также составляет всего 5 секунд.
Я вручную назначил голосовой тест через микрофон, сказав: «Миссисипи 1, Миссисипи 2 и т. Д.» до 10 раз, чтобы убедиться, что я хотя бы пытался записывать более 5 секунд. После «Миссисипи 5» запись автоматически останавливается и вызывает событие «RecordingStopped». Внутри события «DataAvailable» я просто записываю Guids в окно вывода, чтобы убедиться, что программа все еще работает, но через 5 секунд она прекращает запись в консоль вывода.
Есть ли шаг, который я пропускаю, чтобы сказать NAudio о бесконечной записи, пока пользователь не запустит событие, которое затем заставит его остановиться?
Это код, который я пытаюсь использовать:
static void Main(string[] args)
{
int deviceCount = WaveIn.DeviceCount;
if (deviceCount > 0)
{
waveFileWriter = new WaveFileWriter(@"F:/" + Guid.NewGuid() + ".wav", new WaveFormat(44100, 24, WaveInEvent.GetCapabilities(deviceCount - 1).Channels));
waveInEvent = new WaveInEvent();
waveInEvent.DeviceNumber = deviceCount - 1;
waveInEvent.WaveFormat = new WaveFormat(44100, 24, WaveInEvent.GetCapabilities(deviceCount - 1).Channels);
WaveInProvider waveIn = new WaveInProvider(waveInEvent);
waveInEvent.DataAvailable += new EventHandler<WaveInEventArgs>(waveInEvent_DataAvailable);
waveInEvent.StartRecording();
}
// used to keep the console window open for testing...
Console.ReadLine();
}
private static void waveInEvent_DataAvailable(object sender, WaveInEventArgs e)
{
if (waveFileWriter == null)
{
return;
}
Console.WriteLine(Guid.NewGuid());
}
private static void waveInEvent_RecordingStopped(Object sender, StoppedEventArgs e)
{
Console.Write("This is getting called automatically after 5 seconds... IDK why???");
}
Я ожидал бы, что приведенный выше код будет выполняться бесконечно, пока не сработает событие, которое остановит запись, однако это не так.
Спасибо.
UPDATE:
Для ясности переименована переменная "waveIn" в "waveInProvider".