davidacm / NVDA-IBMTTS-Driver

This project is aimed at developing and maintaining the NVDA IBMTTS driver. IBMTTS is a synthesizer similar to Eloquence. Please send your ideas and contributions here!
GNU General Public License v2.0
56 stars 23 forks source link

issues with punctuation on ibmeci.dll version 6.7.4.0 #71

Open fastfinge opened 2 years ago

fastfinge commented 2 years ago

When running ibmeci.dll version 6.7.4.0 (identified as company: IBM, description: ibmeci command interface), closing parems are usually read twice once as "right paren", and then a second time as "right parenthesis". Also, if a punctuation mark is the next character after a line break (as often found in Kindle and other virtual buffers), it is always read, no matter punctuation settings. Neither of these are an issue with eci.dll version 6.1.0.0 (company: speechworks, description: eloquence command interface).

lbk2907 commented 2 years ago

@fastfinge I think this is the problem from the binary itself.

fastfinge commented 2 years ago

That could be; Might be worth warning users if they've got a buggy DLL version. As that one is available for direct download from IBM, it's likely to be popular with new users, and it unfortunately seems to have several issues, some that the driver attempts to work around, and some that it doesn't, as well as needing seperat dictionaries due to pronounciation differences.

lbk2907 commented 2 years ago

I have 1 version but I not sure if it is the same. I have send you an email asking about this.

