ove*_*der 5 windows directsound
我正在编写一个控制台程序,它使用DirectSound API来渲染一些音频数据.在按照DirectSound编程指南(来自Microsoft)时,我偶然发现了一个奇怪的问题.根据文件:
创建设备对象后,必须使用IDirectSound8 :: SetCooperativeLevel方法设置设备的协作级别.除非你这样做,否则不会听到任何声音.
问题是我正在编写一个控制台程序,并且SetCooperativeLevel需要HWND作为第一个参数.我没有在控制台程序中处理任何HWND.我尝试提供一个空指针,但它失败了一个DSERR_INVALIDPARAM错误代码.
应该IDirectSound8::SetCooperativeLevel在控制台程序中提供什么HWND值?计划的音频部分计划构建为共享库,因此几乎不知道"外部"程序.
谢谢你的建议!
注意:我知道有一个更好的解决方案可以简单地渲染音频,比如使用SDL,OpenAL,SFML(基于OpenAL),但对于我当前的项目,DirectSound是强制执行的.
编辑:我发现Microsoft工程师发来的消息消除了SetCooperativeLevel在创建GLOBAL_FOCUS缓冲区时使用桌面窗口或控制台窗口作为HWND的疑虑.
虽然我自己没有对此进行测试,但您可能会成功创建隐藏窗口并将其 HWND 传递给该SetCooperativeLevel方法。SetCooperativeLevel使用此 hwnd 来确定您的应用程序何时具有输入焦点;因此,如果您选择输入焦点无关紧要的协作级别(例如,DSSCL_NORMAL),则隐藏窗口(永远不会接收输入焦点)应该没问题。
| 归档时间: |
|
| 查看次数: |
3780 次 |
| 最近记录: |