Setting speech parameters

by Richard Russell, October 2008

This article is specific to the SAPI5 speech system, typically installed on Windows 2000, XP and Vista

When using Windows' built-in speech synthesis capability it is possible to override the default speed, volume and voice parameters with your own preferences. There are two main ways of doing this; the first method (which is used in the supplied example program SPEAK.BBC) involves embedding tags in the text to be spoken, for example:

        speed$ = "<RATE ABSSPEED='"+STR$speed%+"'/>"
        volume$ = "<VOLUME LEVEL='"+STR$volume%+"'/>"
        voice$ = "<VOICE REQUIRED='NAME="+name$+"'/>"
        PROC_callmethod(tts%, "Speak("""+speed$+volume$+voice$+phrase$+""")")

Here speed% should be in the range -10 to +10, volume% should be in the range 0 to 100 and name$ should be a voice name such as Microsoft Mike (see this article for how to discover the available voices).

As an alternative to specifying a particular voice you can express a preference for a male or female voice (if the choice is available):

        speed$ = "<RATE ABSSPEED='"+STR$speed%+"'/>"
        volume$ = "<VOLUME LEVEL='"+STR$volume%+"'/>"
        voice$ = "<VOICE OPTIONAL='gender=female'/>"
        PROC_callmethod(tts%, "Speak("""+speed$+volume$+voice$+phrase$+""")")

The second method involves direct calls to the speech system to set the appropriate parameters, for example:

        PROC_putvalue(tts%, "Rate("+STR$speed%+")")
        PROC_putvalue(tts%, "Volume("+STR$volume%+")")
        vobj% = FN_getobject(tts%, "GetVoices(""NAME="+name$+""").Item(0)")
        PROC_putobject(tts%, "Voice(O vobj%)")
        PROC_callmethod(tts%, "Speak("""+phrase$+""")")

Note that this code requires COMLIB (or COMLIBA) version 3.3 or later, as supplied with BBC BASIC for Windows version 5.90a.