Listing+available+voices

//by Richard Russell, October 2008//

The supplied example program **SPEAK.BBC** provides the capability of choosing the 'voice' to be used (for example **Microsoft Sam** or **Microsoft Mary**), however you need to know in advance which voices are available; if you select one which isn't available it won't work. This is a particular problem given that the available voices may differ between versions of Windows, for example Windows Vista may only have **Microsoft Anna** which isn't usually available on other versions of Windows.

The code below lists the available voices (it uses SAPI5, typically installed on Windows 2000, XP and Vista and later):

code format="bb4w" INSTALL @lib$+"COMLIBA" ON ERROR ON ERROR OFF : PROC_comexit : PRINT 'REPORT$ : END ON CLOSE PROC_comexit : QUIT PROC_cominit tts% = FN_createobject("SAPI.SpVoice") nvoices% = FN_getvalueint(tts%,"GetVoices.Count") DIM voice$(nvoices%-1) FOR n% = 0 TO nvoices%-1 voice$(n%) = FN_getvaluestr(tts%,"GetVoices.Item("+STR$n%+").GetDescription") PRINT voice$(n%) NEXT PROC_releaseobject(tts%) PROC_comexit code You can of course use the returned list of voices in other ways, such as presenting them to the user in a **List Box**, or selecting one according to a set of preferences.

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