From: Samuel Proulx Sent: Wednesday, July 6, 2022 11:52 PM To: davidacm/NVDA-IBMTTS-Driver Cc: lbk2907; Comment Subject: Re: [davidacm/NVDA-IBMTTS-Driver] issues with punctuation onibmeci.dll version 6.7.4.0 (Issue #71)

That could be; Might be worth warning users if they've got a buggy DLL version. As that one is available for direct download from IBM, it's likely to be popular with new users, and it unfortunately seems to have several issues, some that the driver attempts to work around, and some that it doesn't, as well as needing seperat dictionaries due to pronounciation differences. — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

davidacm commented 2 years ago

hi @fastfinge, if the synth can be downloaded directly from IBM, I think that it's secure to paste the direct link to IBM here.

I don't have that driver to do testing.

Regards.

Mohamed00 commented 2 years ago

Yeah, this is happening because although IBM corrected many issues in the synthesizer, they are still using a slightly older punctuation handler, which doesn't tolerate many of the things the SpeechWorks binaries do, such as NVDA sending punctuation in separate strings in some cases, example: the word "link," the link text itself, and then the punctuation mark that follows it. NVDA would need to be modified in such a way that that separation is removed. Here's an NVDA dictionary that tries to work around most of the oddities, though it's not perfect. Place this in %appdata%\nvda\speechDicts\voiceDicts.v1\ibmeci. ibmeci-American English.zip

fastfinge commented 2 years ago

Hi @davidacm,

The version I mentioned is on IBM's ftp site, ftp.software.ibm.com. No username and password are required, but it's not http, so you have to use filezilla or another FTP client. The driver is in: /software/websphere/voicetoolkit/InstallShield/VT6.0TP/Languages/TTS/win/. The various jar files can be unzipped with winzip and then just run setup.exe for the languages you need. They install in program files (x86) under viavoice tts.

lbk2907 commented 2 years ago

Hi @davidacm,

The version I mentioned is on IBM's ftp site, ftp.software.ibm.com. No username and password are required, but it's not http, so you have to use filezilla or another FTP client. The driver is in: /software/websphere/voicetoolkit/InstallShield/VT6.0TP/Languages/TTS/win/. The various jar files can be unzipped with winzip and then just run setup.exe for the languages you need. They install in program files (x86) under viavoice tts.

@fastfinge Thanks. I will give it a try.

Cleversn commented 2 years ago

Just for info, you can use Windows file Explorer itself to open the FTP directory. Just type the address at the address bar.

lbk2907 commented 2 years ago

Thanks. I’m using WinSCP to open FTP.

From: Cleverson Sent: Thursday, July 7, 2022 8:47 AM To: davidacm/NVDA-IBMTTS-Driver Cc: lbk2907; Comment Subject: Re: [davidacm/NVDA-IBMTTS-Driver] issues with punctuation onibmeci.dll version 6.7.4.0 (Issue #71)

Just for info, you can use Windows file Explorer itself to open the FTP directory. Just type the address at the address bar. — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

lbk2907 commented 2 years ago

Hi @davidacm,

The version I mentioned is on IBM's ftp site, ftp.software.ibm.com. No username and password are required, but it's not http, so you have to use filezilla or another FTP client. The driver is in: /software/websphere/voicetoolkit/InstallShield/VT6.0TP/Languages/TTS/win/. The various jar files can be unzipped with winzip and then just run setup.exe for the languages you need. They install in program files (x86) under viavoice tts.

@fastfinge @davidacm @Mohamed00 Are any of you know what's the different between the normal version (TTS) and the concatenative version (CTTS)? I found from the IBM FTP site given above. What I know is the size of the concatenative version is more bigger than the normal version. Are NVDA or spesificly IBMTTS have any use with the concatenative version? Thanks.

Mohamed00 commented 2 years ago

Those are IBM's more natural sounding voices. After installing the voices, set the sample rate to 8 kHz to make use of them.

lbk2907 commented 2 years ago

@Mohamed00 Thanks.

On Thu, Jul 7, 2022, 6:36 PM Mohamed Al-Hajamy @.***> wrote:

Those are IBM's more natural sounding voices. After installing the voices, set the sample rate to 8 kHz to make use of them.

— Reply to this email directly, view it on GitHub https://github.com/davidacm/NVDA-IBMTTS-Driver/issues/71#issuecomment-1177378165, or unsubscribe https://github.com/notifications/unsubscribe-auth/AM64WYSCLXYG5UWKEOL2WBTVS2XJ5ANCNFSM522GEILQ . You are receiving this because you commented.Message ID: @.***>

lbk2907 commented 2 years ago

@Mohamed00 I have a question here about the concatenative version of IBM. When I install the concatenative version of Chinese voices (Zh_CN), IBMTTS can’t be load. Are this is the problem from the IBM binary itself or from the IBMTTS Add-On for NVDA? I have try with another voice and all looks fine. I will paste the NVDA log down below. Thanks. Current Windows Version: Windows 11 22H2 (x64) build 22621.160 (I have test with Windows 11 21H2 but the result is same). NVDA Version: 2022.2beta3. IBMTTS Add-On Version: 22.07.3. IBM Binary Version: 6.7.3.2. NVDA log. WARNING - synthDriverHandler.SynthDriver.loadSettings (22:24:49.149) - MainThread (460): Invalid voice: 65536 ERROR - synthDriverHandler.setSynth (22:24:49.151) - MainThread (460): setSynth failed for ibmeci Traceback (most recent call last): File "synthDriverHandler.pyc", line 332, in loadSettings File "synthDriverHandler.pyc", line 385, in changeVoice File "synthSettingsRing.pyc", line 149, in updateSupportedSettings File "synthSettingsRing.pyc", line 42, in init File "baseObject.pyc", line 26, in get File "synthDriverHandler.pyc", line 251, in _get_availableVoices File "C:\Users\Calvin\AppData\Roaming\nvda\addons\IBMTTS\synthDrivers\ibmeci.py", line 420, in _getAvailableVoices info = _ibmeci.langs[name.lower()[:3]] KeyError: 'cbe'

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "synthDriverHandler.pyc", line 463, in setSynth File "synthDriverHandler.pyc", line 432, in getSynthInstance File "synthDriverHandler.pyc", line 323, in initSettings File "synthDriverHandler.pyc", line 338, in loadSettings File "synthDriverHandler.pyc", line 385, in changeVoice File "synthSettingsRing.pyc", line 149, in updateSupportedSettings File "synthSettingsRing.pyc", line 42, in init File "baseObject.pyc", line 26, in get File "synthDriverHandler.pyc", line 251, in _get_availableVoices File "C:\Users\Calvin\AppData\Roaming\nvda\addons\IBMTTS\synthDrivers\ibmeci.py", line 420, in _getAvailableVoices info = _ibmeci.langs[name.lower()[:3]] KeyError: 'cbe' INFO - synthDriverHandler.setSynth (22:24:49.191) - MainThread (460): Falling back to previous synthDriver vocalizer_expressive2 INFO - synthDriverHandler.setSynth (22:24:49.576) - MainThread (460): Loaded synthDriver vocalizer_expressive2

Mohamed00 commented 2 years ago

That's because the concatenative version of Chinese has a second file, cbenu, possibly for the dual language support? I think that concatenative voice might be incomplete in some way, though, as I can't seem to get it to work anywhere.

On 7/8/2022 12:50 PM, lbk2907 wrote:

@Mohamed00 I have a question here about the concatenative version of IBM. When I install the concatenative version of Chinese voices (Zh_CN), IBMTTS can’t be load. Are this is the problem from the IBM binary itself or from the IBMTTS Add-On for NVDA? I have try with another voice and all looks fine. I will paste the NVDA log down below. Thanks. Current Windows Version: Windows 11 22H2 (x64) build 22621.160 (I have test with Windows 11 21H2 but the result is same). NVDA Version: 2022.2beta3. IBMTTS Add-On Version: 22.07.3. IBM Binary Version: 6.7.3.2. NVDA log. WARNING - synthDriverHandler.SynthDriver.loadSettings (22:24:49.149) - MainThread (460): Invalid voice: 65536 ERROR - synthDriverHandler.setSynth (22:24:49.151) - MainThread (460): setSynth failed for ibmeci Traceback (most recent call last): File "synthDriverHandler.pyc", line 332, in loadSettings File "synthDriverHandler.pyc", line 385, in changeVoice File "synthSettingsRing.pyc", line 149, in updateSupportedSettings File "synthSettingsRing.pyc", line 42, in init File "baseObject.pyc", line 26, in get File "synthDriverHandler.pyc", line 251, in _get_availableVoices File "C:\Users\Calvin\AppData\Roaming\nvda\addons\IBMTTS\synthDrivers\ibmeci.py", line 420, in _getAvailableVoices info = _ibmeci.langs[name.lower()[:3]] KeyError: 'cbe'

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "synthDriverHandler.pyc", line 463, in setSynth File "synthDriverHandler.pyc", line 432, in getSynthInstance File "synthDriverHandler.pyc", line 323, in initSettings File "synthDriverHandler.pyc", line 338, in loadSettings File "synthDriverHandler.pyc", line 385, in changeVoice File "synthSettingsRing.pyc", line 149, in updateSupportedSettings File "synthSettingsRing.pyc", line 42, in init File "baseObject.pyc", line 26, in get File "synthDriverHandler.pyc", line 251, in _get_availableVoices File "C:\Users\Calvin\AppData\Roaming\nvda\addons\IBMTTS\synthDrivers\ibmeci.py", line 420, in _getAvailableVoices info = _ibmeci.langs[name.lower()[:3]] KeyError: 'cbe' INFO - synthDriverHandler.setSynth (22:24:49.191) - MainThread (460): Falling back to previous synthDriver vocalizer_expressive2 INFO - synthDriverHandler.setSynth (22:24:49.576) - MainThread (460): Loaded synthDriver vocalizer_expressive2

— Reply to this email directly, view it on GitHub https://github.com/davidacm/NVDA-IBMTTS-Driver/issues/71#issuecomment-1179188384, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADY4AYB6X2OJHHK4CZ6MOWLVTBL7DANCNFSM522GEILQ. You are receiving this because you were mentioned.Message ID: @.***>

lbk2907 commented 2 years ago

@Mohamed00 Are the Cantonese Hong Kong (Zh_HK) do the same? Because it works fine here with IBMTTS Add-On for NVDA.

davidacm commented 2 years ago

Hi, I'm considering to add a link reference to the FTP of IBM, that contains the complete copy of ViaVoice TTS. It's like a legal way to obtain IBM TTS, although not the best version, it works acceptable.

I comment here although I should open another thread, because we have many participants in this thread. Let me know if you think that is not a good idea, or if you know another legal place to obtain a better copy of IBMTTS or eloquence.

Regards, David.

lbk2907 commented 2 years ago

@davidacm I agree with your suggestion. Open the reference for people to optain the IBM library. A quick question here, what’s the best version of IBM binary? Are the Eloquence that not supported 22 kHz? Just want to know. 😊

Mohamed00 commented 2 years ago

Hi, not sure if it would be the best idea to link to those in the readme. While it could definitely be argued that IBM themselves made it available on a public FTP server and so it's on them if it gets used, and that there's no restrictions of any kind on the DLLs, the way those binaries are distributed, as JAR files that you have to know are ZIPs, seems to imply that those binaries may not necessarily be intended for public distribution. My theory is that old installers of IBM WebSphere may have connected to the Internet to retrieve their components, and IBM keeps that directory up in case an old WebSphere installer is running at some company somewhere. There is a possibility that there may be a section in the license agreement for WebSphere that states that that copy of IBMTTS is only allowed to be used with the app, similar to IBM Home Page Reader 3.0 and above. Of course, those libraries are definitely interesting, especially with the new languages and voices, it's just that it's uncertain enough that I personally wouldn't be comfortable linking to them so openly.

On 7/8/2022 10:38 PM, David CM wrote:

Hi, I'm considering to add a link reference to the FTP of IBM, that contains the complete copy of ViaVoice TTS. It's like a legal way to obtain IBM TTS, although not the best version, it works acceptable.

I comment here although I should open another thread, because we have many participants in this thread. Let me know if you think that is not a good idea, or if you know another legal place to obtain a better copy of IBMTTS or eloquence.

Regards, David.

— Reply to this email directly, view it on GitHub https://github.com/davidacm/NVDA-IBMTTS-Driver/issues/71#issuecomment-1179464062, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADY4AYFO3AK5PMGJGYGPPYLVTDQZ5ANCNFSM522GEILQ. You are receiving this because you were mentioned.Message ID: @.***>

Cleversn commented 2 years ago

Hi, there appears to be other library versions at the IBM FTP besides the latest version. It would be interesting to investigate what of them works better. When you navigate to /software/websphere/voicetoolkit/InstallShield, you can see there are several directories whose name starts with VT. Inside VT4.2.2, VT5.0.2, and VT5.1, there are other versions besides that in VT6.0TP

lbk2907 commented 2 years ago

I not sure but I think they all are almost the same version of IBM binary.

fastfinge commented 2 years ago

There are also identical versions of them in the /asi folder, packaged as installer files, not .jar files. There are just a few fewer languages.

fastfinge commented 2 years ago

@davidacm my problem with linking to that is that there are just so many bugs in this version. I'm worried you'll get endless bug reports similar to mine, complaining about the punctuation issues, or the fact that you can't resend the settings without getting huge long pauses in speech, but if you turn that off sometimes it forgets the speaking rate and resets to zero. I don't think you can fix any of these issues in the driver, because they're issues with this version of the dll. If you did link to it, you should probably pop up a warning message when this dll is selected that it's a known buggy eloquence library that can't be fixed.

lbk2907 commented 2 years ago

@davidacm my problem with linking to that is that there are just so many bugs in this version. I'm worried you'll get endless bug reports similar to mine, complaining about the punctuation issues, or the fact that you can't resend the settings without getting huge long pauses in speech, but if you turn that off sometimes it forgets the speaking rate and resets to zero. I don't think you can fix any of these issues in the driver, because they're issues with this version of the dll. If you did link to it, you should probably pop up a warning message when this dll is selected that it's a known buggy eloquence library that can't be fixed.

@fastfinge I agree with this idea. @davidacm @Mohamed00 Maybe you can consider this.