Интерфейс управления устройствами MCI (Media Control Interface) - MCI Play&Stop

ОГЛАВЛЕНИЕ

MCI Play&Stop

Рассмотрим пример воспроизведения CD-треков.

mciSetParms.dwTimeFormat = MCI_FORMAT_TMSF; 
flags = MCI_SET_TIME_FORMAT;
mciSendCommand(wDeviceID, MCI_SET, flags, (DWORD)& mciSetParms);

Первым делом устанавливаем формат времени. Используем уже знакомую структуру - MCI_SET_PARMS, в которой устанавливаем параметр MCI_FORMAT_TMSF. Он говорит о том, что формат времени устанавливается в треках, минутах, секундах и фреймах. В качестве флага передаем флаг параметра времени - MCI_SET_TIME_FORMAT. Ну, а дальше запускаем нашу функцию.

Для того, чтобы воспроизвести трек необходимо воспользоваться командой MCI_PLAY, которая зависит от структуры MCI_PLAY_PARMS. Вот ее описание:

typedef struct { 
DWORD dwCallback;
DWORD dwFrom;
DWORD dwTo;
} MCI_PLAY_PARMS;

Где

  • dwCallback - указатель на функцию "возврата"
  • dwFrom - позиция начала воспроизведения
  • dwTo - позиция конца воспроизведения

После того когда мы установили формат времени, в котором будет воспроизводиться трек, следующее что нам надо узнать, это длину трека по которому в дальнейшем мы определим начало и конец воспроизведения. Вот пример кода:

// Определяем длину трека через уже "готовую" 
//функцию, где track - это номер трека

DWORD lengthTrack = LengthTrack(track);

// С помощью функции MCI_MAKE_TMSF зададим начало и конец
// воспроизведения воспользовавшись структурой MCI_PLAY_PARMS.

mciPlayParms.dwFrom = MCI_MAKE_TMSF(track, 0, 0, 0);
mciPlayParms.dwTo = MCI_MAKE_TMSF(track,
MCI_MSF_MINUTE(lengthTrack),
MCI_MSF_SECOND(lengthTrack),
MCI_MSF_FRAME(lengthTrack));

// Зададим нужные флаги
flags = MCI_FROM | MCI_TO;

// Начнем воспроизведение
mciSendCommand(wDeviceID, MCI_PLAY, flags, (DWORD)& mciPlayParms);

При использовании флагов MCI_FROM и MCI_TO необходимо устанавливать формат времени, как мы это сделали в начале этого упражнения.

Теперь пора рассмотреть другую команду - MCI_STOP (комментариев я думаю не надо). Действуем по аналогии с командами открытия и закрытия CD.

mciSendCommand(wDeviceID, MCI_STOP, 0, (DWORD)& mciGenericParms); 

Это все, что нужно сделать.