NAudio запись никогда не получает образец - PullRequest
1 голос
/ 07 марта 2012

Я пытаюсь выполнить простейший пример 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 ]

3 голосов
/ 07 марта 2012

Да, это потому, что это консольное приложение, а класс WaveIn использует сообщения Windows в качестве обратных вызовов.Если вы можете загрузить и собрать самый последний исходный код из codeplex , вы можете использовать новый класс WaveInEvent (добавлен 6 марта 2012 г.), который не использует цикл сообщений Windows.

Кроме того, если вы знакомы с установкой предварительных пакетов с помощью NuGet, вы можете установить последнюю предварительную версию NAudio (в настоящее время 1.5.4-beta ), котораякласс в.

0 голосов
/ 07 марта 2012

Хотя вы уже убедились, что ваше устройство действительно?

Попробуйте что-нибудь подобное;

        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");
        } 

, чтобы убедиться, что у вас есть записывающее устройство.

Берни

...