adiSubmitPlayBuffer

Submits a buffer of data for a play operation initiated by adiPlayAsync.

Supported board types

Prototype

DWORD adiSubmitPlayBuffer ( CTAHD ctahd, void *buffer, unsigned size, unsigned flags)

Argument

Description

ctahd

Context handle returned by ctaCreateContext or ctaAttachContext.

buffer

Pointer to buffer containing voice data to be played.

size

Size of buffer (bytes).

flags

Set to ADI_PLAY_LAST_BUFFER if the given buffer is the last in the message; otherwise set to 0.

Return values

Return value

Description

SUCCESS

 

ADIERR_TOO_MANY_BUFFERS

Application is out of synchronization with the play operation. Submit buffers only when requested.

CTAERR_BAD_ARGUMENT

buffer is NULL.

CTAERR_BAD_SIZE

size is not a multiple of framesize for the encoding in adiPlayAsync.

CTAERR_FUNCTION_NOT_ACTIVE

Either voice is not playing or the play operation was not initiated by calling adiPlayAsync.

CTAERR_INVALID_CTAHD

Context handle is invalid.

CTAERR_INVALID_SEQUENCE

adiStopPlaying was already invoked or the ADI_PLAY_LAST_BUFFER flag was already set in a previous call to adiSubmitPlayBuffer or adiPlayAsync.

CTAERR_INVALID_STATE

Function not available in the current port state.

CTAERR_SVR_COMM

Server communication error.

Events

Event

Description

ADIEVN_PLAY_BUFFER_REQ

Generated by the ADI service when a buffer with voice data is required.

ADIEVN_PLAY_DONE

Generated by the ADI service when the play operation terminates with a reason (value field) of:

CTAERR_xxx or ADIERR_xxx

Play failed.

CTA_REASON_DIGIT

Aborted due to DTMF.

CTA_REASON_FINISHED

Application submitted buffer with ADI_PLAY_LAST_BUFFER set and the buffer was completely played.

CTA_REASON_RELEASED

Call terminated.

CTA_REASON_STOPPED

Stopped by application request.

Details

Use adiSubmitPlayBuffer to asynchronously submit buffers, provided that the:

size can be arbitrarily large, but must be an integral multiple of the frame size for the selected encoding. For optimum performance, size must be the largest frame multiple that will fit in one board buffer. You can obtain this size by calling adiGetEncodingInfo (refer to the maxbufsize argument). If size is less than or equal to the board buffer size, you can re-use the buffer as soon as this function returns.

buffer can be set to NULL and size set to 0 (zero) only if the ADI_PLAY_LAST_BUFFER flag is set. In this case, the play operation terminates when the previously submitted buffer finishes.

See also

adiGetPlayStatus, adiStopPlaying

Example

Refer to the playrec demonstration program.