Closed wlitke closed 1 year ago
Das Auslesen der Device IDs funktioniert scheinbar (NAudio). Der Eingang/die Eingabe über die ausgelesene ID funktioniert (Mikrophone). Aber: Der Ausgang/die Ausgabe über die ausgelesene ID (Lautsprecher) funktioniert nicht.
AudioConfig.FromMicrophoneInput("{0.0.1.00000000}.{aa1b986d-6bad-47a8-8906-884b5da53905}") funktioniert AudioConfig.FromSpeakerOutput("{0.0.1.00000000}.{6b02cf3b-9c78-4114-8e6f-69443d227202}") funktioniert nicht
AudioConfig.FromDefaultSpeakerOutput() funktioniert auch, nur ist das ja wieder ohne spezielle ID. @wlitke Hast du eine Idee?
Das Auslesen der IDs hat nicht richtig funktioniert. Die ID, die eigentlich nötig ist, wurde nicht erkannt. Mit {0.0.0.00000000}.{17e63a9c-9a80-44d8-a8ee-2f6cacaf3879} klappt es. Habe diese ID jetzt über den Geräte-Manager ausgelesen.
@eppstephan Wie telefonisch besprochen, werde ich mir das mal näher ansehen.
@wlitke Ich habe schon mal die Logik zum Konsumieren der Device IDs committed, die wir ja sowieso brauchen, egal, ob der Benutzer die IDs über die Konsole wählt oder sie in die config einträgt (und sie dazu aus dem Geräte-Manager kopiert).
@eppstephan Also irgendetwas ist ganz faul. Ich habe nun eine ganze Weile recherchiert und verschiedene Tests gemacht. Die momentane Implementierung bringt bei mir leider gar keine Ausgabe mehr zustande. Selbst wenn ich auch nur eine ganze simple statische Ausgabe erreichen möchte, geschieht gar nichts. Auch nicht bei Nutzung von "AudioConfig.FromDefaultSpeakerOutput
". Sobald die Funktion "await synthesizer.SpeakTextAsync
" aufgerufen wird, läuft der Prozess in eine Blockade. Bisher habe ich noch nicht herausgefunden was das genau verursacht, bleibe jedoch am Ball.
@wlitke Das Problem, dass gar nichts mehr ausgegeben wird, hatte ich gestern auch, nachdem ein Windows Update installiert wurde. Egal wie, die Ausgabe ging nicht mehr. Mit dem Update hatten sich bei mir auch die IDs geändert. Ich habe dann das Update deinstalliert und nochmal installiert und neu gestartet, dann ging es mit Aktualisierung der IDs wieder.
@eppstephan Ich habe jetzt nochmal das Text-To-Speech Beispiel von Microsoft umgesetzt und kann weiterhin kein funktionierendes Ergebnis produzieren. Der untenstehende Fehler wird geworfen. Ich werde nun noch spezifischer auf Fehlersuche gehen.
Reason=Error
ErrorCode=ServiceTimeout
ErrorDetails=[USP error: timeout waiting for the first audio chunk]
@eppstephan Wir sind nicht einzigen, die diesen Fehler haben. Das Problem ist seit einigen Tagen bekannt und ist tatsächlich auf ein Windows Update zurückzuführen (siehe Links unten). Microsoft arbeitet bereits mit Hochdruck an einer Problemlösung. Ich schlage vor, dass wir die Behebung des Fehlers abwarten und dann mit der Entwicklung fortfahren. Solange das nicht funktioniert, ist eine Fortsetzung wenig sinnvoll.
@wlitke https://github.com/Azure-Samples/cognitive-services-speech-sdk/issues/1692 wurde geschlossen, obwohl die Lösung nicht funktioniert. Habe KB5019509 manuell installiert, die Ausgabe geht dennoch nicht (habe es mal mit dem JDK versucht anstatt mit .NET, allerdings der selbe Fehler).
Reason=Error
ErrorCode=ServiceTimeout
ErrorDetails=USP error: timeout waiting for the first audio chunk
Wie wollen wir weiter vorgehen? Weiter warten? Hatte überlegt, ob man das Auslesen der IDs nicht doch schon versuchen könnte, jedoch habe ich es bisher nicht vollständig lösen können, dass wirklich alle IDs angezeigt werden.
@eppstephan Juhu, bei mir funktioniert der folgende Windows 10 Patch, womit die Sprachausgabe wieder wie erwartet funktioniert: https://www.catalog.update.microsoft.com/Search.aspx?q=KB5020435
Das Gegenstück für Windows 11 wird mit folgendem Patch bereitgestellt: https://www.catalog.update.microsoft.com/Search.aspx?q=KB5020387
Bitte führe mal den Download und die Installation durch und teste es erneut.
Momentan verwendet die App das Mikrofon als Eingangs-Kanal und die reguläre Soundausgabe als Ausgangs-Kanal. Um die App im komplexeren Umfeld (Soundkarte mit mehreren Ein- und Ausgängen) verwenden zu können, sollten die verfügbaren Eingangs- und Ausgangs-Kanäle beim Programmstart ermittelt und zur Auswahl gestellt werden.
Implementierungs-Hinweis: Stelle die ermittelten Eingangs- und Ausgangs-Kanäle als nummerierte Liste dar und lass den Benutzer die Nummer mit dem gewünschten Eingangs- bzw. Ausgangs-Kanal eingeben.