Мультимедиа для Windows
5b239685

Определение текущей позиции


Приложение может определить текущую позицию в блоке при записи или воспроизведении, вызвав функцию waveInGetPosition или waveOutGetPosition, соответственно.

Приведем описание функции waveInGetPosition :

Функция waveInGetPosition

UINT waveInGetPosition( HWAVEIN hWaveIn, // идентификатор устройства ввода LPMMTIME lpInfo, // указатель на структуру MMTIME UNIT wSize); // размер структуры MMTIME

Параметры функции:

hWaveIn

Идентификатор устройства ввода, полученный от функции waveInOpen при открытии устройства

lpInfo

Указатель на структуру MMTIME . В нее будет записана информация о текущей позиции. Эта структура определена в файле mmsystem.h следующим образом:

typedef struct mmtime_tag { UINT wType; // формат времени union { DWORD ms; // миллисекунды DWORD sample; // выборки DWORD cb; // счетчик байт struct { // формат SMPTE BYTE hour; // часы BYTE min; // минуты BYTE sec; // секунды BYTE frame; // фреймы BYTE fps; // фреймы в секунду BYTE dummy; // байт для выравнивания } smpte; struct { // формат MIDI DWORD songptrpos; // указатель позиции в мелодии } midi; } u; } MMTIME; typedef MMTIME *PMMTIME; typedef MMTIME NEAR *NPMMTIME; typedef MMTIME FAR *LPMMTIME;

Перед вызовом функции waveInGetPosition необходимо записать в поле wType нужный формат времени. Можно использовать следующие значения:



Значение Описание
TIME_MS Время измеряется в миллисекундах, при этом в объединении u следует использовать поле ms
TIME_SAMPLES Время измеряется в выборках сигнала, при этом в объединении u следует использовать поле sample
TIME_BYTES Для измерения времени выполняется подсчет байтов данных, в объединении u следует использовать поле cb
TIME_SMPTE Время измеряется в так называемом формате SMPTE (Society of Motion Picture and Television Engineers), при этом в объединении u следует использовать структуру smpte. Для поля fps возможны значения 24, 25, 29 или 30 фреймов (кадров) в секунду
TIME_MIDI Время измеряется в формате MIDI (Musical Instruments Digital Interface), при этом в объединении u следует использовать структуру midi
<
wSize

Размер структуры MMTIME в байтах

Возвращаемое значение:

При нормальном завершении возвращается нулевое значение. В противном случае возвращается код ошибки:

MMSYSERR_INVALHANDLE

Указан неправильный идентификатор устройства

После вызова функции waveInGetPosition приложение должно проверить содержимое поля wType. Если устройство не может выдать информацию о текущей позиции в затребованном формате, оно может предоставить сведения о текущей позиции в другом формате.

Для определения текущей позиции устройства вывода следует использовать функцию waveOutGetPosition :

Функция waveOutGetPosition

UINT waveOutGetPosition( HWAVEOUT hWaveOut, // идентификатор устройства вывода LPMMTIME lpInfo, // указатель на структуру MMTIME UNIT wSize); // размер структуры MMTIME

Параметры функции:

hWaveOut

Идентификатор устройства вывода, полученный от функции waveOutOpen при открытии устройства

lpInfo

Указатель на структуру MMTIME. В нее будет записана информация о текущей позиции для устройства вывода.

wSize

Размер структуры MMTIME в байтах

Возвращаемое значение:

При нормальном завершении возвращается нулевое значение. В противном случае возвращается код ошибки:

MMSYSERR_INVALHANDLE

Указан неправильный идентификатор устройства


Содержание раздела