I have a problem when accessing my sapi5 windows voices with the new version 2012.2 of NVDA. When changing the eSpeak synthesizer to Microsoft Speech API version 5, the voices don’t work anymore. I get an errormessage: “The synthesizer sapi5 could not be loaded.”
In my previous version it did work without any problems. Please find attached the log files from version 2012.2.1 were it doesn’t work and version 2011.3 where it works.
Could you give me a workaround?
The text was updated successfully, but these errors were encountered:
Comment 2 by jteh on 2012-08-30 23:46
This is bizarre. There was a small change to the sapi5 driver, but it shouldn't have caused this (and doesn't on any other system I've seen).
The first step is to try the old sapi5 driver. I'm not sure how comfortable you are with copying files around, etc., but you need to copy this file into %appdata%\nvda\synthDrivers. Then restart NVDA 2012.2 and see if that works.
We've finally managed to figure out what's going on here. These problematic engines use a token enumerator, so they generate their own ISpeechObjectToken objects. IEnumVARIANT (which is what is used when we iterate) returns IDispatch pointers, but !GetBestInterface doesn't work on the objects returned by these problematic enumerators, so we just get IDispatch, which doesn't work either. However, the Item method on the collection explicitly returns ISpeechObjectToken, which is why fetching by index works correctly. I'll commit a fix shortly with comments so we don't break this again.