C#语音合成

4
我有一个应用程序,它将文本文件读入字节数组中,然后我将该数组转换为字符串,并将其作为输入发送到SpeechSynthesizer的speak方法,但是speak方法不会发声。如果我只发送正常的临时字符串,它可以正常工作,但是当我将字节数组转换为字符串时,它无法正常工作。我所做的就是从文本文件读取行时使用以下代码行。
UTF8Encoding temp = new UTF8Encoding(true);
string whatToSay = temp.getString(b);
speech.Speak(whatToSay); // it doesn't work even though the above line returns the  
                            correct string

所以我想知道如果我只写这个,有什么区别:
spech.Speak("hello"); // this works perfect

这些字符串有区别吗?speak方法不支持UTF8吗?

1
你尝试过往返转换(播放一个字符串,然后将其转换为字节并将这些字节再次转换回字符串,尝试播放它)字符串,以查看UTF-8是否存在问题吗? - Suresh
不,但我会尝试。 - Elior
@sthotakura,我按照你的建议做了,它起作用了。 - Elior
所以,导致问题的不是UTF-8编码,而是你的输入数据源。它可能以不同的格式提供数据。 - Suresh
问题已经解决了。我使用了FileStream来代替StreamReader处理文件,这样问题就得到了解决。不管怎样,还是谢谢。 - Elior
1个回答

2

我没有看到你的代码有任何问题,但也许你的变量b是不同的。我不确定出了什么问题,但是你可以尝试将音频文件保存在某个地方并检查它是否正在播放:

 using (SpeechSynthesizer synth = new SpeechSynthesizer()) {
     synth.SetOutputToWaveFile(@"C:\temp\Sample.wav");
     PromptBuilder builder = new PromptBuilder();
     builder.AppendText("Hello World !"); //You can send a variable here also.
     synth.Speak(builder); 
}

感谢您的回答,变量b是字节数组,它是保存从文本文件中读取的内容的缓冲区。 - Elior
可能你正在从那个文本文件中发送不合适的值。你应该解析文本以删除SpeechSynthesizer的非法字符。 - Bura Chuhadar
问题已经解决了..我使用FileStream代替StreamReader来处理文件,这样问题就解决了。无论如何还是谢谢您的帮助。点一个赞。 - Elior

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接