我目前正在开展一个项目,我想让SpeechSynthesizer说出文字。我还想要一个文本块来显示所说的单词。如果您不理解语音合成器,那么您可以阅读。
所以基本上问题是我无法找到一种有效的方法将每个字母附加到文本框中的文本中,当它由语音合成器说出时。所以看起来语音合成器正在输入他正在说的内容。
示例
如果我愿意这样做:
SpeechSynthesizer x = new SpeechSynthesizer();
x.SpeakAsync("Hello there");
我希望文本框文本在x(SpeechSynthesizer)说出的单词时一起写。像这样的东西: http://youtu.be/hx6JL7PsLrg?t=1m56s
答案 0 :(得分:0)
正如Eric所说,你必须使用 SpeechSynthesizer.SpeakProgress 事件:
例如:
var ss = new SpeechSynthesizer();
ss.SpeakProgress += (sender, args) => txtBox.Text += args.Text;
ss.Speak("Hello this is " + true);
答案 1 :(得分:0)
这是一种hacky(并且不保证会逐字逐句),但您可以使用PhonemeReached
事件作为提示来显示下一个字母(并在单词中断处停止)和然后使用SpeakProgress
事件生成单词中的剩余字母。如果你正在使用SSML,你当然需要跳过标记。