vceWrite

Writes data at the current position in the current message.

Prototype

DWORD vceWrite ( CTAHD ctahd, BYTE *buffer, unsigned bytes, unsigned insertmode, unsigned *byteswritten)

Argument

Description

ctahd

Handle returned by ctaCreateContext or ctaAttachContext.

buffer

Pointer to a buffer of data to write.

bytes

Amount of data to write.

insertmode

VCE_OVERWRITE or VCE_INSERT.

byteswritten

Pointer to the returned number of bytes written.


Return values

Return value

Description

SUCCESS

 

CTAERR_DISK_FULL

There is not enough room on the disk to complete the write operation. No data was written.

CTAERR_FUNCTION_ACTIVE

Playing or recording is already active on the context.

CTAERR_INVALID_CTAHD

Context handle is invalid.

CTAERR_SVR_COMM

Server communication error.

VCEERR_INVALID_OPERATION

File type of the current message does not support insertion anywhere except at the end of a message. The operation is also invalid if the current message is a list.

VCEERR_NO_MESSAGE

Context contains no current message.

VCEERR_NO_SPACE

Insufficient room in the destination message.

VCEERR_OUT_OF_INDICES

Destination VOX file contains no free header entries.

VCEERR_PLAY_ONLY

Voice file was not opened for record.


Details

vceWrite copies the specified number of bytes of data from buffer to the current location in the current message of the context that ctahd specified. This function returns the number of bytes of data written in byteswritten, unless byteswritten is NULL.

EDTX encoding types are not supported.

Set insertmode to VCE_OVERWRITE to replace existing data without changing the message size. In overwrite mode, if you attempt to write beyond the end of the current message, SUCCESS is returned and the current position is set to the end of the current message.

Set insertmode to VCE_INSERT to insert new data before the current position. If the current position is the end of the message, VCE_INSERT appends the new data to the current message. Inserting data anywhere except at the end of a message is allowed only on file types that support editing (currently only VOX files).

On completion, the current position is after the inserted data for either insert mode. The current position is advanced by the amount written, in millisecond units.

To convert between bytes and milliseconds, use vceGetContextInfo to get the frame size and frame time, and then use the following formulas:

bytes = ( milliseconds / frametime ) * framesize

milliseconds = ( bytes / framesize ) * frametime

See also

vceRead

Example

/* Append one message to another */

void myMsgCat (CTAHD ctahd, VCEHD destvh, unsigned destmsg,
                          VCEHD srcvh, unsigned srcmsg)
{
    BYTE    *buffer;
    unsigned  msec;
    unsigned  bytes;
    unsigned  byteswritten;

    /* Read source message to memory - see example in vceRead */
    myLoadMessage (ctahd, srcvh, srcmsg, &buffer, &msec, &bytes);

    /* Seek to end of destination */
    vceSetCurrentMessage (destvh, destmsg);
    vceSetPosition (ctahd, 0, VCE_SEEK_END, NULL);

    /* Append source message */
    vceWrite (ctahd, buffer, bytes, VCE_INSERT, &byteswritten);

    /* Release temporary buffer */
    free (buffer);

    if (byteswritten < bytes)
        printf("Insufficient space");
    return;
}