C# 防止在聊天应用程序中重播语音消息。
我正在用C#制作一个带有语音信息的局域网聊天应用程序。我使用的是SAPI 5.1,在说出消息时遇到了问题。如果我写信息“HI”,他的计算机将接收信息并说出“HI”这个词,这是可以的,但是如果我写一条新信息,例如“HELLO”,他的计算机将重复说出第一条信息“HI”,然后说出“HELLO” 旧消息“HI”不应再次重复,它应显示新消息“HELLO” 这是我的密码:C# 防止在聊天应用程序中重播语音消息。,c#,C#,我正在用C#制作一个带有语音信息的局域网聊天应用程序。我使用的是SAPI 5.1,在说出消息时遇到了问题。如果我写信息“HI”,他的计算机将接收信息并说出“HI”这个词,这是可以的,但是如果我写一条新信息,例如“HELLO”,他的计算机将重复说出第一条信息“HI”,然后说出“HELLO” 旧消息“HI”不应再次重复,它应显示新消息“HELLO” 这是我的密码: private void rtbConversation_TextChanged(object sender, EventArgs e)
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
属性传递给speech API,那么从逻辑上讲,到目前为止收到的所有消息都将被发送,包括之前发送过的任何消息
尝试使用导致富文本框文本更改的基础事件,而不是每次富文本框文本更改时调用代码。例如,您是否有某种类型的侦听器可以公开类似于MessageReceived
事件的消息?此类事件应仅包含收到消息的文本。然后可以将其传递给语音API
如果您可以监视消息的唯一方法是处理RichTextBox.TextChanged
事件,那么您必须有一些方法将新文本与以前的文本进行比较,并且只说出已添加的内容
顺便说一句,您的
speech.Speak()
呼叫和speech.Voice
分配似乎顺序错误。我想您应该在调用Speak()
方法之前设置Voice
属性。如果它按原样工作,那么我猜这是因为您正在使用异步标志调用Speak()
方法,然后语音
被设置得太快,以至于它在运行的大多数时候都能正常工作。Hello Adam Ralph您能给出一个答案的示例代码吗?请