Speech+synthesis+(LBB)

//by Richard Russell, November 2015//

The program below illustrates the use of the **speak** sub; it is compatible with both LB and LBB. Note that it is necessary to declare **speechInit** as global:

code format="lb" ' LB speech synthesis without a helper DLL! ' by Richard Russell, 26-Mar-2012

open "ole32.dll" for dll as #ole32 calldll #ole32, "CoInitialize", 0 as long, r as long global speechInit do     read phrase$ print phrase$ call speak phrase$ loop until phrase$ = "" calldll #ole32, "CoUninitialize", r as long close #ole32 end

data "This is a demonstration of speech synthesis" data "using Liberty BASIC code without a helper DLL" data ""

' Text-to-speech subroutine, using the SAPI5 speech engine, by Richard Russell

sub speak text$

if speechInit = 0 then struct clsid, a as long, b as long, c as long, d as long clsid.a.struct = hexdec("96749377") : clsid.b.struct = hexdec("11D23391") clsid.c.struct = hexdec("C000E39E") : clsid.d.struct = hexdec("9673794F")

struct iid, a as long, b as long, c as long, d as long iid.a.struct = hexdec("6C44DF74") : iid.b.struct = hexdec("499272B9") iid.c.struct = hexdec("99EFECA1") : iid.d.struct = hexdec("D422046E")

struct voice, v as long struct temp, v as long calldll #ole32, "CoCreateInstance", clsid as struct, 0 as long, 5 as long, _ iid as struct, voice as struct, r as long if voice.v.struct = 0 then notice "SAPI5 is not available" : end speechInit = 1 end if

length = len(text$)+1 wtext$ = space$(length*2) calldll #kernel32, "MultiByteToWideChar", 0 as long, 0 as long, text$ as ptr, _ -1 as long, wtext$ as ptr, length as ulong, r as long

pvoice = voice.v.struct temp.struct = pvoice pspeak = temp.v.struct + 80 temp.struct = pspeak speak = temp.v.struct temp.struct = pvoice

calldll #user32, "CallWindowProcA", speak as long, pvoice as long, _ wtext$ as ptr, 0 as long, 0 as long, r as long end sub code The default voice is used; it may be a male or female voice depending on the version of Windows. If you prefer to specify the gender (assuming both a male and a female voice are installed, which may not always be the case) you can insert 'tags' in the string to achieve that: code format="lb" data "This is a demonstration of speech synthesis " data "using Liberty BASIC code without a helper DLL " data "" code It is also possible to control the speed and the volume in a similar way: code format="lb" data "This is a demonstration of speech synthesis " data "using Liberty BASIC code without a helper DLL " data "" code The speed should be specified as a value between -10 and +10, and the volume as a value between 0 and 100.

This alternative format for the tags may also be used: code format="lb" data "This is a demonstration of speech synthesis" data "using Liberty BASIC code without a helper DLL" data "" code

If you want to select a specific SAPI5 voice (and you know it is installed on your PC) you can do that as follows: code format="lb" data "This is a demonstration of speech synthesis " code In this case the voice selected is Ivona Brian (a British English male voice) which can be purchased from http://www.textaloud.com/