A memory playlist is a data structure in your application. It contains an array of simple, machine-like instructions, or commands, each of which has a fixed format consisting of a 32-bit operation code and three 32-bit operands.
Using playlist instructions, you can play audio objects in succession from one or more memory buffers. Instructions include branching to and returning from subroutines within the playlist. In addition, the playlist can be modified dynamically by the application while it is being played.
The MCI_OPEN_PLAYLIST flag is specified for the MCI_OPEN command message to indicate that the pszElementName field in the MCI_OPEN_PARMS data structure is a pointer to a memory playlist. The following table lists and describes the playlist instructions.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³Command ³Description ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³BRANCH_OPERATION ³Transfers control to another instruction³ ³ ³in the playlist. ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³CALL_OPERATION ³Transfers control to the instruction ³ ³ ³specified in Operand 2, saving the ³ ³ ³number of the instruction following the ³ ³ ³CALL_OPERATION for use on a ³ ³ ³RETURN_OPERATION. ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³CUEPOINT_OPERATION ³Causes a cue-point data record to be ³ ³ ³entered into the data stream. ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³DATA_OPERATION ³Specifies a data buffer to be played ³ ³ ³from or recorded into. ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³EXIT_OPERATION ³Indicates the end of the playlist. ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³LOOP_OPERATION ³Controls iteration in a playlist. ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³MESSAGE_OPERATION ³Returns a message to the application ³ ³ ³during playlist processing. ³ ³ ³MESSAGE_OPERATION statements can be used³ ³ ³by the application to trace specific ³ ³ ³points during the execution of the ³ ³ ³playlist processor. ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³NOP_OPERATION ³Used as a placeholder. ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³RETURN_OPERATION ³Transfers control to the playlist ³ ³ ³instruction following the most recently ³ ³ ³executed CALL_OPERATION. ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³SEMPOST_OPERATION ³Causes the playlist processor to post an³ ³ ³event semaphore. The playlist processor³ ³ ³will call DosWaitEventSem. ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³SEMWAIT_OPERATION ³Causes the playlist processor to wait on³ ³ ³a semaphore. The playlist processor will³ ³ ³call DosWaitEventSem. ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Playlist Instructions
The commands and their descriptions (including operand information) follow:
BRANCH_OPERATION
Operand 1
An application can enable or disable a BRANCH_OPERATION by exchanging it with a NOP_OPERATION. Operands for a NOP_OPERATION are ignored.
CALL instructions may be nested up to 20 levels.
Operand 1
Operand 1
Note: The CUEPOINT instruction is ignored when used in a recording operation.
Operand 1
The current position in the buffer is particularly important after a recording operation, because this field contains the number of bytes of recorded data. The remaining bytes in the buffer are not valid.
The address range of a DATA statement cannot overlap the address range of any another DATA statement. However, the same DATA statement can be repeated.
Operand 1
Operand 1
It is the application's responsibility to see that iteration count values are what is required when switching from play to record, record to play, and when changing settings for the data (for example, bitspersample, samplespersec, and so on) with the set command. These commands cause the playlist stream to be destroyed and re-created, and the playlist to be reassociated as a new playlist with the playlist processor.
Operand 1
Note: This function is not intended to be used for timing of data production or consumption identified by previously interpreted instructions.
Operand 1
Operand 1
Operand 1
Operand 1