私は、閲覧されたWebページの内容を話すプロジェクトに取り組んでいます.BrowserはWebControlを使用して作成されました。私は音声エンジンにSAPIを使用しています。私はその谷のSpVoice.speakを読んでいる間、Webページのラインを強調したかったのです。しかし、問題は、ループが音声が完了するのを待たないので、私が非同期の方法でこのspeakメソッドを使用し、Webページの最後の行だけがハイライト表示されるということです。したがって、非常に高速になり、最後の行だけがhighlighted.Highlightメソッドとして表示され、参照Microsoft mshtmlが使用されます。 CODE:SAPIまたは(テキストからスピーチ)の同期問題......... C#
SpeechLib.SpVoice sound_object = new SpeechLib.SpVoice();
bool highlight(string senten)
{
if (senten != null)
{
IHTMLDocument2 doc = (IHTMLDocument2)GetCurrentBrowser().Document.DomDocument;
IHTMLSelectionObject sel = (IHTMLSelectionObject)doc.selection;
IHTMLTxtRange rng = (IHTMLTxtRange)sel.createRange();
rng.collapse(false);
if (rng.findText(senten, 1000000, 0))
{
rng.select();
return true;
}
else
{
return false;
}
}
else
{ return false; }
}
ます。private void Read_ButtonSpkBAR_Click(オブジェクト送信者、EventArgsの電子)ソースコード gettingSourceCodeを取得するための { //コール();
if (highlightToolStripMenuItem.Checked == true)
{
if (PAUSE)
{
sound_object.Resume();
PAUSE = false;
}
else
{
sound_object.Rate = tempoRate;
sound_object.Volume = volume;
string[] splitSentences = Regex.Split(SourceCode, @"(?<=['""A-Za-z0-9][\.\!\?\u2424])\s+(?=[A-Z])");
for (int i = 0; i < splitSentences.Length; i++)
{
highlight(splitSentences[i]);
//MessageBox.Show(splitSentences[i]);
sound_object.Speak(splitSentences[i],SpeechLib.SpeechVoiceSpeakFlags.SVSFlagsAsync);
}
}
}
今はsound_object.Speakある同期の方法で()sound_object.speakを呼び出す場合(splitSentences [I])。ループは音声が完了するのを待ちますが、なぜ強調表示されていないのか分かりません。スピーチ中にソフトウェアがぶら下がってしまいます。つまり、WebBrowserは発言中に何もしませんが、その時点では発言手順はうまくいきます。
ハイライトをチェックするために、私はループの中にメッセージボックスを入れ、ループがメッセージボックスの "OK"ボタンが押されるのを待つとハイライト表示されるのを見ました。しかし、これはまったく良い考えではありません各行に対して「OK」ボタンを押してください。 だから誰でも問題があると私はどのようにSAPIや他のスピーチエンジンを効率的な方法で使用することができますので、私はブラウザをハングアップせずに読むことができます。
わかりません。コードを書いたり、例を挙げたりできますか? – AtanuCSE