Scott HanselmanのBabySmashコードを変更して、他の言語をサポートしています。
- これらの手順に従って、音声プラットフォームと新しい言語をインストールしました。
言語がレジストリに表示されるようになりました。
Windows で言語を選択して再生できるようになりました。
System.Speech.Synthesis.SpeechSynthesizer.GetInstalledVoices()
声を返すようになりました。- ただし、以下のコードでは、 「System.ArgumentException: 音声を設定できません。一致する音声がインストールされていないか、音声が無効になっています。」
SelectVoice()
というエラーがスローされます。
string phrase = null;
SpeechSynthesizer speech = new SpeechSynthesizer();
CultureInfo keyboardCulture = System.Windows.Forms.InputLanguage.CurrentInputLanguage.Culture;
InstalledVoice neededVoice = speech.GetInstalledVoices(keyboardCulture).FirstOrDefault();
if (neededVoice == null)
{
phrase = "Unsupported Language";
}
else if (!neededVoice.Enabled)
{
phrase = "Voice Disabled";
}
else
{
speech.SelectVoice(neededVoice.VoiceInfo.Name);
}
speech.Speak(phrase);
にアップグレードしてみました
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Speech.dll
。のバージョンと言語パックが一致することを確認しました。
Microsoft.Speech.dll
このコードは、既にインストールされているデフォルトの音声で機能します。
必死になって、リフレクションを介して直接呼び出すことさえ試みまし
System.Speech.Internal.Synthesis.VoiceSynthesis.GetVoice()
たが、まったく同じエラーが発生しました。
ご協力いただけると大変助かります。ありがとう。