2016-06-20 19 views
5

Ich möchte Text-zu-Sprache mit vielen Stimmen in vielen Sprachen tun.Wie SpVoice sofort in WPF anhalten?

Ich versuchte SpeechSynthesizer (Ref: System.Speech) aber es erlaubt nur 2 englische Stimmen. Nach der Installation von 6 englischen Stimmen von der Microsoft-Seite kann ich immer noch keine anderen Stimmen bekommen.

Ich wechselte zu SpVoice (Ref: Microsoft Speech Object Library). SpVoice kann 6 Stimmen erkennen, die ich gerade installiert habe. Das Problem ist, wenn ich spVoice.Pause() rufe, verzögert es immer 0,5 Sekunden, bevor es aufhört, vollständig zu sprechen. Ich habe auch versucht, AlertBoundary für SpVoice zu setzen, aber es hat nicht geholfen.

SpeechSynthesizer kann sofort mit SpeakAsyncCancelAll anhalten, funktioniert aber nur mit Standard-Voices.

Antwort

0

Grundsätzlich pausiert die Methode Pause die Stimme an der nächstgelegenen Alarmgrenze und schließt das Ausgabegerät, sodass sie von anderen Stimmen verwendet werden kann.

spVoice.Speak() Methode kann synchron oder asynchron aufgerufen werden. Wenn sie synchron aufgerufen wird, kehrt die Methode erst zurück, wenn der Text gesprochen wurde. Wenn es asynchron aufgerufen wird, kehrt es sofort zurück und die Stimme spricht als Hintergrundprozess.

Ich hoffe, Sie rufen spVoice.Speak() synchron. Deshalb bekommen Sie dieses Problem. Verwenden Sie asynchrone Methode anstelle von synchron, Ihr Problem sollte gelöst werden. Dann wird spVoice.Pause() sofort pausieren.

SpVoice spVoice = new SpVoice(); 
spVoice.Speak ("Testing spVoice",SpeechVoiceSpeakFlags.SVSFlagsAsync); 
//...... 
spVoice.Pause(); 
+0

Danke. Eigentlich habe ich spVoice asynchron benutzt. Ich denke nicht, dass dies eine Lösung ist. –