1

我在尝试在墨西哥西班牙语中使用文本到语音合成时遇到问题。我首先检查是否安装了西班牙语语音:

String Text = "some text in Spanish";

IEnumerable<VoiceInformation> spanishVoices = from voice in InstalledVoices.All
    where voice.Language == "es-MX"
    select voice;

if (spanishVoices.ElementAt(0) != null)
    synth.SetVoice(spanishVoices.ElementAt(0));

await synth.SpeakTextAsync(Text);

现在,调试器显示它spanishVoices.ElementAt(0)不为空,但我得到一个System.IO.DirectoryNotFoundException,如果我注释掉该if块就不会发生这种情况(并且我得到的文本发音就像它是用英语写的一样)。

检查手机上的语音设置后,发现手机需要下载西班牙语语音。完成此操作后,该应用程序按预期工作。

所以,问题是InstalledVoices.All说实话,因为西班牙语并没有真正安装。

有什么可靠的方法可以确保它确实是这样吗?

4

1 回答 1

0

我从 7.5 开始就一直在研究 WP,它一直是一个令人沮丧和错误的平台。

我能想到的唯一方法是列出真正存在的声音:

var voices = new List<VoiceInformation>();
using (var s = new SpeechSynthesizer())
{
    foreach (var v in InstalledVoices.All)
    {
        try
        {
            s.SetVoice(v);
            s.SpeakTextAsync(" ").AsTask().Wait();
            voices.Add(v);
        } catch (Exception) { }
    }
}

请注意,设置语音不会失败,需要运行 TTS 才能使其失败...看起来平台认为语音存在,但带有“语音库”的文件不存在。

另请注意,由于抛出异常(源自 COM),此代码需要几秒钟才能运行,这意味着将此代码放在静态初始化程序中不是一个好主意。

于 2016-09-06T14:59:14.717 回答