2016-06-20 16 views
5

Tôi muốn chuyển văn bản thành giọng nói với nhiều giọng nói bằng nhiều ngôn ngữ.Làm thế nào để tạm dừng SpVoice ngay lập tức trong WPF?

Tôi đã thử SpeechSynthesizer (Tham khảo: System.Speech) nhưng nó chỉ cho phép 2 tiếng nói tiếng Anh. Sau khi cài đặt 6 tiếng nói tiếng Anh từ trang web của Microsoft, tôi vẫn không thể nhận được bất kỳ tiếng nói nào khác.

Tôi đã thay đổi thành SpVoice (Tham khảo: Thư viện đối tượng lời nói của Microsoft). SpVoice có thể nhận ra 6 giọng nói mà tôi vừa cài đặt. Vấn đề là khi tôi gọi spVoice.Pause(), nó luôn trì hoãn 0,5 giây trước khi ngừng nói hoàn toàn. Tôi cũng đã cố gắng đặt AlertBoundary cho SpVoice nhưng nó không giúp ích gì.

SpeechSynthesizer có thể tạm dừng ngay lập tức với SpeakAsyncCancelAll nhưng chỉ hoạt động với giọng nói mặc định.

Trả lời

0

Về cơ bản, phương thức Pause tạm dừng giọng nói ở ranh giới cảnh báo gần nhất và đóng thiết bị đầu ra, cho phép nó được sử dụng bởi các giọng nói khác.

spVoice.Speak() phương pháp có thể được gọi đồng bộ hoặc không đồng bộ. Khi được gọi đồng bộ, phương thức không trả lại cho đến khi văn bản được nói; khi được gọi không đồng bộ, nó sẽ trả về ngay lập tức và giọng nói phát ra như là một quá trình nền.

Tôi hy vọng bạn đang gọi spVoice.Speak() đồng bộ. Đó là lý do tại sao bạn nhận được vấn đề này. Vì vậy, sử dụng phương pháp không đồng bộ thay vì đồng bộ, vấn đề của bạn nên được giải quyết. Sau đó, spVoice.Pause() sẽ tạm dừng ngay lập tức.

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

Cảm ơn. Trên thực tế, tôi đã sử dụng spVoice không đồng bộ. Tôi không nghĩ đây là một giải pháp. –

Các vấn đề liên quan