Воспроизведение значения ключа на keydown в C # - PullRequest
1 голос
/ 07 февраля 2011


Я довольно новичок в C # и работаю над разработкой программного обеспечения для слепых и слабовидящих людей.
в программном обеспечении я хочу иметь текстовое поле, которое при нажатии клавиши будет
например, звук при нажатии j скажет j ... Я нашел замечательный механизм преобразования текста в речь и попытался использовать его с событием keydown следующим образом:

   SpeechSynthesizer synth = new SpeechSynthesizer();            
   char mappedChar = (char)e.KeyValue;       
   synth.Speak(Convert.ToString(mappedChar));
   synth.Dispose();

к сожалению, это слишком медленно и занимает ок. 1 секунда между каждым нажатием клавиши.

Буду признателен за любое предложение.

Ответы [ 3 ]

5 голосов
/ 07 февраля 2011

Я бы начал с создания и удаления вашего SpeechSynthesizer объекта в обработчике событий.

Создайте объект один раз при запуске программы и просто получите:

char mappedChar = (char)e.KeyValue;       
synth.Speak(mappedChar.ToString());

в вашем обработчике событий.

0 голосов
/ 07 февраля 2011

Создание нового экземпляра SpeechSynthesizer стоит дорого.

Определите ваш синтезирующий объект как член формы, создайте для него экземпляр этой области, а затем просто обратитесь к нему в своем коде события. например в псевдокоде ...

class MyForm
{
  SpeechSynthesizer synth = new SpeechSynthesizer(); 
  ...

  void On_Click(<params>)
  {
     this.synth.Speak(<text>);
  }

}
0 голосов
/ 07 февраля 2011

Подозреваю, что конструктор речевого синтезатора занимает большую часть времени. Попробуйте создать объект синтезатора один раз и кэшировать его, а не создавать его при каждом вызове.

...