问题
I am modifying Scott Hanselman's BabySmash code to support other languages.
- I installed the speech platform and a new language per these steps.
The language now shows up in the registry:
The language can now be selected and played by Windows:
System.Speech.Synthesis.SpeechSynthesizer.GetInstalledVoices()
now returns the voice.- However
SelectVoice()
in the code below throws the error "System.ArgumentException: Cannot set voice. No matching voice is installed or the voice was disabled."
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);
I've tried upgrading to
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Speech.dll
.I've verified that the versions of
Microsoft.Speech.dll
and the language pack match.This code works for the default voices I've already had installed.
In desperation, I've even tried invoking
System.Speech.Internal.Synthesis.VoiceSynthesis.GetVoice()
directly through reflection, but same exact error.
I would greatly appreciate any help you can provide! Thanks.
回答1:
ha ha I feel special: this post on Python actually solved my problem: build configuration platform needs to be x64, not Any CPU
!
回答2:
Another solution is to install (x64) bits version of Microsoft Speech Platform SDK and Microsoft Server Speech Platform Runtime. I think that you had installed (x86) bits of both and the plataform try to read it in (x64) bits.
I had the same problem that you but on the contrary and this works to me!
回答3:
In my case Instead of the library System.Speech.Synthesis i need to use Microsoft.Speech.Synthesis. For that we need to go to Solution Explorer on VisualStudio --> References and Browse for Microsoft.Speech.dll
using Microsoft.Speech.Synthesis;
After that you will have other Runtime Languages available.
SpeechSynthesizer synth = new SpeechSynthesizer();
// Output information about all of the installed voices.
foreach (InstalledVoice voice in synth.GetInstalledVoices())
{
VoiceInfo info = voice.VoiceInfo;
Console.WriteLine(" Name: " + info.Name);
Console.WriteLine(" Culture: " + info.Culture);
Console.WriteLine(" Age: " + info.Age);
Console.WriteLine(" Gender: " + info.Gender);
Console.WriteLine(" Description: " + info.Description);
Console.WriteLine(" ID: " + info.Id);
}
回答4:
changing the user identity to Localsystem solve my problem !
来源:https://stackoverflow.com/questions/34776593/speechsynthesizer-selectvoice-fails-with-no-matching-voice-is-installed-or-th