Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止在聊天应用程序中重播语音消息。_C# - Fatal编程技术网

C# 防止在聊天应用程序中重播语音消息。

C# 防止在聊天应用程序中重播语音消息。,c#,C#,我正在用C#制作一个带有语音信息的局域网聊天应用程序。我使用的是SAPI 5.1,在说出消息时遇到了问题。如果我写信息“HI”,他的计算机将接收信息并说出“HI”这个词,这是可以的,但是如果我写一条新信息,例如“HELLO”,他的计算机将重复说出第一条信息“HI”,然后说出“HELLO” 旧消息“HI”不应再次重复,它应显示新消息“HELLO” 这是我的密码: private void rtbConversation_TextChanged(object sender, EventArgs e)

我正在用C#制作一个带有语音信息的局域网聊天应用程序。我使用的是SAPI 5.1,在说出消息时遇到了问题。如果我写信息“HI”,他的计算机将接收信息并说出“HI”这个词,这是可以的,但是如果我写一条新信息,例如“HELLO”,他的计算机将重复说出第一条信息“HI”,然后说出“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
属性传递给speech API,那么从逻辑上讲,到目前为止收到的所有消息都将被发送,包括之前发送过的任何消息

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

如果您可以监视消息的唯一方法是处理
RichTextBox.TextChanged
事件,那么您必须有一些方法将新文本与以前的文本进行比较,并且只说出已添加的内容


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

Hello Adam Ralph您能给出一个答案的示例代码吗?请