我第一次尝试使用 AudioClient 接口,但没有运气。到目前为止,我设法使用成功的 MMDeviceEnumerator 和 MMDevice 接口获得了默认的 AudioClient 接口:
CoCreateInstance(
CLSID_MMDeviceEnumerator, nil,
CLSCTX_ALL, IID_IMMDeviceEnumerator,
MMEnumerator);
MMEnumerator.GetDefaultAudioEndpoint(eRender,eConsole,MMDevice);
MMDevice.Activate(IID_IAudioClient, CLSCTX_ALL, nil, AudioClient);
(这里不包括结果检查代码)。这 3 个调用都没有返回任何错误,并且我在 AudioClient 变量中有一个非零接口 ptr。我的问题是当我尝试获得混合波形时:
AudioClient.GetMixFormat(pwfx)
这将返回代码 0x88890001,即 AUDCLNT_E_NOT_INITIALIZED。-> 当然没有初始化,因为我只想先得到它喜欢的波形。
查找msdn告诉可以在AudioClient.Initialization之前调用AudioClient.GetMixFormat。AUDCLNT_E_NOT_INITIALIZED 也不在可能的返回值列表中。所以我很困惑我做错了什么。GetMixFormat() 文档-> http://msdn.microsoft.com/en-us/library/windows/desktop/dd370872(v=vs.85).aspx
另一个奇怪的事情是,当我调用 AudioClient.GetStreamLatency() 时,它返回 S_OK 和一个大约 1000 毫秒的准随机值。但是文档指出“此方法需要事先初始化 IAudioClient 接口。在客户端通过成功调用初始化音频流之前,对该方法的所有调用都将失败并出现错误 AUDCLNT_E_NOT_INITIALIZED”。因此,我认为我有一个可用的 AudioClient 接口,我只是不明白为什么它不像文档所说的那样工作。
(我使用的是 64 位 win7,Sound Blaster Live 5.1 和 kx-project 驱动程序(DSound 和经典 windows MM 声音工作正常,但有 100 毫秒可怕的长延迟,这就是我要在 win7 上使用 WASAPI 的唯一原因)
先感谢您。