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

Другие вопросы по тегам