/ / Jak ustawić urządzenie wejściowe audio dla Microsoft.Speech rozpoznawacza w VB.Net lub C # dla dowolnego urządzenia audio - vb.net, rozpoznawanie mowy, mowa, sapi, urządzenie audio

Jak ustawić wejściowe urządzenie audio dla rozpoznawania Microsoft.Speech w VB.Net lub C # na dowolnym urządzeniu audio - vb.net, rozpoznawanie mowy, mowa, sapi, urządzenie audio

Chcę użyć Microsoft.Przestrzeń nazw mowy w VB.NET do tworzenia aplikacji telefonicznej. Muszę być w stanie ustawić wejście rozpoznawania na dowolne urządzenie audio zainstalowane w systemie. Microsoft ma metodę rozpoznania.SetInputToDefaultAudioDevice (), ale potrzebuję czegoś takiego jak .SetInputToAudioDeviceID. Jak mogę wybrać inne wejście audio wave z listy urządzeń zainstalowanych w moim systemie? W SAPI używałbym MMSystem i 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)

Jak to zrobić w Microsoft.Speech?

WIĘCEJ INFORMACJI: Chcę wziąć dowolne urządzenie do wprowadzania fal na liście Windows sterowników fal i nas jako dane wejściowe do rozpoznawania mowy. W szczególności mogę mieć kartę Dialogic z wejściem fali zgłoszonym przez TAPI jako ID urządzenia 1-4. W SAPI mogę użyć klasy SpMMAudioIn do utworzenia strumienia i określenia, który identyfikator urządzenia jest powiązany z tym strumieniem. Możesz zobaczyć część tego kodu powyżej. Czy mogę bezpośrednio ustawić Recognizer1.SetInputToAudioStream według identyfikatora urządzenia, tak jak w SAPI? Czy muszę utworzyć kod, który odczytuje bajty i używa buforów itp. Czy muszę utworzyć obiekt MemoryStream? Nie mogę znaleźć żadnego kodu przykładowego w dowolnym miejscu. Co muszę sprawdzić w .NET, aby uzyskać dostęp do ISpeechMMSysAudio / spMMAudioIn w przypadku, gdy coś takiego będzie działać? Ale mam nadzieję, że istnieje sposób na użycie MemoryStream lub czegoś podobnego identyfikator urządzenia i pozwala mi przekazać ten strumień do rozpoznawacza.

UWAGA 2: Dodałem „import Speechlib” do projektu VB, a następnie próbowałem uruchomić następujący kod. Daje błąd wymieniony w komentarzach poniżej, dotyczący braku możliwości ustawienia strumienia audio na obiekt 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

Wydaje się również, że SpeechAudioFormatType nie obsługuje formatów 8 kHz. To staje się coraz bardziej skomplikowane.

Odpowiedzi:

0 dla odpowiedzi № 1

Używałbyś SpeechRecognitionEngine.SetInputToAudioStream. Pamiętaj, że jeśli masz problemy z przesyłaniem strumieniowym, może być konieczne zawinięcie strumienia, jak pokazano na ilustracji tutaj.