acmStreamOpen 函数 (msacm.h)

acmStreamOpen 函数将打开 ACM 转换流。 转换流用于将数据从一种指定的音频格式转换为另一种指定的音频格式。

语法

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

parameters

phas

指向句柄的指针,该句柄将接收可用于执行转换的新流句柄。 此句柄用于在调用其他 ACM 流转换函数时标识流。 如果指定了ACM_STREAMOPENF_QUERY标志,则此参数应为 NULL

had

ACM 驱动程序的句柄。 如果指定了此句柄,它将标识要用于转换流的特定驱动程序。 如果此参数为 NULL,则会查询所有合适的已安装 ACM 驱动程序,直到找到匹配项。

pwfxSrc

指向一个 WAVEFORMATEX 结构的指针,该结构标识转换所需的源格式。

pwfxDst

指向用于标识转换所需目标格式的 WAVEFORMATEX 结构的指针。

pwfltr

指向 WAVEFILTER 结构的指针,该结构标识要对转换流执行的所需筛选操作。 如果不需要筛选操作,则此参数可以为 NULL。 如果指定了筛选器,则源 (pwfxSrc) 和目标 (pwfxDst) 格式必须相同。

dwCallback

指向回调函数、窗口句柄或事件的句柄的指针。 仅当使用 ACM_STREAMOPENF_ASYNC 标志打开转换流时,才会调用回调函数。 当转换流打开或关闭以及每个缓冲区转换后,回调函数会收到通知。 如果打开转换流时没有ACM_STREAMOPENF_ASYNC标志,则此参数应设置为零。

dwInstance

传递给 dwCallback 参数指定的回调函数的用户实例数据。 此参数不与窗口和事件回调一起使用。 如果打开转换流时没有ACM_STREAMOPENF_ASYNC标志,则此参数应设置为零。

fdwOpen

用于打开转换流的标志。 定义了以下值。

[ACMSTREAMHEADER] (./ns-msacm-acmstreamheader.md) ACMSTREAMHEADER_STATUSF_DONE 标志的结构。
含义
ACM_STREAMOPENF_ASYNC
ACM_STREAMOPENF_NONREALTIME ACM 在转换数据时不会考虑时间约束。 默认情况下,驱动程序将尝试实时转换数据。 对于某些格式,指定此标志可能会改善音频质量或其他特征。
ACM_STREAMOPENF_QUERY 将查询 ACM 以确定它是否支持给定的转换。 不会打开转换流,并且 不会在 phas 参数中返回任何句柄。
CALLBACK_EVENT dwCallback 参数是事件的句柄。
CALLBACK_FUNCTION dwCallback 参数是回调过程地址。 函数原型必须符合 acmStreamConvertCallback 原型。
CALLBACK_WINDOW dwCallback 参数是窗口句柄。

返回值

如果成功,则返回零,否则返回错误。 可能的错误值包括以下内容。

返回代码 说明
ACMERR_NOTPOSSIBLE
无法执行请求的操作。
MMSYSERR_INVALFLAG
至少有一个标志无效。
MMSYSERR_INVALHANDLE
指定的句柄无效。
MMSYSERR_INVALPARAM
至少有一个参数无效。
MMSYSERR_NOMEM
系统无法分配资源。

注解

如果 ACM 驱动程序无法执行实时转换,并且未为 fdwOpen 参数指定ACM_STREAMOPENF_NONREALTIME标志,则打开操作将失败并返回ACMERR_NOTPOSSIBLE错误代码。 应用程序可以使用 ACM_STREAMOPENF_QUERY 标志来确定输入是否支持实时转换。

如果应用程序使用窗口接收回调信息,则会将MM_ACM_OPEN、MM_ACM_CLOSE和MM_ACM_DONE消息发送到 window 过程函数,以指示转换流的进度。 在本例中, ACMSTREAMHEADER 结构用于MM_ACM_DONE,但它不用于MM_ACM_OPEN和MM_ACM_CLOSE。

如果应用程序使用函数接收回调信息,则会将MM_ACM_OPEN、MM_ACM_CLOSE和MM_ACM_DONE消息发送到函数,以指示波形音频输出的进度。 回调函数必须驻留在动态链接库中, (DLL) 。

如果应用程序将事件用于回调通知,则会向事件发出信号以指示转换流的进度。 当打开流、转换每个缓冲区后以及关闭流时,事件将发出信号。

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 msacm.h
Library Msacm32.lib
DLL Msacm32.dll

另请参阅

音频压缩函数

音频压缩管理器