阻止语音消息在聊天应用程序中重播

本文关键字:应用程序 聊天 语音 消息 | 更新日期: 2023-09-27 18:20:21

我正在使用C#制作一个带有语音消息的局域网聊天应用程序。我使用的是SAPI 5.1,我在传递消息时遇到了问题。如果我写信息"HI",他的电脑会收到信息并说出"HI"这个词,这是可以的,但如果我写一条新的信息,例如"HELLO",他的计算机会重复说出第一条信息"嗨",然后说出"HELLO"这个词。

旧消息"HI"不应再次重复,它应该说新消息"HELLO"。

这是我的代码:

private void rtbConversation_TextChanged(object sender, EventArgs e)
{
    speech.Rate = speechRate;
    speech.Speak(rtbConversation.Text, SpeechVoiceSpeakFlags.SVSFlagsAsync);
    speech.Voice = speech.GetVoices(string.Empty, 
                          string.Empty).Item(combo1.SelectedIndex); 
}

阻止语音消息在聊天应用程序中重播

当调用RichTextBoxTextChanged事件时,您似乎正在运行此代码。假定RichTextBox累积消息。假设您随后将RichTextBoxText属性传递给语音API,则逻辑上可以得出到目前为止接收到的所有消息都将被说出,包括之前说过的任何消息。

与其每次富文本框的文本更改时都调用代码,不如尝试使用导致富文本框文本更改的底层事件。例如,您是否有某种监听器,它会公开类似MessageReceived事件的内容?此类事件应仅包含收到的消息的文本。然后您可以将其传递给语音API。

如果您监控消息的方式是处理RichTextBox.TextChanged事件,那么您必须有某种方法将新文本与以前的文本进行比较,并且只说出添加的内容。

顺便说一句,您的speech.Speak()调用和speech.Voice分配的顺序似乎不正确。我想您应该在调用Speak()方法之前设置Voice属性。如果它按原样工作,那么我想这是因为您使用异步标志调用Speak()方法,然后Voice被设置得太快了,以至于它在运行的大多数时候都能按要求工作。