在 C# 中的 keydown 上播放键值
Posted
技术标签:
【中文标题】在 C# 中的 keydown 上播放键值【英文标题】:Playing the key value on keydown in C# 【发布时间】:2011-02-06 21:23:44 【问题描述】:我是 C# 的新手,正在为盲人和视障人士开发软件。 在软件中我想要一个文本框,当按下一个键时它会生成一个 声音,例如当按下 j 时它会说 j... 我找到了美妙的文本到语音引擎,并尝试将它与 keydown 事件一起使用,如下所示:
SpeechSynthesizer synth = new SpeechSynthesizer();
char mappedChar = (char)e.KeyValue;
synth.Speak(Convert.ToString(mappedChar));
synth.Dispose();
不幸的是,它太慢了,大约需要。每次击键间隔 1 秒。
任何建议都将不胜感激。
【问题讨论】:
【参考方案1】:我首先不在事件处理程序中创建和处置您的 SpeechSynthesizer
对象。
在程序运行时创建一次对象,然后:
char mappedChar = (char)e.KeyValue;
synth.Speak(mappedChar.ToString());
在您的事件处理程序中。
【讨论】:
感谢您的提示,但改进很小而且还不够。仍有相当大的延迟。我还能做些什么吗? @me1982 - 这很奇怪,我原以为它会产生更大的影响。【参考方案2】:我怀疑语音合成器的构造函数占用了大部分时间。尝试创建一次合成器对象并缓存它,而不是在每次调用时都创建它。
【讨论】:
【参考方案3】:创建一个新的 SpeechSynthesizer 实例的成本很高。
将您的合成器对象定义为表单的成员,在该范围内对其进行实例化,然后在您的事件代码中引用它。例如在伪代码中...
class MyForm
SpeechSynthesizer synth = new SpeechSynthesizer();
...
void On_Click(<params>)
this.synth.Speak(<text>);
【讨论】:
以上是关于在 C# 中的 keydown 上播放键值的主要内容,如果未能解决你的问题,请参考以下文章
当组合框打开时,Silverlight Combobox 触发 KeyDown 事件