2016-06-20 3 views
5

Я хочу сделать текст в речь со многими голосами на многих языках.Как временно приостановить SpVoice в WPF?

Я попробовал SpeechSynthesizer (Ref: System.Speech), но он позволяет только 2 голоса на английском языке. После установки 6 английских голосов с сайта Microsoft я до сих пор не могу получить никаких других голосов.

I изменено на SpVoice (Ссылка: Библиотека объектов речи Microsoft). SpVoice может распознать 6 голосов, которые я только что установил. Проблема в том, когда я звоню spVoice.Pause(), он всегда задерживает 0,5 секунды, прежде чем перестанет говорить полностью. Я также попытался установить AlertBoundary для SpVoice, но это не помогло.

SpeechSynthesizer может сделать паузу сразу с SpeakAsyncCancelAll, но работает только с голосами по умолчанию.

ответ

0

В принципе, метод Pause приостанавливает голос на ближайшей границе предупреждений и закрывает выходное устройство, позволяя ему использовать другие голоса.

spVoice.Speak() метод можно назвать синхронно или асинхронно. При вызове синхронно метод не возвращается до тех пор, пока текст не будет произнесен; при вызове асинхронно он возвращается немедленно, и голос говорит как фоновый процесс.

Я надеюсь, что вы звоните spVoice.Speak() синхронно. Вот почему вы получаете эту проблему. Поэтому вместо синхронного использования используйте асинхронный метод, ваша проблема должна быть решена. Затем spVoice.Pause() немедленно остановится.

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

Спасибо. Фактически, я использовал spvoice асинхронно. Я не думаю, что это решение. –