在 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 事件

为啥 Windows 在 KeyDown 上播放哔声,但在 DoubleClick 上不播放?

c#中的keydown由于某种原因不起作用

c# keydown事件问题

在 keydown() 上立即重放音频

只要用户按住键,如何播放音调?