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)null ではないことを示しますが、ブロック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 に答える