EliteDangerousDataProvider icon indicating copy to clipboard operation
EliteDangerousDataProvider copied to clipboard

Problem with EDDI and CereVoice

Open Wyldeheart opened this issue 8 years ago • 15 comments

Hello, I have one of Cereproc's voices installed and selected as the 'Voice' in the text to speech tab of EDDI 2.2.0.

The issue I'm having is EDDI's inconsistent use of the CereVoice. Disabling phonetic speech seems to sort the issue and allows the CereVoice. to operate properly. This seems counter to how it should operate as far as I'm understanding it. Just to note this issue only started after I updated to EDDI 2.2.0 and Voiceattack v1.6.1.27. I use the MultiCrew-profile.vap (2.2) and my operating system is Windows 10 Pro.

The inconsistency is repeatable with a fresh install of EDDI 2.2.0 including a %Appdata% .... EDDI folder delete. When using just this fresh install as a test bed, no Voiceattack loaded, and only changing the Voice to CereVoice, level of voice processing to 0, and unchecking Distort the voice on ship damage. All ships accept Beluga, Cobra Mark III, Cobra Mark IV, Fer de Lance, Viper Mk. III, Viper Mk. IV, and Vulture Use the CereVoice. The ones that do not use CereVoice instead use one of the default Windows voices.

Things I have tried: Fresh install's deleting %Appdata%....EDDI. Fresh installs of Voiceattack. Fresh installs of CereVoice. I have also made sure voice activation and Review Documents and mail to improve accuracy are unchecked. I have tried all the above with and without changing the default voice in Speech Properties to CereVoice. Note: CereVoice has been the only voice used in the Narrator settings in all the above tests.

Wyldeheart avatar Feb 20 '17 14:02 Wyldeheart

It sounds like the issue is that the Cereproc voice does not like your locale. What is the locale of your machine, and which Cereproc voice is it?

cmdrmcdonald avatar Feb 20 '17 15:02 cmdrmcdonald

Location service and General location are set to off (by myself). During Windows installation I chose United Kingdom for timezone and Keyboard layout. Voice is Cereproc Heather. Seems odd that the Cereproc voice would need to confirm where I live?

Wyldeheart avatar Feb 20 '17 15:02 Wyldeheart

The issue is due to phonetic speech requiring a locale (e.g. en_GB), and if the voice decides it can't handle that locale it falls back to a voice that can, hence hearing one voice some times and another at others.

Please could you do the following:

- start EDDI
- enable verbose logging
- on the text to speech tab test Heather with the Vulture (it should fall back to the default voice)
- click the 'send EDDI logs to developers' button
- disable verbose logging

and let me know here? Thanks.

cmdrmcdonald avatar Feb 20 '17 16:02 cmdrmcdonald

Turned on Location and General location for testing purposes. No effect noticed. just to note that when testing in EDDI only I am able to get the voice to change simply by ticking and unticking the Disable phonetic speech option without restarting the app. For testing purposes I restart the app though.

Verbose log completed.. Just to note voice was a windows default, but not the zira voice in the speech properties further disable phonetic speech was unchecked and location services and general location where still enabled from the previous test.

Wyldeheart avatar Feb 20 '17 16:02 Wyldeheart

That log wasn't in verbose mode for some reason. Please could you repeat the process, but restart EDDI after enabling verbose logging to ensure it takes hold? Thanks.

cmdrmcdonald avatar Feb 20 '17 16:02 cmdrmcdonald

Enabled Verbose, restarted EDDI tested Heather/vulture phonetic unchecked/ Location services and General location off this test.Sent test restarted EDDI and disabled Verbose.

Voice audio was not Heather or zira. I think it is using Hazel?

Wyldeheart avatar Feb 20 '17 16:02 Wyldeheart

That looks okay to me, so I'm unsure exactly why it's failing. I have a copy of Heather lying around somewhere so will give it a try locally and see what happens.

cmdrmcdonald avatar Feb 20 '17 17:02 cmdrmcdonald

Okay, Thank you for your help and time with this. :)

Wyldeheart avatar Feb 20 '17 17:02 Wyldeheart

I too am having a similar issue. CereProc Jess fails on some scripts, and it reverts to Microsoft Hazel. Jess works with some scripts, not with others. I have "disable phonetic speech" un-checked. Specifically, the "Docking Granted" script is the one I've been testing. Perhaps the Cereproc voice fails to understand the pronunciation of one of the system/station settings at the beginning of the default script?

Luckfish3 avatar Mar 04 '17 10:03 Luckfish3

I'm getting this issue too - Cereproc Caitlin, with Windows set up for United Kingdom locale. I did change from Microsoft Speech Recognizer 8.0 (English - UK) to Microsoft Speech Recognizer 8.0 (English - US) in the Windows speech recognition settings, to see if that would help, but it didn't.

