协作级别

因为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. 七天入门linux,RHCE认证学习笔记-第七天
  2. 电脑pdf阅读器哪个好用_电脑免费录屏软件哪个好用?这两个录屏方法千万别错过...
  3. 用R做heatmap示例:NBA联盟50位顶级球员的指标表现
  4. linux lamp架构部署,Centos7部署LAMP平台之架构之路
  5. 【HDU - 3410 】 Passing the Message(单调栈)
  6. 上传文件到服务器地址怎么配置,文件上传到服务器怎么配置
  7. [SecureCRT] 解决 securecrt failed to open the host key database file 的问题
  8. 2 万字长文盘点五种负载均衡策略
  9. Ax 2012批量部署报表
  10. java 打印 日历 详细 注解_Java实现按年月打印日历功能【基于Calendar】
  11. 心智成熟的道路虽然辛苦,却是实打实的进步,因为你的每一次迈进,朝向的都是自我实现,也是人之所以为人的价值所在
  12. CF949A Zebras 构造
  13. js+json实现哔哩哔哩番剧时间表
  14. 观影坪-纪录片之《穹顶之下》
  15. (构造+二进制)2020牛客寒假算法基础集训营3B.牛牛的DRB迷宫II
  16. IDEA官方中文插件!!!
  17. BZOJ 4833: [Lydsy1704月赛]最小公倍佩尔数(数论 + 最值反演)
  18. (超简单)ESP8266深度睡眠模式下远程采集温湿度信息
  19. Convert hex to base64
  20. linux客户端显示fin_wait2,解决Linux服务器 FIN_WAIT2 连接过多的问题

热门文章

  1. Linux 命令:pwd、touch、ll、wget
  2. 查看git版本的cmd命令
  3. Java异常中受检异常非受检异常与RuntimeException异常关系
  4. 学计算机的快毕业要学论文吗,学计算机的好写毕业论文吗?
  5. Spring 框架所有版本大集合下载
  6. sftp服务器同步文件到本地,服务器之间通过sftp的方式同步文件,并入库到本地数据的表中...
  7. 视图插入数据_数据库DQL、DML、DDL、DCL 详解
  8. 空客fctm避免已识别风险_最远可航行15000公里,南航首架空客A350飞机首航,将先飞广州-上海航线再飞国际...
  9. 算法练习day3——190320(对数器、归并排序)
  10. python图形设置_python学习笔记——基本图形绘制