TTS Software Not Working


  1. Posts : 33
    Windows 7 Build 7100 (x64)
       #1

    TTS Software Not Working


    Hi everyone,

    I've been trying to get a better TTS engine than the horrific built-in voice to work system-wide (in apps that use the Windows SAPI engine such as Ventrilo or even in the Control Panel) but I've only been able to access my 3rd-party voices from within programs that are designed to find and use the engines. Windows won't show them in the speech control panel, and simpler apps such as Ventrilo don't detect them.

    Does W7 use a new version of the SAPI that these voices aren't compatible with? Or am I missing something?

    PS - Running 64-bit W7 Build 7100, perhaps I need 64-bit voices? (I doubt it...)
      My Computer


  2. Posts : 5
    Windows 7 Ultimate
       #2

    Changing Default TTS Voice In Windows 7


    We have tested Voices from a number of vendors and all work properly as far as being listed in the TTS speech section of the Control Panel and selectable as a system default with Windows XT and Windows Server 2008. There is a problem with Vista, but there is a work around that solves it.

    Windows 7 64 bit and Windows Server 2008 R2 require complex entries in the Speech Token section of the HKEY_LOCAL_MACHINE registry for all Voices that can be set as the default system Voice. We have not found a single Voice installer that makes the correct entries in this registry nor have we located anyone who knows the details of what is required. There is an extensive description of the registry entries in an MSDN paper for SAPI 5.4, but it doesn't cover all of the entries that are used by Microsoft Anna.

    A second issue is that many of the TTS speech vendors require that one purchase their application program in addition to one or more compatible Voices. SAPI 5+ compatible Voices typically work properly "stand alone". You can purchase the Voices separately, but they usually cannot be installed unless the vendor's application program is resident on the computer. There is an obvious business reason for this limitation, but it greatly increases the cost.

    We use Micosoft's SAPI 5.1 SDK to test the Voices and to link them with our application programs. It might require a MSDN membership to obtain this software, but I think that the SDK is available from Microsoft without charge. There is an interesting sample program called TTSAppVB that can be used to locate all the Voices that are installed on one's computer. You can select a Voice of interest, change a number of parameters, and read textbox data. The program cannot set the system Voice default.

    My favorite voice is Loquendo's "Kate". The speech quality is excellent. It will definitely work stand alone with SAPI 5+, but purchasing Kate without having to buy an expensive (and unneeded for creating a default Voice) application program is difficult. The older AT&T and L&H Voices are free. They will install and run stand alone, but the speech quality isn't very good.
    Last edited by Robbiex; 14 Oct 2009 at 20:18. Reason: Clarify statement
      My Computer


  3. Posts : 3
    Windows 7 Ultimate x64
       #3

    dstruct2k said:
    Hi everyone,

    I've been trying to get a better TTS engine than the horrific built-in voice to work system-wide (in apps that use the Windows SAPI engine such as Ventrilo or even in the Control Panel) but I've only been able to access my 3rd-party voices from within programs that are designed to find and use the engines. Windows won't show them in the speech control panel, and simpler apps such as Ventrilo don't detect them.

    Does W7 use a new version of the SAPI that these voices aren't compatible with? Or am I missing something?

    PS - Running 64-bit W7 Build 7100, perhaps I need 64-bit voices? (I doubt it...)
    Same problem here, I posted this to the SAPI DL at Microsoft and the reply I got from a Microsoft Principal Development Manager on the Speech team is that you do indeed need 64bit voices to be able to configure them for a x64bit OS as a system voice.
    I've yet to see a x64 voice, was going to post to Wizard to see if they'll be making them, I miss my ATT Natural Audrey Voice... Anna and I are so in need of a divorce!
    Last edited by Mikeysoft; 23 Oct 2009 at 16:01.
      My Computer


  4. Posts : 3
    Windows 7 Ultimate x64
       #4

    UPDATE: You can select the 32bit voices for system use, you need to use the 32 bit version of the control panel applet. Try this in the search box.

    %windir%\syswow64\speech\speechux\sapi.cpl

    You should see your 32bit voices provided they are SAPI5. This works with ATT Natural voices. This would solve your 32bit apps issues, however I'm betting 64bit apps will still use Anna.




      My Computer


  5. Posts : 5
    Windows 7 Ultimate
       #5

    Hi Michael,

    You are terrific. You have solved the problem.
    Executing Windows\sysWOW64\speech\SpeechUX\SAPI.cpl brings up a Window that displays all of the 32 bit Voices and the current single 64 bit Voice "Anna". Unlike the 64 bit speech window, you can make any of the Voices the system default Voice. I checked this with Acapela's "Heather" and it works properly.
    There obviously must be a way to do this programatically via SAPI5. I can set the default for a given application program, but still don't see the correct command to set the system default.
    Setting the system default is, incidentally, only essential if you want to change the Voice for a program like MapPoint which uses only the default Voice.
    The problem of obtaining Voices is a frustrating one. Microsoft has Voices other than Anna in their telecommunications package and these should be available in 64 bit. The only other known current source is Loquendo. Their 64 bit "Kate" voice is probably the best available, but it is very expensive and is unavailable for small quantity licensing. There is a fascinating Loquendo Power Point presentation that describes their sophisticated methodology for producing very high quality, naturally sounding TTS. You can find this on the Internet by doing a Google search for: "Loquendo Kate TTS Power Point Presentation". It was given at a SpeechTek meeting.
    Acapela Group have the next best quality Voices (in my opinion). They are current available in 64 bit for the Snow Leopard OS, but not for Windows.
    Finally, all of the known vendors of high quality Voices require that one purchase a base program in addition to one or more Voices. You cannot install the Voices without the base program being resident. One installed, they can be accessed via any SAPI5 compliant program. Small quantity licensing is on a per machine basis.
      My Computer


  6. Posts : 3
    Windows 7 Ultimate x64
       #6

    Wow, Kate is truely a very nice voice it's a shame that isn't available to the masses. At least now with Win7 hitting the masses in x64 hopefull it won't be too long till we have some good quality voices in x64. The solution came from Mike Plume at the Microsoft Speech blog: http://blogs.msdn.com/speech/ Q&A can be sent to SAPI5@microsoft.com.
      My Computer


  7. Posts : 5
    Windows 7 Ultimate
       #7

    This is a follow-up.

    There are multiple problems with setting a default TTS Voice in
    Windows Server 2008 R2 and Windows 7 64 bit edition.

    The Control Panel TTS Voice option lists only properly registered
    64 bit Voices. Microsoft's Anna is the only 64 bit Voice that is
    supplied with the operating systems. Loquendo's Kate, which is
    probably the highest quality TTS Voice that is currently available,
    has both 32 and 64 bit versions. Kate is difficult to obtain in small
    quantities and is very expensive. The next best alternative is
    believed to be the Acapela-Group Voice Heather. It is only
    currently available in a 32 bit version for the Windows operating
    systems. (64 bit Heather is available for Apple's Snow Leopard).

    There is a fix that permits the display of all installed Voices and
    the selection of any as the system default Voice. This is to
    execute:

    C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl

    rather than using the Control Panel TTS Voice selection.
    This fix works properly except for one unfortunate problem.

    The Visual C/C++ statement

    hr = m_cpVoice.CoCreateInstance( CLSID_SpVoice );

    correctly sets up a Voice object regardless of the default
    system Voice.

    The Visual Basic statement

    Voice = New SpeechLib.SpVoice

    results in a system hang or program abort if the default Voice has
    been set to anything other than a properly registered 64 bit Voice
    like Anna. "Try Catch" doesn't catch this error. Note that
    Set Voice = CreateObject("SAPI.SpVoice") also fails with the same
    error.

    There is no easy solution to this problem. It may, however, be less
    of concern as more 64 bit TTS Voices become available.

    First, Microsoft should certainly change the Control Box TTS selection
    to use the same code as "C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl".

    Second, Microsoft should correct the problem with the way in which
    The Visual Basic statement "Voice = New SpeechLib.SpVoice" functions.
    There is no reason for this not to have the same capability as its
    Visual C/C++ counterpart.

    Third, application programs that use TTS could be written completely
    in Visual C/C++, the creation of the Voice object could be in an
    Visual C ActiveX control or a wrapper could be used to access
    CoCreateInstance.

    Fourth, it may be possible to modify the Voice registry entries so
    that 32 bit Voices work with the Control Panel TTS listing. It is
    easy to modify the registry so that the Voices are displayed. There
    is, however, a consistent error message regarding a failure of audio
    output. The TTS registry entries are generally well documented.
    Unfortunately, there are multiple entries for which there is no publicly
    available documentation. This plus a lack of technical assistance from
    either the third party vendors of TTS Voices or Microsoft makes it
    impossible to resolve the registry entry problem at this time.
    The registry issues are not a concern when you use
    "C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl".

    Fifth, One important reason for being able to change the system
    default TTS Voice is to provide an alternate Voice choice for programs
    like MapPoint which automatically select the system default Voice.
    There is no other user option for changing MapPoint's Voice.
    There is a MapPoint registry key at
    HKEY_CURRENT_USER\Software\Microsoft\MapPoint\17.0\USA\PreferredTTSEngine
    that looks as if the TTS Voice can be selected. Unfortunately, there
    is no documentation for this entry and changing the Voice name doesn't
    override the system default Voice.

    Sixth, the registry entries could be programmatically changed so
    that the default Voice meets the requirements of
    "Voice = New SpeechLib.SpVoice" only for this one statement. The
    original entries are then replaced prior to further usage of the
    Voice object.
    It is far from perfect, but we have chosen this approach as the
    best current compromise for our programming environment. One
    unfortunate limitation is that Windows 7 64 bit and Windows Server
    2008 R2 use different TTS registry directory paths and Values for
    DefaultTokenId.
    Incidentally, an invaluable tool for working with the registry is
    Registry Workshop for X64. It can do copy/paste in addition to
    multiple other helpful registry operations.

    The following code snippet demonstrates the methodology.


    'Created inside Form_Load and released inside Form_Unload.

    Dim WithEvents Voice As SpeechLib.SpVoice
    Dim modifyRegistryFlag As Boolean = False

    'Code snippet from Form_Load

    Dim keyName, userRoot, subkeys, defaultString, oldString As String
    Dim OSName, OSPlatform, OSVersion As String
    OSName = Trim(My.Computer.Info.OSFullName.ToString)
    OSPlatform = Trim(My.Computer.Info.OSPlatform.ToString)
    OSVersion = Trim(My.Computer.Info.OSVersion.ToString)
    If InStr(1, OSVersion, "6.1") >= 1 Then
    modifyRegistryFlag = True
    If InStr(1, OSName, "Microsoft Windows 7") >= 1 Then
    'Registry directory path for Windows 7 64 bit
    userRoot = "HKEY_CURRENT_USER"
    subkeys = "Software\Microsoft\Speech\Voices"
    'Default DefaultTokenId string for Windows 7 64 bit
    defaultString = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\MS-Anna-1033-20-DSK"
    Else
    If InStr(1, OSName, "Microsoft Windows Server 2008 R2") >= 1 Then
    'Registry directory path for Server 2008 R2
    userRoot = "HKEY_USERS"
    subkeys = ".DEFAULT\Software\Microsoft\Speech\Voices"
    'Default DefaultTokenId string for Server 2008 R2
    defaultString = "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\Voices\Tokens\MS-Anna-1033-20-DSK"
    End If
    End If
    End If

    keyName = userRoot & "\" & subkeys

    If modifyRegistryFlag = True Then
    'Retrieve name of default Voice
    oldString = ""
    Try
    oldString = Registry.GetValue(keyName, "DefaultTokenId", "-1")
    Catch ex As Exception
    MessageBox.Show(ex.Message.ToString, "TTS Error:Get Current Default Voice", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
    Exit Sub
    End Try

    If oldString = "-1" Then
    MessageBox.Show("No DefaultTokenId", "TTS Error:Get Current Default Voice", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
    Exit Sub
    End If

    'Set default name to Anna if she is not the default
    If oldString <> defaultString Then
    'MessageBox.Show(oldString & vbCrLf & defaultString)
    Try
    Registry.SetValue(keyName, "DefaultTokenId", defaultString, RegistryValueKind.String)
    Catch ex As Exception
    MessageBox.Show(ex.Message, "TTS Error:Set Default Voice", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
    Exit Sub
    End Try
    End If
    End If

    'Creates the voice object
    Try
    Voice = New SpeechLib.SpVoice
    Catch err As Exception
    MessageBox.Show("Error Creating SpeechLib Voice" & vbNewLine & err.Message, "TTS Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
    Exit Sub
    End Try

    If modifyRegistryFlag = True Then
    'Restore original default Voice
    If oldString <> defaultString Then
    Try
    Registry.SetValue(keyName, "DefaultTokenId", oldString, RegistryValueKind.String)
    Catch ex As Exception
    MessageBox.Show(ex.Message, "TTS Error:Restore Default Voice", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
    Exit Sub
    End Try
    End If
    End If
      My Computer


  8. Posts : 5
    Windows 7 Ultimate
       #8

    TTS Software Not Working


    This is an update on available TTS Voices.

    IVONA has a number of high quality Voices that are available for download at a reasonable cost. We have tested Amy. This is an excellent Voice that works properly with Windows 7 64 bit and Windows Server 2008 R2.
    See: IVONA Text To Speech | TTS Voice | Text to Voice

    Another new alternative is Loquendo's Allison Voice which speaks with expression and emotion.
    See: Loquendo TTS Demo
      My Computer


 

  Related Discussions
Our Sites
Site Links
About Us
Windows 7 Forums is an independent web site and has not been authorized, sponsored, or otherwise approved by Microsoft Corporation. "Windows 7" and related materials are trademarks of Microsoft Corp.

© Designer Media Ltd
All times are GMT -5. The time now is 07:24.
Find Us