cmdrmcdonald / EliteDangerousDataProvider

Apache License 2.0
134 stars 31 forks source link

Change TTS voice is ignored #262

Closed Kessica closed 7 years ago

Kessica commented 7 years ago

Whatever I do, I cannot get EDDI to recognise my TTS default voice. It is currently set to Zirapro which is one of the en-US voices. I have even set my locale to en-US, but regardless of what I do, I always get Anna. For me this is a problem as it is not very clear, being partially deaf. I also cannot wear headphones with my hearing aids as it gets too painful after a while. So I need a way to get this working properly.

I have noticed in AppData/Roaming/speech.json that there is an entry for "standardVoice" which is set to null. I am wondering if this is part of the problem. Can I hard code the voice that I want here?

Ta very much

Tkael commented 7 years ago

Have you set a voice inside of EDDI's 'Text-to-Speech' tab / verified that your desired voice is selected?

Kessica commented 7 years ago

tts_1 tts_2 As you can see, there is a difference between the 32 bit and 64 bit. In desperation I bought Emma and installed it, which thankfully the 64 bit version picked it up. So EDDI will only pick up the 64 bit TTS, where as Win7 will only show you the 32 bit voices, despite being a 64 bit OS. The page you referenced is a bit of a misnomer as it doesn't actually do what it describes. I have spent many hours before installing Emma, scouring the web, and the only way to get 32 bit voices into 64 bit is to play around with the registry and then register a few dlls.

The fault is not with EDDI per se, but with Microsoft, However EDDI could make it a bit easier to say where it is picking up the voices from, as nothing makes sense when you compare the windows ctrl panel tts dialog and what you hear from EDDI or what it shows in the tts list. So it would be very useful for either eddi to provide a 32 bit interface to the voices, or better still, be able to pick whatever OS one would like to use, either 32 or 64 bit. It would save a lot of heartache and pain. Understanding the issue has been key here. That has been the major problem...

Tkael commented 7 years ago

What does EDDI currently show in your TTS list?

untitled

Kessica commented 7 years ago

tts_3 It just shows the voices that are in the 64 bit list.

Tkael commented 7 years ago

I did a bit more digging on this tonight and I have a few new comments:

  1. In speech.json, "standardVoice" should only be returning null if you set the voice to the Windows TTS default. If you've selected something else in EDDI, you should be able to see it there. If you can't, there may be a Windows folder permissions issue preventing the file from being written?
  2. If you're trying to install / use additional Microsoft voices, you may need to install the 64 bit runtime available here. https://www.microsoft.com/en-us/download/details.aspx?id=27225
  3. I think EDDI is hooking into system settings for the speech output and list of available voices. I've looked at the code but I don't know how to implement a process that would allow you to choose from either 64 bit or 32 bit voices. Given that the developer has stepped away from the project and so many of the users of this program are knowledge-poor in this area, I don't think it likely that your request can be implemented through EDDI. I hope you've been able to find another solution.
Kessica commented 7 years ago

(User hat off, programming hat on)

I think you may have hit the nail on the head with the runtime issue. I looked at the MSDN documentation for voice selection, and it seems that the only real choice you have is by selecting a voice by culture: https://msdn.microsoft.com/EN-US/library/kx54z3k7 in which there doesn't seem to be any way to select either 32 or 64 bit versions.

I think the only way this can be achieved is by being able to select programmatically which runtime can be used. This might be possible by either reading the registry, or discovering what DLLs are available and then selecting the right one. I would think that this is would mean a lot of experimentation, as Microsoft is not exactly forth coming with ways of doing this. I have done something similar in the past with msxml however they gave examples of this, and was reasonably pain free on the coding side even with un-managed code calling managed code (C++)

(User hat on) I have now got a voice I can use and hear clearly, which was the original object of the exercise. I wasn't aware that the original coder was no longer supporting his code, so your input and help is even more gratefully received. I think that, together we have highlighted a problem with Microsoft's implementation and opened a deep can of worms. The good thing to come from this, is that we have now highlighted this problem here, so that if anybody else has a similar problem, they can see that this has been addressed, and there doesn't really seem to be a viable solution.

If other users would like to consider buying other voices for their TTS, then details are here: http://harposoftware.com/en/english-uk/141-emma-british-english-voice.html

Thanks for your help

Kess

Kessica commented 7 years ago

PS: I will leave you to close this issue, in case you have any further remarks to make :+1:

Tkael commented 7 years ago

I'm glad you found a resolution. I have no further comments, but since I'm not a moderator or similar I do not have access to close this issue (or even tag it). Please go ahead and hit 'closed' for this issue - our comments will still be a searchable record on this project. 🙂

Kessica commented 7 years ago

Thanks :D closing. Kess