A problem came up with using C# for obtaining lists of Voices. Our C# code ( using GetInstalledVoices method) showed fewer voices on my computer, than a list by KobaSpeech. Even the windows7 control panel for Text to Speech showed fewer voices than KobaSpeech. Why?
Also cool, the C++ mini app could speak with the Kobaspeech Nuance Daniel voice, even though I hadn’t run Kobaspeech after reboot. Daniel voice was available as a SAPI5 voice to our C++ app.
The problem isn’t solved by this hotfix. I obtained the hotfix, ran it, but it shows a dialog saying that it isn’t applicable anymore to .NET 4.5 or higher.
Now we’re trying to figure out why the C# interfaces don’t show certain voices. This Stackoverflow post says its due to 64bit OS and 32bit voices, not mixing well, at least concerning showing Lists of voices. Another short post says basically the same thing. So we tested that, by compiling mini apps with x86 only set as the target CPU, and it only solves 1 problem. It DOES work and allows GetInstalledVoices to find the Nuance Vocalizer Daniel voice, but NOTHING ELSE works, meaning you can’t make that voice speak or return visemes, with C# code.
Maybe it’s possible to manually create a token in the registry, according to this.
January 14, 2014 update. More odd problems. Apparently, the COM version of SAPI provides Word and Sentence events, but the C# managed does not.
January 30,2014 update. We bit the bullet, and re-coded our SAPI speech to use the C++ COM interface, abandoning the C# .NET version. Now I’m worried about unicode for complex languages, which I assumed .NET would handle better.