For what it's worth, I've taken the phonemes from the source code for the problematic ship names and run them through Cereproc in Voice Attack's TTS action, outside of EDDI. Caitlin can pronounce the phonemes just fine. I believe I'm entering exactly what EDDI is generating, based on its source:

This is how I will sound in your <phoneme alphabet="ipa" ph="kəʊbrə">Cobra</phoneme><phoneme alphabet="ipa" ph="mɑːk">Mk</phoneme><phoneme alphabet="ipa" ph="θri">III</phoneme>

rhodium88 avatar Aug 20 '17 21:08 rhodium88

Windows 10 Pro UK version: I wasn't able to select any of the Cereproc voices (I have sarah and heather) under windows. I was able to select the voices under EDDI, but always paused with the test and reverted to default TTS voice. It (Windows TTS control panel) just stated that I was not able to use the Cereproc voice. The voices work fine under VoiceAttack though, but only own TTS commands, not EDDI events (always default TTS voice).

To fix this problem, I figured out to edit the registry entry for the voices.
(remember to export the key first before you edit it. You also need to get permission first before changing the keys) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\CereVoice Heather 4.0.4\Attributes

I removed the Country_id and Language_ID from Attributes. Also I changed the Language from 409;809 to 809.

Rebooted my system and I was able to use the voices as SAPI TTS under the windows TTS. I was now able to do 'test voice' under EDDI too without reverting to default TTS. Importing the registry again broke it again, so this a solution for people having the same issue.

Now it worked, but then I also got the same problem that the voice did not always work in game (for example the system report when jumping). I don't know exactly what I did, but I did add the US English language to the language preferences under windows. And the US default voices for TTS (david i think) Also US handwriting recognition, but that might not be related. At some point I didn't have a problem (reboot at some point and it started to work). The only thing that happens some times that EDDI events trigger the event speech twice. After restarting EDDI and VoiceAttack some times fixes this. In worst case, I just let the speech responder in EDDI to only log to file.

Hope this helps anyone with similar problems...

rblanker avatar Aug 29 '17 22:08 rblanker

I don't know if this is related to this issue, it definitely sounds like it might be more related to rhodium88's issue.

I've been playing with sending SSML to System.Speech.Synthesis.SpeechSynthesizer (using powershell) and CereProc's Caitlin definitely behaves differently than the Microsoft voices.

With "CereVoice Caitlin 4.0.4" - If you send SSML text to the .SpeakSsml() method, it doesn't interpret , or other SSML tags. It just ignores them and reads the text with all the markup removed.

If you send SSML text to the .Speak() method, it does interpret the SSML correctly.

This is not behavior I'd expect. And different from the behavior of the Microsoft TTS voices where .SpeakSsml() correctly interprets the SSML, and .Speak() reads the entire xml document to you, including markup.

individualist avatar Sep 15 '17 04:09 individualist

That sounds like what I'm experiencing.. Perhaps in a future version of EDDI there could be a checkable box for people using Cereproc voices, to have the voice interpret the SSML tags correctly?

Luckfish3 avatar Sep 15 '17 23:09 Luckfish3

Is this true for all Cereproc voices, or just Cereproc Caitlin? EDDI currently sends speech with SSML tags to synth.SpeakSsml() and speech without SSML tags to synth.Speak(). I can make exceptions in the next EDCD release once I understand this issue better. No promises, but I think a checkbox might be overkill. :-)

To the individuals here, please

  1. enable verbose logging & generate a debug log in EDDI as described by cmdrmcdonald above.
  2. review the debug log and identify the locale & voice that EDDI thinks is appropriate for you (you should see log records like "Current UI culture is ____", "Thread UI culture is ____", "Selecting voice ____", "Failed to select voice ____").
  3. post the full name of each misbehaving Cereproc voice, the corresponding UI culture, and the corresponding thread culture for review? (posting a snippet from your log with the name of the voice and the culture information from the log would be acceptable)

Thanks!

Tkael avatar Sep 16 '17 01:09 Tkael

Thanks, I'll try those steps when I get an opportunity and report back.

I've been advised by Cereproc's support that IPA phonetic pronunciation isn't supported by Caitlin, but may come in a future version. Although it works for me in Voice Attack's TTS action, they supposed that Voice Attack was detecting the lack of IPA support and falling back to some other method. So in this case it would be understandable that when EDDI uses IPA phonetics it isn't working with the Cereproc voice and so the Microsoft voice is used instead.

When using Caitlin in other applications I've noticed that if I check SSML in the application, it doesn't work (no speech is output) but if I uncheck SSML then the voice works correctly and also processes SSML tags correctly. This would seem to indicate that Cereproc may not support the SpeakSsml() method but does interpret SSML through the normal Speak() method.

rhodium88 avatar Sep 16 '17 09:09 rhodium88