# Creating a synthesizer speak list

Applications define synthesizer speak lists that the server uses when the application sends multiple sentences of text to a synthesizer at one time. A speak list contains entries of a single data type or of different data types.

When the speak list contains different data types, the synthesizer uses multiple-part speak mode in accordance with MRCP 7.5.1 to perform speech synthesis. For information about multiple-part speak mode support for a specific synthesizer, refer to the speech vendor documentation.

Applications invoke saiInitSpeakList, saiAddSpeakItem, and saiSpeakSynthesizer when requesting speech synthesis one sentence at a time.

The following example shows how an application sends multiple sentences of text in various forms to a synthesizer:

#define SAI_TEST_MAX_GRAMMAR_LIST_SIZE 0x1000
char speakRuleList[SAI_TEST_MAX_GRAMMAR_LIST_SIZE];
char textToSpeak[] = “This is the SAI demo program”;
char xmlToSpeak[] =
“<?xml version="1.0"?>”
“ <speak>\n “
“ <paragraph>\n”
“ <sentence>You have 4 new messages.</sentence>\n”
“ <sentence>The first is from <say-as>\n”
“ type="name">Stephanie Williams</say-as>\n”
“ and arrived at <break/>\n”
“ <say-as type="time">3:45pm</say-as>.</sentence>\n”
“ <sentence>The subject is <prosody>\n”
“ rate="-20%">ski trip</prosody></sentence>\n”
“ </paragraph>\n”;
“ </speak>\n”
char uriToSpeak[] = http://www.nmss.com/TTS-Introduction.sml;
rc = saiInitSpeakList(speakRuleList, SAI_TEST_MAX_GRAMMAR_LIST_SIZE) );
if ( rc == SUCCESS )
{
//
// Add speak rules to the datalist.
//
rc = saiAddSpeakItem(speakRuleList, SAI_SPEAK_DATA_TYPE_PLAIN_TEXT, textToSpeak);
rc = saiAddSpeakItem(speakRuleList, SAI_SPEAK_DATA_TYPE_XML, xmlToSpeak);
rc = saiAddSpeakItem(speakRuleList, SAI_SPEAK_DATA_TYPE_URL, uriToSpeak);
rc = saiSpeakSynthesizer( synthHd, SAI_SPEAK_DATA_TYPE_DATA_LIST, speakRuleList,
NULL );
}