@Kovid,
I can only speak from a Windows POV but let me say how thrilled I am that you've added TTS to the calibre Viewer.
I thought I'd pass on a bit of feedback from my initial testing...
- calibre 64-bit: All the Voices I expected to see (both MS and 3rd-party purchases) appeared in the config table.
The only small issue I had was that if I selected a new Voice in config, although it worked correctly when resuming speech, if I re-opened config the wrong Voice was highlighted in the table, i.e. not the one I'd previously selected.
- calibre 32-bit portable: The same issue with wrongly-highlighted Voice in config table.
Plus ... I may be one of very few calibre users who will experience this bug but I'm passing it on anyway. I actually encountered a bug when trying to open the config to select a Voice. I tracked it down to line 26 in windows_config.py
Code:
self.current_voices = tuple((x['name'], language(x), x['age'], x['gender'], x['id']) for x in voice_data)
The problem was that several of my 3rd-party purchased 32-bit Voices are so old that the 'Age' attribute did not exist in the Win registry. I guess all Voices were 'Adult' in 2007. I fixed my registry by manually adding the attribute 'Age' with a value of 'Adult' to the Voices where it was missing and the calibre bug duly disappeared. It might be worth adding a default value of 'Adult' if the 'Age' attribute doesn't exist.