NAudio запись никогда не получает образец
Я пытаюсь выполнить простейший пример NAudio для записи с устройства ввода, но по какой-то причине не могу вызвать функцию обратного вызова DataAvailable.
В приведенном ниже примере точка останова на Do Something никогда не получает удар.
WaveIn waveIn = new WaveIn();
waveIn.DeviceNumber = 0;
waveIn.DataAvailable += waveIn_DataAvailable;
waveIn.RecordingStopped += new EventHandler(waveIn_RecordingStopped);
waveIn.WaveFormat = new WaveFormat(44100, 1);
waveIn.StartRecording();
private void waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
Do Something
}
Я проверил, перепроверил и еще раз проверил, что настройки в точности совпадают с настройками, используемыми тестовым приложением NAudio VoiceRecorder, которое способно записывать звук с точно такими же настройками.
Единственное отличие состоит в том, что мое тестовое приложение представляет собой консольное приложение, а не приложение WPF. Будет ли это иметь значение?
2 ответа
Да, это потому, что это консольное приложение, а класс WaveIn использует сообщения Windows в качестве обратных вызовов. Если вы можете загрузить и собрать самый последний исходный код из codeplex, вы можете использовать совершенно новый WaveInEvent
класс (добавлен 6 марта 2012 г.), который не использует цикл сообщений Windows.
В качестве альтернативы, если вы знакомы с установкой предварительных пакетов с использованием NuGet, вы можете установить последнюю предварительную версию NAudio (в настоящее время 1.5.4-бета), в которой есть этот класс.
Тем не менее, вы подтвердили, что ваше устройство действительно?
Попробуйте что-то вроде этого;
int waveInDevices = WaveIn.DeviceCount;
for (int waveInDevice = 0; waveInDevice < waveInDevices; waveInDevice++)
{
WaveInCapabilities deviceInfo = WaveIn.GetCapabilities(waveInDevice);
MessageBox.Show("Device " + waveInDevice + ": " + deviceInfo.ProductName +
", " + deviceInfo.Channels + " channels");
}
чтобы убедиться, что у вас есть записывающее устройство.
Bernie