我正在尝试创建一个文本到语音的应用程序,在这里我可以通过组合框选择语音并以该语音读出一些文本。
我通过使用以下命令获取可用声音的名称来填充组合框:
private List<String> getInstalledVoices()
{
var installedVoices = new List<String>();
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
foreach (InstalledVoice voice in synth.GetInstalledVoices())
{
installedVoices.Add(voice.VoiceInfo.Name);
}
}
return installedVoices;
}
然后我将组合框的DataSource属性设置为结果列表。
现在,我的问题是,当涉及到实际阅读文本时,无论选择什么,它都只会以一种声音读出。使用调试器,我可以看到当程序到达synth.SpeakAsync()时,合成器的声音已正确设置为正确的值,但是读出时声音不会改变。
我没有任何错误或任何东西!
private void speak(String toSpeak)
{
SpeechSynthesizer synth = new SpeechSynthesizer();
synth.SelectVoice(voiceSelectionBox.SelectedItem.ToString());
PromptBuilder promptBuilder = new PromptBuilder();
promptBuilder.AppendText(toSpeak);
synth.SpeakAsync(promptBuilder);
}
我在做什么错?!
已安装的声音- 名称:Microsoft Hazel Desktop 文化:en-GB 年龄:成人 性别女 说明:Microsoft Hazel Desktop-英语(英国) ID:TTS_MS_EN-GB_HAZEL_11.0 启用:真 找不到支持的音频格式 附加信息-年龄:成人 性别女 语言:809 名称:Microsoft Hazel Desktop 共享的发音: SpLexicon:{0655E396-25D0-11D3-9C26-00C04F8EF87C} 供应商:Microsoft 版本:11.0
名称:eSpeak-en + f2 文化:美国 年龄:成人 性别:男 说明:eSpeak-EN + F2 ID:eSpeak_1 启用:真 找不到支持的音频格式 附加信息-名称:eSpeak-en + f2 性别:男 年龄:成人 语言:409 供应商:http://espeak.sf.net
名称:eSpeak-en-us 文化:美国 年龄:成人 性别:男 说明:eSpeak-EN-US ID:eSpeak_2 启用:真 找不到支持的音频格式 附加信息-名称:eSpeak-en-us 性别:男 年龄:成人 语言:409 供应商:http://espeak.sf.net
名称:eSpeak-en 文化:美国 年龄:成人 性别:男 说明:eSpeak-EN ID:eSpeak 启用:真 找不到支持的音频格式 附加信息-名称:eSpeak-en 性别:男 年龄:成人 语言:409 供应商:http://espeak.sf.net
名称:Microsoft David Desktop 文化:美国 年龄:成人 性别:男 说明:Microsoft David Desktop-英文(美国) ID:TTS_MS_EN-US_DAVID_11.0 启用:真 找不到支持的音频格式 附加信息-年龄:成人 性别:男 语言:409 名称:Microsoft David Desktop 共享的发音: SpLexicon:{0655E396-25D0-11D3-9C26-00C04F8EF87C} 供应商:Microsoft 版本:11.0
名称:Microsoft Zira Desktop 文化:美国 年龄:成人 性别女 说明:Microsoft Zira Desktop-英文(美国) ID:TTS_MS_EN-US_ZIRA_11.0 启用:真 找不到支持的音频格式 附加信息-年龄:成人 性别女 语言:409 名称:Microsoft Zira Desktop 共享的发音: 供应商:Microsoft 版本:11.0
名称:大众朱莉 文化:美国 年龄:成人 性别女 说明:大众朱莉 ID:大众朱莉 启用:真 找不到支持的音频格式 附加信息-年龄:成人 性别女 语言:409; 9 供应商:语音软件 姓名:大众朱莉