0

音素が話されている正確な瞬間を示すメッセージ ボックスを表示するアプリケーションを構築しようとしています。問題は、これらのメッセージ ボックスが、スピーチが終わった後に音素を表示するのを待つことです。2つのことを同時に行うにはどうすればよいですか?

void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{  
    speech = new SpeechSynthesizer();      
    speech.SetOutputToDefaultAudioDevice();
    speech.SpeakAsync(e.Result.Text);
    speech.PhonemeReached += speech_PhonemeReached;
}
void speech_PhonemeReached(object sender, PhonemeReachedEventArgs e)
{
    if (new[] {"a͡i","o"}.Contains(e.Phoneme))
       MessageBox.Show(e.Phoneme);
}

私はまだ c# を学んでおり、スレッド化の使用方法がよくわかりませんが、これは音声認識エンジンに関連するコードの一部です。

Thread q = new Thread( ()=> sre.SpeechRecognized += (s, args) =>
    {
         foreach (RecognizedPhrase phrase in args.Result.Alternates)
         {
            if (phrase.Confidence > 0.9f)
                sre_SpeechRecognized(s, args);
         }
    });
q.Start();

誰かが私を助けてくれることを願っています...

4

1 に答える 1

1

独自のスレッドで音声認識エンジンを実行し、Invoke を使用してメイン スレッドでメッセージ ボックスを表示します。

void speech_PhonemeReached(object sender, PhonemeReachedEventArgs e)
{
    if (new[] {"a͡i","o"}.Contains(e.Phoneme))
       this.Invoke(new Action(() => { MessageBox.Show(this, e.Phoneme); }));
}
于 2012-12-05T18:54:53.230 に答える