2016-06-20 18 views
5

Voglio fare il Text-to-speech con molte voci in molte lingue.Come sospendere SpVoice immediatamente in WPF?

Ho provato SpeechSynthesizer (Ref: System.Speech) ma consente solo 2 voci inglesi. Dopo aver installato 6 voci inglesi dal sito Microsoft, non riesco ancora a ottenere altre voci.

Sono stato modificato in SpVoice (Rif .: Libreria oggetti linguaggio Microsoft). SpVoice può riconoscere 6 voci che ho appena installato. Il problema è che quando chiamo spVoice.Pause(), il ritardo è sempre di 0,5 secondi prima che smetta di parlare completamente. Ho anche provato a impostare AlertBoundary per SpVoice ma non è stato d'aiuto.

SpeechSynthesizer può interrompere immediatamente con SpeakAsyncCancelAll ma funziona solo con le voci predefinite.

risposta

0

Fondamentalmente, il metodo Pause mette in pausa la voce al limite di avviso più vicino e chiude il dispositivo di uscita, consentendone l'utilizzo da parte di altre voci.

spVoice.Speak() metodo può essere chiamato in modo sincrono o asincrono. Quando viene chiamato in modo sincrono, il metodo non ritorna finché il testo non è stato pronunciato; quando viene chiamato in modo asincrono, ritorna immediatamente e la voce parla come un processo in background.

Spero che chiami lo spVoice.Speak() in modo sincrono. Ecco perché hai riscontrato questo problema. Quindi utilizzare il metodo asincrono anziché sincrono, il problema dovrebbe essere risolto. Quindi spVoice.Pause() si fermerà immediatamente.

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

Grazie. In realtà, ho usato spVoice in modo asincrono. Non penso che questa sia una soluzione. –

Problemi correlati