Функция waveOutOpen (mmeapi.h)
Функция waveOutOpen открывает для воспроизведения заданное устройство вывода звуковой формы волны.
Синтаксис
MMRESULT waveOutOpen(
LPHWAVEOUT phwo,
UINT uDeviceID,
LPCWAVEFORMATEX pwfx,
DWORD_PTR dwCallback,
DWORD_PTR dwInstance,
DWORD fdwOpen
);
Параметры
phwo
Указатель на буфер, который получает дескриптор, определяющий открытое устройство вывода звуковой формы волн. Используйте дескриптор для идентификации устройства при вызове других функций вывода волновой формы и звука. Этот параметр может иметь значение NULL , если флаг WAVE_FORMAT_QUERY указан для параметра fdwOpen.
uDeviceID
Идентификатор открываемого устройства вывода волновой формы и аудио. Это может быть идентификатор устройства или дескриптор открытого устройства ввода звукового сигнала. Вместо идентификатора устройства можно также использовать следующий флаг:
Значение | Значение |
---|---|
WAVE_MAPPER | Функция выбирает устройство вывода звукового сигнального формата, которое может воспроизводиться в заданном формате. |
pwfx
Указатель на структуру WAVEFORMATEX , которая определяет формат звуковых данных, отправляемых на устройство. Эту структуру можно освободить сразу после передачи в waveOutOpen.
dwCallback
Задает механизм обратного вызова. Это должно быть одно из следующих значений.
- Указатель на функцию обратного вызова. Сигнатуру функции см. в разделе waveOutProc.
- Дескриптор окна.
- Идентификатор потока.
- Дескриптор события.
- Значение NULL.
dwInstance
Данные экземпляра пользователя, передаваемые механизму обратного вызова. Этот параметр не используется с механизмом обратного вызова окна.
fdwOpen
Флаги для открытия устройства. Определены следующие значения.
Значение | Значение |
---|---|
CALLBACK_EVENT | Параметр dwCallback является дескриптором события. |
CALLBACK_FUNCTION | Параметр dwCallback является адресом процедуры обратного вызова. |
CALLBACK_NULL | Нет механизма обратного вызова. Это параметр по умолчанию. |
CALLBACK_THREAD | Параметр dwCallback является идентификатором потока. |
CALLBACK_WINDOW | Параметр dwCallback является дескриптором окна. |
WAVE_ALLOWSYNC | Если этот флаг указан, можно открыть синхронное устройство waveform-audio. Если этот флаг не указан при открытии синхронного драйвера, устройство не откроется. |
WAVE_MAPPED_DEFAULT_COMMUNICATION_DEVICE |
Если этот флаг указан и параметр uDeviceIDWAVE_MAPPER, функция открывает устройство связи по умолчанию.
Этот флаг применяется, только если uDeviceID равно WAVE_MAPPER. Примечание Требуется Windows 7
|
WAVE_FORMAT_DIRECT | Если этот флаг указан, драйвер ACM не выполняет преобразования звуковых данных. |
WAVE_FORMAT_QUERY | Если этот флаг указан, waveOutOpen запрашивает устройство, чтобы определить, поддерживает ли оно заданный формат, но устройство фактически не открыто. |
WAVE_MAPPED | Если этот флаг указан, параметр uDeviceID указывает устройство waveform-audio для сопоставления волн. |
Возвращаемое значение
Возвращает MMSYSERR_NOERROR в случае успешного выполнения или ошибки в противном случае. Возможные значения ошибок:
Код возврата | Описание |
---|---|
|
Указанный ресурс уже выделен. |
|
Указанный идентификатор устройства выходит за пределы диапазона. |
|
Отсутствует драйвер устройства. |
|
Не удается выделить или заблокировать память. |
|
Предпринята попытка открыть с неподдерживаемым форматом waveform-audio. |
|
Устройство является синхронным, но метод waveOutOpen был вызван без использования флага WAVE_ALLOWSYNC . |
Комментарии
Используйте функцию waveOutGetNumDevs , чтобы определить количество устройств вывода сигналов и аудио, присутствующих в системе. Если значение, указанное параметром uDeviceID , является идентификатором устройства, оно может варьироваться от нуля до одного меньше, чем количество присутствующих устройств. Константу WAVE_MAPPER также можно использовать в качестве идентификатора устройства.
Структура, на которую указывает pwfx , может быть расширена для включения сведений о типе для определенных форматов данных. Например, для данных PCM добавляется дополнительный UINT для указания количества битов на выборку. В этом случае используйте структуру PCMWAVEFORMAT . Для всех остальных форматов waveform-audio используйте структуру WAVEFORMATEX , чтобы указать длину дополнительных данных.
Если вы решили, чтобы окно или поток получали сведения о обратном вызове, в функцию процедуры window отправляются следующие сообщения, указывающие на ход выполнения вывода звуковой формы волн: MM_WOM_OPEN, MM_WOM_CLOSE и MM_WOM_DONE.
Механизм обратного вызова
Параметры dwCallback и fdwOpen указывают, как приложение получает уведомления о ходе вывода waveform-audio.Если параметр fdwOpen содержит флаг CALLBACK_FUNCTION , dwCallback является указателем на функцию обратного вызова. Сигнатуру функции см. в разделе waveOutProc. Параметр uMsg обратного вызова указывает ход выполнения вывода звука:
Если параметр fdwOpen содержит флаг CALLBACK_WINDOW , dwCallback является дескриптором для окна. Окно получает следующие сообщения, указывающие на ход выполнения: Если параметр fdwOpen содержит флаг CALLBACK_THREAD , dwCallback является идентификатором потока. Поток получает сообщения, перечисленные ранее для CALLBACK_WINDOW.Если параметр fdwOpen содержит флаг CALLBACK_EVENT , dwCallback является дескриптором события. Событие получает сигнал при каждом изменении состояния буфера формы волн. Приложение может использовать WaitForSingleObject или WaitForMultipleObjects для ожидания события. При сигнале о событии можно получить текущее состояние буфера формы волн, проверив член dwFlags структуры WAVEHDR . (См . waveOutPrepareHeader.)
Если параметр fdwOpen содержит флаг CALLBACK_NULL , параметр dwCallback должен иметь значение NULL. В этом случае механизм обратного вызова не используется.
Требования
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | mmeapi.h (включая Windows.h) |
Библиотека | Winmm.lib |
DLL | Winmm.dll |
См. также раздел
Использование функции обратного вызова для обработки сообщений драйвера
Использование окна или потока для обработки сообщений драйвера
Использование обратного вызова события для обработки сообщений драйвера