Как настроить входное аудиоустройство для распознавателя Microsoft.Speech в VB.Net или C# на любое аудиоустройство
Я хочу использовать пространство имен Microsoft.Speech в VB.NET для создания приложения телефонии. Мне нужно иметь возможность настроить вход распознавателя на любое аудиоустройство, установленное в системе. У Microsoft есть метод ognizer.SetInputToDefaultAudioDevice(), но мне нужно что-то вроде.SetInputToAudioDeviceID. Как я могу выбрать другой волновой аудиовход из списка устройств, установленных в моей системе? В SAPI я бы использовал MMSystem и SpVoice:
Set MMSysAudioIn1 = New SpMMAudioIn
MMSysAudioIn1.DeviceId = WindowsAudioDeviceID 'set audio input to audio device Id
MMSysAudioIn1.Format.Type = SAFT11kHz8BitMono 'set wave format, change to 8kHz, 16bit mono for other devices
Dim fmt As New SpeechAudioFormatInfo(1000, AudioBitsPerSample.Eight, AudioChannel.Mono)
Recognizer.SetInputToAudioStream(MMSysAudioIN1, fmt)
Как мне сделать это с Microsoft.Speech?
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Я хочу взять любое устройство ввода волн из списка драйверов волн Windows и использовать его как вход для распознавания речи. В частности, у меня может быть карта Dialogic с волновым входом, сообщаемым TAPI как deviceID 1-4. В SAPI я могу использовать класс SpMMAudioIn для создания потока и задания идентификатора устройства, связанного с этим потоком. Вы можете увидеть часть этого кода выше. Могу ли я напрямую установить Recognizer1.SetInputToAudioStream по идентификатору устройства, как я могу это сделать в SAPI? Или мне нужно создать код, который читает байты и использует буферы и т. Д. Нужно ли создавать объект MemoryStream? Я нигде не могу найти пример кода. Что мне нужно проверить в.NET, чтобы получить доступ к ISpeechMMSysAudio / spMMAudioIn в случае, если что-то подобное будет работать? Но, надеюсь, есть способ использовать MemoryStream или что-то подобное, который берет идентификатор устройства и позволяет мне передавать этот поток в распознаватель.
ПРИМЕЧАНИЕ 2: Я добавил "import Speechlib" в проект VB, а затем попытался запустить следующий код. Это дает ошибку, перечисленную в комментариях ниже, о невозможности установить аудиопоток на объект COM.
Dim sre As New SpeechRecognitionEngine
Dim fmt As New SpeechAudioFormatInfo(8000, AudioBitsPerSample.Sixteen, AudioChannel.Mono)
Dim audiosource As ISpeechMMSysAudio
audiosource = New SpMMAudioIn
audiosource.DeviceId = WindowsAudioDeviceID 'set audio input to audio device Id
' audiosource.Format.Type = SpeechAudioFormatType.SAFT11kHz16BitMono
sre.SetInputToAudioStream(audiosource, fmt) <----- Invalid Cast with COM here
Также кажется, что SpeechAudioFormatType не поддерживает форматы 8 кГц. Это становится все сложнее и сложнее.
1 ответ
Вы бы использовали SpeechRecognitionEngine.SetInputToAudioStream. Обратите внимание, что если у вас есть проблемы с потоковым вводом, вам может понадобиться обернуть поток, как показано здесь.