DirectSound学习指南之协作级别

DirectSound学习指南之协作级别,第1张

DirectSound学习指南之协作级别,第2张

协作级别

因为Windows是一个多任务环境,多个应用程序可能随时在一个设备驱动程序上运行。虽然使用了协作级别,但DirectX仍然确保每个应用程序都不能以错误的方式或在错误的时刻访问设备。每个DirectSound应用程序都有一个协作级别,用于确定允许它访问设备的程度。

创建设备对象后,必须使用idirectsound 8::setcooperativelevel方法来设置此设备的协作级别。如果你不这样做,你就听不到声音了。以下示例设置DirectSound设备的协作级别,该设备由IDirectSound8接口lpDirectSound标识。Hwnd参数是应用程序窗口句柄。

HRESULT HR = lpDirectSound-> SetCooperativeLevel(hwnd,ds SCL _ PRIORITY);
if(失败(hr))
...{
error handler(HR);//在此添加错误处理。
}

DirectSound为声音设备定义了三个协作级别,由值DSSCL_NORMAL、DSSCL_PRIORITY和DSSCL_WRITEPRIMARY指定。

注意:DSSCL_EXCLUSIBE的协作级别已过时。DirectX应用程序不能再让其他应用程序静音。那些需要特殊等级的申请将被优先考虑。

标准协作级别

在标准协作级别(DSSCL_NORMAL)下,应用程序无法格式化主缓冲区、填充主缓冲区或压缩器件的板载存储器。此协作级别的所有应用程序都使用22KHz的主缓冲区、立体声和8位采样格式,以便设备可以在应用程序之间平滑切换。

协作的优先级别

使用基于DSSCL_PRIORITY的DirectSound设备时,应用程序享有硬件资源的优先权,如硬件混合、设置主缓冲区的格式、压缩设备的板载内存等。

游戏应该在几乎所有环境中使用优先协作级别。这一级别为应用程序提供了强大的行为能力,使其能够控制采样速率和位深度。优先级还允许在游戏中听到来自其他应用程序(如IP电话)的声音。

写入主缓冲区协作级别

协作级别是写主缓冲区(DSSCL_WRITEPRIMARY)。当使用这种级别的协作DirectSound设备时,您的应用程序可以直接访问非WDM驱动程序的主缓冲区。在这种模式下,应用程序必须直接填充主缓冲区。此时,辅助缓冲区无法播放。

为了获得对主缓冲器中音频样本的直接写访问,必须设置应用程序来写主缓冲器级别。如果应用程序未设置为该级别,则对主缓冲区的IDirectSoundBuffer::Lock方法的所有调用都将失败。

注意:主缓冲区只支持IDirectSoundBuffer接口,不支持IDirectSoundBuffer8。

当您的应用程序被设置为写入主缓冲区协作级别并退出前台位置时,所有用于其他应用程序的辅助缓冲区都将被停止并标记为丢失。当您的应用程序按顺序移动到后台时,它的主缓冲区被标记为丢失,并在应用程序再次移动到前台时恢复。

如果DirectSound驱动器不在用户系统中,则不能设置写主缓冲区协作级别。要确定是否是这种情况,请调用IDirectSound8::GetCaps方法并检查DSCAPS结构中的DSCAPS _ emuldriver标识符。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » DirectSound学习指南之协作级别

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情