Команда MCI_STATUS используется для определения текущего состояния устройства.
Формат соответствующего блока параметров описывается структурой MCI_STATUS_PARMS : typedef struct tagMCI_STATUS_PARMS { DWORD dwCallback; DWORD dwReturn; DWORD dwItem; DWORD dwTrack; } MCI_STATUS_PARMS; typedef MCI_STATUS_PARMS FAR * LPMCI_STATUS_PARMS;
Через поле dwReturn передается возвращаемая информация. Вид запрашиваемой информации определяется содержимым поля dwItem. Для устройств, которые работают с дорожками (например, устройство чтения компакт-дисков), в поле dwTrack можно указать размер или номер дорожки.
Приведем возможные значения параметра dwItem (для звукового адаптера):
Значение параметра dwItem | Описание получаемой информации |
MCI_STATUS_CURRENT_TRACK | Номер текущей дорожки |
MCI_STATUS_LENGTH | Общий размер (длина) фрагмента |
MCI_STATUS_MODE | Текущий режим устройства. Может иметь следующие значения:MCI_MODE_NOT_READY не готово;MCI_MODE_PAUSE пауза;MCI_MODE_PLAY проигрывание;MCI_MODE_STOP останов;MCI_MODE_OPEN открытие;MCI_MODE_RECORD запись;MCI_MODE_SEEK позиционирование |
MCI_STATUS_NUMBER_OF_TRACKS | Общее количество дорожек, которые можно проиграть |
MCI_STATUS_POSITION | Текущая позиция |
MCI_STATUS_READY | Если устройство готово, возвращается значение TRUE, в противном случае - FALSE |
MCI_STATUS_TIME_FORMAT | Текущий формат времени. Может иметь следующие значения:MCI_FORMAT_BYTES MCI_FORMAT_FRAMES MCI_FORMAT_HMS MCI_FORMAT_MILLISECONDS MCI_FORMAT_MSF MCI_FORMAT_SAMPLES MCI_FORMAT_TMSF |
MCI_STATUS_START | Начальная позиция |
MCI_STATUS_TRACK | В поле dwTrack записывается либо начальная позиция заданной дорожки (если дополнительно используется MCI_STATUS_POSITION), либо размер дорожки (если дополнительно используется MCI_STATUS_LENGTH) |
MCI_STATUS_MEDIA_PRESENT | Возвращается TRUE, если носитель данных вставлен в устройство |
MCI_WAVE_INPUT | Устройство, используемое для записи |
MCI_WAVE_OUTPUT | Устройство, используемое для воспроизведения |
MCI_WAVE_STATUS_AVGBYTESPERSEC | Скорость потока данных при записи и воспроизведении, байты в секунду |
MCI_WAVE_STATUS_BITSPERSAMPLE | Количество бит, используемых для представления одной выборки сигнала |
MCI_WAVE_STATUS_BLOCKALIGN | Текущее выравнивание блока |
MCI_WAVE_STATUS_CHANNELS | Количество каналов |
MCI_WAVE_FORMATTAG | Тег формата, используемого для записи, воспроизведения или сохранения данных в файле |
MCI_WAVE_STATUS_LEVEL | Текущий уровень записи или воспроизведения, используется 8- или 16-битовое значение в зависимости от формата данных. Младшее слово содержит уровень для монофонической записи или уровень правого канала для стереофонической записи. Уровень левого канала передается через старшее слово |
MCI_WAVE_STATUS_SAMPLESPERSEC | Скорость выборки сигнала (частота дискретизации) |
Приведем также список флагов для команды MCI_STATUS:
Флаг | Описание |
MCI_NOTIFY | Если установлен этот флаг, после завершения команды функции окна, адрес которой передан через поле dwCallback, будет послано сообщение MM_MCINOTIFY |
MCI_WAIT | Функция mciSendCommand вернет управление только после завершения процесса |
MCI_STATUS_ITEM | Поле wItem содержит код получаемой информации |
В приведенном ниже фрагменте кода определяется длительность звучания: mciStatus.dwItem = MCI_STATUS_LENGTH; dwrc = mciSendCommand(mciOpen.wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_WAIT, (DWORD)(LPVOID)&mciStatus);