如何解决在Windows 10中的捕获客户端上使用IAudioClient2 :: SetClientProperties的预期效果是什么?
IAudioClient2::SetClientProperties的规范仅包含一个参数,但是根据现有文档,对于我来说,尚不清楚API会带来什么。参数由以下方式给出:
typedef struct AudioClientProperties {
UINT32 cbSize;
BOOL bIsOffload;
AUDIO_STREAM_CATEGORY eCategory;
AUDCLNT_STREAMOPTIONS Options;
} AudioClientProperties;
我有一个捕获客户端,正在尝试了解使用eCategory
和Options
的不同组合的确切结果。
首先:如果我没有在自己的信息流中致电SetClientProperties
;那么默认设置是什么?假设存在一个对应的GetClientProperties
,可以说它将返回什么?
如果我将流类别设置为AudioCategory_Speech
,并将流选项设置为AUDCLNT_STREAMOPTIONS_RAW
,则手册指出:
The audio stream is a 'raw' stream that bypasses
all signal processing except for endpoint specific,always-on processing in the Audio Processing Object (APO),driver,and hardware.
这是否意味着绕过Signal Enhancements的任何处理,还是绕过了其他类型的内置信号处理?我想我不太了解上面的endpoint specific,always-on
部分。
此外,如果我改用AudioCategory_Communications
和AUDCLNT_STREAMOPTIONS_RAW
,那么这两个是否有矛盾?在我看来,AudioCategory_Communications
应该启用对VoIP有用的组件(例如AGC,NS等),而AUDCLNT_STREAMOPTIONS_RAW
标志的意思是“保持音频路径尽可能干净”?
也许我可以改一下最后一个问题。使用AudioCategory_Communications
+ AUDCLNT_STREAMOPTIONS_RAW
与使用AudioCategory_Speech
+ AUDCLNT_STREAMOPTIONS_RAW
之间的最终行为有什么区别?
解决方法
eCategory的行为含义已超出音频效果。例如,如果您拥有VOIP应用程序并启动AudioCategory_Communications流,则无论您是否使用AUDCLNT_STREAMOPTIONS_RAW,这都会导致电影应用程序暂停或回避。
如果您的捕获客户端用于VOIP,则需要AudioCategory_Communications。如果您的捕获客户端用于语音命令或听写,则需要AudioCategory_Speech。
AUDCLNT_STREAMOPTIONS_RAW仅适用于非常狭窄的情况。通常,您会欢迎所选eCategory的默认音频处理方式。
另一方面,如果音频处理的来龙去脉对您来说非常重要,那么您在个别硬件上评估音频驱动程序时,可能会确定某些特定型号的计算机具有无法进行音频处理的功能。不适用于您的应用。
在这种情况下(这种情况很少见),您应该做两件事:
- 向那台计算机的制造商求助,并告诉他们您对音频处理的不满意之处,以便他们有机会说服您他们正在做的事情真的很正常,或者您有机会说服他们他们确实有问题,在这种情况下,应该解决它。
- 虽然他们正在研究修补程序,但是您的应用程序在确定其正在这种问题系统上运行后,应使用AUDCLNT_STREAMFLAGS_RAW。请注意,由于系统不再提供该处理,因此您的应用将需要应用自身需要的任何处理。
您的应用程序可以使用音频效果发现API查询在正常模式和原始模式下将哪些音频效果应用于所选的流类别。这里有一个示例:https://github.com/microsoftarchive/msdn-code-gallery-microsoft/tree/master/Official%20Windows%20Platform%20Sample/Audio%20effects%20discovery%20sample
如果不调用IAudioClient2 :: SetClientProperties,则默认值为eCategory = AudioCategory_Other,通常不是您想要的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。