阻止语音消息在聊天应用程序中重播
本文关键字:应用程序 聊天 语音 消息 | 更新日期: 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);
}
当调用RichTextBox
的TextChanged
事件时,您似乎正在运行此代码。假定RichTextBox
累积消息。假设您随后将RichTextBox
的Text
属性传递给语音API,则逻辑上可以得出到目前为止接收到的所有消息都将被说出,包括之前说过的任何消息。
与其每次富文本框的文本更改时都调用代码,不如尝试使用导致富文本框文本更改的底层事件。例如,您是否有某种监听器,它会公开类似MessageReceived
事件的内容?此类事件应仅包含收到的消息的文本。然后您可以将其传递给语音API。
如果您监控消息的方式是处理RichTextBox.TextChanged
事件,那么您必须有某种方法将新文本与以前的文本进行比较,并且只说出添加的内容。
顺便说一句,您的speech.Speak()
调用和speech.Voice
分配的顺序似乎不正确。我想您应该在调用Speak()
方法之前设置Voice
属性。如果它按原样工作,那么我想这是因为您使用异步标志调用Speak()
方法,然后Voice
被设置得太快了,以至于它在运行的大多数时候都能按要求工作。