# saiStopSynthesizer

Stops a speech synthesis process.

#### Prototype

DWORD saiStopSynthesizer ( SAI_SYNTHESIZER_HANDLE synth Hd, SAI_REQUEST_ID *requestIdList, SAI_REQUEST_ID *requestId )

Argument | Description
synthHd | Handle associated with a synthesizer resource.
requestIdList | Pointer to a table of request IDs to be stopped. The last element must be NULL. If requestIdList is set to NULL, all speak commands queued will be stopped.
requestId | Pointer to a unique identifier associated with the request.

#### Return values

Return value | Description
SUCCESS |
SAIERR_ENGINE_NOT_READY | Specified synthesizer engine is not ready to handle the request.
SAIERR_INVALID_PARAMETER | One of the specified arguments is invalid.

#### Events

Event | Description
SAIEVN_TTS_STOP_DONE | Request was processed. The result of the request is returned in the statusCode field of the SAIEVN_TTS_STOP_DONE event buffer.

#### Details

saiStopSynthesizer stops one or more synthesizer requests associated with a synthesizer engine. Applications use requestIdList to specify a list of synthesizer requests to stop. The SAI service provides a list of the stopped request IDs in the reqList field of the SAIEVN_TTS_STOP_DONE event buffer.

#### See also

saiControlSynthesizer, saiPauseSynthesizer, saiResumeSynthesizer, saiSpeakSynthesizer

#### Example

//
// Stop all active synthesizing process. TTS handle is used to reach the appropriate
// synthesis engine created and started previously.
//
// This function can be modified to stop only specified speech command (IN_PROGRESS or PENDING).
// So, a reqId list containing reqId returned after a start recognizing command must be passed
// as second argument when calling saiStopSynthesizer.
//
DWORD demoTtsStop( CTAQUEUEHD queueHd, SAI_SYNTHESIZER_HANDLE ttsHd)
{
DWORD rc = SUCCESS;
int i = 0;
CTA_EVENT event;
SAI_REQUEST_ID reqId = 0;
SAI_EVENT_TTS_STOP* eventResult = NULL;
memset( &event, 0, sizeof (CTA_EVENT) );
//
// This procedure will stop all requests. reqId associated to current request is returned.
//
rc = saiStopSynthesizer( ttsHd, NULL, &reqId );
if( rc == SUCCESS )
{
//
// Verify each event received in queue as long as the appropriate one
// (in this case: SAIEVN_TTS_STOP_DONE) is received or before timeout
// is over.
//
rc = demoWaitForEvent(queueHd, &event, SAIEVN_TTS_STOP_DONE, 0 );
}
if ( rc == SUCCESS )
{
//
// The buffer pointer contains a speech access event. Cast buffer according to the
// event type.
//
eventResult = (SAI_EVENT_TTS_STOP*)(event.buffer) ;
//
// Verify that reqId and statusCode are the same as buffer memory.
//
if( (eventResult != NULL) &&
(reqId == eventResult->header.reqId) &&
(eventResult->statusCode == SAI_SC_SUCCESS) )
{
//
// Release the allocated internal memory
//
if( (event.buffer != NULL) && (event.size & CTA_INTERNAL_BUFFER) )
{
dispFreeBuffer ( event.buffer );
}
}
else
{
printf("Status Code = 0x%08x.\n", eventResult->statusCode);
rc = !SUCCESS;
}
}
if (rc == SUCCESS)
{
printf("Stop succeed. Here is the stoped request ID list.\n");
for (i=0; i != 0; i++)
{
printf("%d\n", eventResult->reqList[i]);
}
}
else
{
printf("Stop failed, error code = 0x%08x.\n");
}
return rc;
}