Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Func.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.58 Mб
Скачать

AcmStreamConvertCallback

void CALLBACK acmStreamConvertCallback( HACMSTREAM has, UINT uMsg, DWORD dwInstance, LPARAM lParam1, LPARAM lParam2 );

Аргументы

  1. has — дескриптор потока преобразования ACM, связанного с функцией обратного вызова.

  2. uMsg — сообщение потока преобразования ACM. Данный аргумент может принимать следующие значения.

  • MM_ACM_CLOSE — ACM благополучно закрыл поток преобразования, идентифицируемый дескриптором has. Дескриптор, содержащийся в аргументе has не может использоваться после получения данного сообщения.

  • MM_ACM_DONE — ACM благополучно произвела преобразование содержимого буфера, определяемого аргументом Param1 (указывающим на объект структуры ACMSTREAMHEADER) для потока, дескриптор которого содержится в аргументе has.

  • MM_ACM_OPEN — ACM благополучно открыл поток преобразования, идентифицируемый дескриптором has.

  1. dwInstance — данные, переданные в аргументе dwInstance функции acmStreamOpen.

  2. lParam1 и lParam2 — аргументы сообщения.

Примечание

Функция acmStreamConvertCallback представляет собой определяемую в приложении функцию обратного вызова, используемую в функции acmStreamOpen, если в ней установлен флаг CALLBACK_FUNCTION. Имя функции acmStreamConvertCallback является условным и может быть заменено другим именем, не используемым другими функциями.

Из функции обратного вызова не должны вызваться функции acmDriverAdd, acmDriverRemove и acmDriverPriority.

AcmStreamOpen

MMRESULT acmStreamOpen( LPHACMSTREAM phas, HACMDRIVER had, LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst, LPWAVEFILTER pwfltr, DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen );

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

В случае успешного завершения возвращает нулевое значение. В противном случае возвращает одно из следующих значений:

  • ACMERR_NOTPOSSIBLE — требуемая операция не может быть выполнена.

  • MMSYSERR_INVALFLAG — при вызове данной функции установлен, по крайней мере, один недопустимый флаг.

  • MMSYSERR_INVALHANDLE — использован недопустимый дескриптор.

  • MMSYSERR_INVALPARAM — при вызове данной функции, по крайней мере, один из её аргументов имеет недопустимое значение.

  • MMSYSERR_NOMEM — система не в состоянии разместить в памяти требуемые ресурсы.

Аргументы

  1. phas — указатель на переменную, в которую будет записан дескриптор нового потока, используемый для выполнения преобразования. Этот дескриптор используется для идентификации потока при вызове других потоковых функций преобразования ACM. Если установлен флаг ACM_STREAMOPENF_QUERY, данный аргумент должен иметь нулевое значение.

  2. had — дескриптор драйвера ACM. Если данный дескриптор определён, он идентифицирует конкретный драйвер, используемый в потоке преобразования. Если данный аргумент имеет нулевое значение, будут просмотрены все установленные драйверы ACM, пока среди них не будет найден подходящий для данного преобразования.

  3. pwfxSrc — указатель на объект структуры WAVEFORMATEX, содержащей описание формата исходной информации, используемый в данном преобразовании.

  4. pwfxDst — указатель на объект структуры WAVEFORMATEX, содержащей описание формата информации, получаемой в результате проведения данного преобразования.

  5. pwfltr — указатель на объект структуры WAVEFILTER, содержащей описание операций по фильтрации сигнала, производимой в данном потоке преобразования. Если в потоке преобразования не предполагается фильтрация сигнала, то данный аргумент должен иметь нулевое значение. Если в данном потоке определена операция фильтрации, то формат исходной (pwfxSrc) и преобразованной (pwfxDst) информации должны совпадать.

  6. dwCallback — указатель на функцию обратного вызова, дескриптор окна или дескриптор события. Функция обратного вызова будет использована только в том случае, если при открытии потока преобразования был установлен флаг ACM_STREAMOPENF_ASYNC. Функции обратного вызова используется для обработки сообщения об открытии и закрытии потока преобразования и о завершении преобразования каждого буфера. Если при открытии потока преобразования не был установлен флаг ACM_STREAMOPENF_ASYNC, данный аргумент должен иметь нулевое значение.

  7. dwInstance — пользовательские данные, передаваемые функции обратного вызова, определённой в аргументе dwCallback. Этот аргумент не используется, если в аргументе dwCallback указан дескриптор окна или события. Если при открытии потока преобразования не был установлен флаг ACM_STREAMOPENF_ASYNC, данный аргумент должен иметь нулевое значение.

  8. fdwOpen — флаги открытия потока преобразования. Данный аргумент может содержать следующие флаги:

  • ACM_STREAMOPENF_ASYNC — преобразование в потоке должно производится асинхронно. Если установлен данный флаг, приложение может использовать функцию обратного вызова для обработки сообщения об открытии и закрытии потока преобразования, а также о завершении преобразования каждого буфера. Кроме использования функции обратного вызова, для получения сообщения о завершении преобразования буфера может использоваться проверка состояния фланга ACMSTREAMHEADER_STATUSF_DONE в переменной fdwStatus объекта структуры ACMSTREAMHEADER.

  • ACM_STREAMOPENF_NONREALTIME — при проведении преобразования ACM не должен считаться с временными рамками. Для некоторых форматов установка данного флага может повысить качество преобразуемой аудио информации и другие параметры.

  • ACM_STREAMOPENF_QUERY — ACM запрашивается о возможности выполнения требуемого преобразования. При этом поток преобразования не открывается и в аргументе phas не возвращается дескриптор.

  • CALLBACK_EVENT — в аргументе dwCallback передаётся дескриптор события.

  • CALLBACK_FUNCTION — в аргументе dwCallback передаётся указатель на функцию обратного вызова. Формат функции должен соответствовать формату функции acmStreamConvertCallback.

  • CALLBACK_WINDOW — в аргументе dwCallback передаётся дескриптор окна.

Примечание

Функция acmStreamOpen открывает поток преобразования ACM. Потоки преобразования используются для преобразования данных из одного аудио формата в другой.

Если драйвер ACM не в состоянии выполнить операцию преобразования в реальном времени, а флаг ACM_STREAMOPENF_NONREALTIME в переменной fdwOpen не установлен, операция открытия потока завершается с ошибкой ACMERR_NOTPOSSIBLE. Для определения возможности выполнения конкретного преобразования в реальном времени приложение может использовать флаг ACM_STREAMOPENF_QUERY.

Если для обработки сообщения в приложении используется объект окна, то процедуре данного окна для извещения о состоянии потока посылаются сообщения MM_ACM_OPEN, MM_ACM_CLOSE и MM_ACM_DONE. В этом случае в аргументе wParam передаётся дескриптор HACMSTREAM. В аргументе lParam сообщения MM_ACM_DONE передаётся объект структуры ACMSTREAMHEADER. Этот аргумент не используется в сообщениях MM_ACM_OPEN и MM_ACM_CLOSE.

Если для обработки сообщений используется функция обратного вызова, то она должна обрабатывать сообщения MM_ACM_OPEN, MM_ACM_CLOSE и MM_ACM_DONE. Функция обратного вызова должна располагаться в библиотеке динамической компоновки.

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

Описание данной функции содержится в файле заголовка msacm.h. При работе с данной функцией следует включить в проект библиотеку msacm32.lib.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]