协作级别

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

在创建一个设备对象后,你必须使用IDirectSound8::SetCooperativeLevel 方法为这个设备设置协作级别。如果你不这么做,将无法听到声音。下面这个例子为DirectSound设备设置了协作级别,这个设备由IDirectSound8接口lpDirectSound标识。Hwnd参数是应用程序窗口句柄。

HRESULT hr = lpDirectSound->SetCooperativeLevel(hwnd, DSSCL_PRIORITY);
if (FAILED(hr))
...{
  ErrorHandler(hr);  // Add error-handling here.
}

DirectSound为声音设备定义了三个协作级别,由值DSSCL_NORMAL,DSSCL_PRIORITY和DSSCL_WRITEPRIMARY指定。
注意:DSSCL_EXCLUSIBE协作级别已经过时。一个DirectX应用程序不再可能使其他应用程序沉寂。那些要求专用级别的应用程序将被赋予优先级别。

标准协作级别

在标准协作级别(DSSCL_NORMAL)下,应用程序不能设置主缓冲区的格式,填充主缓冲区,或者压缩设备的On-board内存。所有在这个协作级别的应用程序使用一个22KHz,立体音效,8位采样格式的主缓冲区,这样设备能够在应用程序间顺利地切换。

优先协作级别

当使用一个出于优先协作级别(DSSCL_PRIORITY)地DirectSound设备时,应用程序享有对硬件资源的优先权,如硬件混频,设置主缓冲区的格式,以及压缩设备的On-board内存。
游戏程序在几乎所有环境下都应该使用优先协作级别。这个级别给予了应用程序最强大的行为能力,使它能够控制采样率和位深度。优先协作级别也允许来自其他应用程序(如IP电话)的声音与游戏中的声音一同被听到。

写主缓冲区协作级别

最高协作级别是写主缓冲区(DSSCL_WRITEPRIMARY)。当使用这一协作级别的DirectSound设备时,你的应用程序能够直接访问非WDM驱动的主缓冲区。在这种模式下,应用程序必须直接填充主缓冲区。此时,辅助缓冲区无法被播放。
一个应用程序为了获取对主缓冲区中音频采样的直接写访问,必须被设置为写主缓冲区级别。如果应用程序没有被设置成这一级别,那么所有对主缓冲区上IDirectSoundBuffer::Lock方法的调用都将失败。
注意:主缓冲区只支持IDirectSoundBuffer接口,而不是IDirectSoundBuffer8。
当你的应用程序被设置为写主缓冲区协作级别并出于前台位置时,所有用于其他应用程序的辅助缓冲区将被停止并标记为已丢失。当你的应用程序顺次移动到后台时,它的主缓冲区被标记为已丢失,并且在应用程序再次移动到前台时被恢复。
如果一个DirectSound驱动器不在用户系统中时,你无法设置写主缓冲区协作级别。为判断是否出于这种情形,调用IDirectSound8::GetCaps方法,并检查DSCAPS结构中DSCAPS_EMULDRIVER标识。

转载于:https://www.cnblogs.com/jdmei520/archive/2009/05/27/1490631.html

