Reported by bartperemans on 2012-08-30 10:21
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?
Attachment 2011_3.txt added by bartperemans on 2012-08-30 10:22
Attachment 2012_2.txt added by bartperemans on 2012-08-30 10:22
Comment 1 by briang1 on 2012-08-30 17:08
I wonder could you perhaps set the logging level to debug and then upload the file for the failing sapi 5? Its a bit lacking in details at the moment.
One idea for you is to test a portable version which will have its own .ini file in case some corruption has caused the issue in the old .ini file.
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.
Comment 3 by bartperemans on 2012-08-31 09:01
I copied the file you mentioned, and now it works fine. I also downloaded some other files form the export site.
Revision main,4597: OK, works.
Revision main,4803: Not OK, doesn't work.
Revision main,5029: Not OK, doesn't work.
Comment 4 by jteh on 2013-03-15 02:34
This issue is also covered in this thread on nvda-dev.
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.
Comment 5 by jteh on 2013-03-15 07:28
This should now be fixed in 4e389eb.
Milestone changed from None to 2013.1