7

私は Microsoft の Speech Platform Run time を使用しています。SpVoiceインターフェイスを使用して、ランタイムに必要な文を話させています。

文の途中でスピーチを停止するには、このように関数を作成しました

public void StopSpeak()
{
    try
    {
      Speaker.Speak("", SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak);
    }
    catch (COMException ex)
    {

    }
}

しかし、Speech Platform が話しているときにこれを実行すると、次の com エラーが発生します。

Exception from HRESULT: 0x80045006

Microsoft で調べたところ、Wave デバイスがビジー状態であることがわかりました。Speech Platform が文を話すのにビジー状態になるたびに、このエラーが発生することに気付きました。

SpVoice または Speech Platform Runtime に付属するその他のインターフェイスまたはクラスを使用して、文の途中で音声を停止する他の方法はありますか?

ありがとう。

4

2 に答える 2

6

例外を処理せずに Speech を停止するには、Skipメソッド on を使用しSpVoiceます。ドキュメンテーションはこちら

int.MaxValue文をスキップするため、これは機能するはずです。

public void StopSpeak()
{
    Speaker.Skip("Sentence", int.MaxValue);
}
于 2012-10-04T19:17:35.620 に答える
0

まず、SpeechVoiceSpeakFlags を Asyncronous に設定する必要があります。そうすれば、ピリオドや句読点で話すのをカットできます。Pause メソッド経由。

Speaker.Speak("ここに長いテキスト", SpeechLib.SpeechVoiceSpeakFlags.SVSFlagsAsync);

Speaker.Pause();

しかし、読み始めた文を再び読み終え、句読点があれば句読点で停止します。したがって、シーケンスを切断することはありません。

厳しい方法は、 null を設定することです。スピーカー = null; 再開後、停止した場所と続行する場所を再度設定する必要があります。

于 2016-12-07T07:46:13.263 に答える