DirectSound学习笔记(3):协作级别相关推荐

  1. Redis学习笔记,保姆级别!!学不会你打我!

    其中资料参考:Redis官网文档.百度百科.狂神说.陈哈哈的博客 文章目录 Redis概述 Window安装 Linux安装 测试性能 基础的知识 五大数据类型 String(字符串) List(列表 ...

  2. DirectSound学习笔记(2):创建设备对象

    创建设备对象 创建设备对象最简单的方式是使用 DirectSoundCreate8 函数.函数的第一个参数指定了与对象关联的设备的GUID.你能够通过枚举设备获取这个GUID,也可以传递以下GUID中 ...

  3. Dvwa之暴力破解全级别学习笔记

    暴力破解 暴力破解也可称为穷举法.枚举法,是一种针对于密码的破译方法,将密码进行逐个推算直到找出真正的密码为止.设置长而复杂的密码.在不同的地方使用不同的密码.避免使用个人信息作为密码.定期修改密码等 ...

  4. Dvwa之SQL盲注全级别学习笔记

    SQL盲注 盲注是SQL注入的一种,相比于常规的SQL注入,盲注一般不会返回数据库的数据信息或者语句提示.只会返回管理员设定的特定信息. SQL盲注-测试流程 同样的,和之前DVWA的普通SQL In ...

  5. 【Unity学习笔记】b站Unity架构课Unity3D 商业化的网络游戏架构(高级/主程级别)

    [Unity学习笔记]b站Unity架构课Unity3D 商业化的网络游戏架构(高级/主程级别) 自己跟着学完了,写了不少代码,会放在CSDN代码库,因为老师并没有提供源码,录屏也不是完全连续,所以难 ...

  6. git serialtool_Git学习笔记---协作的一般流程

    一般的操作流程 1.pull 王小坤与另一个同事张大炮一起开发一个项目,张大炮昨天修改了数据库读写的api,优化了执行速度,并把read()函数改名成了Read(),下午下班之前把这些代码push到服 ...

  7. 工作流Activiti5.13学习笔记(一)

    工作流Activiti5.13学习笔记(一) 了解工作流 1.工作流(Workflow),就是"业务过程的部分或整体在计算机应用环境下的自动化",它主要解决的是"使在多个 ...

  8. java多线程学习笔记。

    java多线程学习笔记 线程的优缺点: 多线程的好处: 充分利用多处理核心,提高资源的利用率和吞吐量. 提高接口的响应效率,异步系统工作. 线程的风险: 安全危险(竞争条件):什么坏事都没有发生.在没 ...

  9. Redis学习笔记1-理论篇

    目录 1,Redis 数据类型的底层结构 1.1,Redis 中的数据类型 1.2,全局哈希表 1.3,数据类型的底层结构 1.4,哈希冲突 1.5,rehash 操作 2,Redis 的 IO 模型 ...

最新文章

  1. 机房收费系统重构(三)—工厂+反射+DAL
  2. mysql平滑关闭_MySQL平滑删除数据的小技巧
  3. 简单的XML和JSON数据的处理
  4. SpringCloud教程-分布式配置中心Config (SpringCloud版本Greenwich.SR4)
  5. mysql挂载到iscsi_corosync+pacemaker+iscsi磁盘实现mysql高可用
  6. wcg总决赛_关于总决赛
  7. css 样式面板,关于 CSS 样式面板
  8. 13.深度学习练习:Autonomous driving - Car detection(YOLO实战)
  9. python时间序列滞后命令,时间序列-相关性和滞后时间
  10. 中小企业成败关键在于老板
  11. linuxpython23同时_Linux-centos同时存在Python2-Python3
  12. MySQL 字符集支持
  13. 中国栓塞线圈市场趋势报告、技术动态创新及市场预测
  14. hdu5651 xiaoxin juju needs help(逆元)
  15. 有时更贵的ADC是最划算的
  16. PLC通过智能网关,实现HTTP协议的POST请求,与服务端JSON格式双向通讯
  17. 使用matlab设计电机控制器,基于Matlab的PMSM电机控制系统虚拟开发平台设计
  18. (C语言) 用牛顿迭代法求方程2x^3 - 4x^2 + 3x - 6 = 0在1.5附近的根
  19. Activity 生命周期详解与异常情况生命周期
  20. uwsgi 的启动、停止、重启

热门文章

  1. RabbitMQ Header模式
  2. springboot项目启动后找不到jsp文件
  3. 快速了解 UML 类图
  4. Qt之QML编码约定
  5. 【已解决】R语言,如何切换镜像?
  6. Iterator和ListIterator接口的使用和区别
  7. 200 计算机网络之物理层思维导图小结
  8. 帝国cms怎么增加php,帝国CMS增加系统配置字段
  9. Cache相关基本概念理解
  10. signal.h 中的宏定义 SIG_DFL 及 SIG_IGN