创建设备对象

创建设备对象最简单的方式是使用 DirectSoundCreate8 函数。函数的第一个参数指定了与对象关联的设备的GUID。你能够通过枚举设备获取这个GUID,也可以传递以下GUID中的一个来指定一个默认设备。
GUID 定义
描述
DSDEVID_DefaultPlayback
默认系统音频设备。你也可以传入一个空指针来指定这个设备。默认设备是枚举到的“主要DirectSound 驱动”。
DSDEVID_DefaultVoicePlayback
默认声音通信设备。通常,这是一个辅助设备,如USB耳麦。
如果没有列出任何设备,那么DirectSoundCreate8 的调用将会失败。
如果在VXD 驱动下没有任何声音设备,或者声音设备正处于一个使用标准Win32波形音频函数的应用程序的控制下,函数则返回错误。你必须为这种调用失败做好准备,使你的应用程序能以无声的状态继续运行,或者提示用户关闭正在使用声音设备的应用程序。
以下代码为默认设备创建了一个对象,并获得了IDirectSound8 接口:
LPDIRECTSOUND8 lpds; 
HRESULT hr = DirectSoundCreate8(NULL, &lpds, NULL));
注意:DirectSoundCreate8 不要求调用CoInitialize 或CoInitializeEx。如果你的应用程序使用DMOs,它必须在创建任何对象前显式初始化COM。

如果你的应用程序采集声音,同时播放它们,你可以通过DirectSoundFullDuplexCreate8方便地创建播放和采集设备,以及播放和采集缓冲区。
你也可以使用标准COM函数创建设备对象,如:
1. 在你的应用程序开始的时候调用CoInitializeEx 来初始化COM。
HRESULT hr = CoInitializeEx(NULL, 0);
if (FAILED(hr))
{
  ErrorHandler(hr);  // Add error-handling here.
}
2. 使用CocreateInstance 和IDirectSound8::Initialize方法创建设备对象,而不是DirectSoundCreate8 函数。
LPDIRECTSOUND8 lpds; 
hr = CoCreateInstance(&CLSID_DirectSound8,
          NULL, 
          CLSCTX_INPROC_SERVER,
          IID_IDirectSound8,
          (LPVOID*) &lpds);
if (FAILED(hr))
{
  ErrorHandler(hr);  // Add error-handling here.
}
CLSID_DirectSound8 是DirectSound 驱动对象类的类标识符,IID_IDirectSound8 是接口标识符。Lpds 参数返回接口指针。
3. 调用IDirectSound8::Initialize 方法关联设备和对象。这个方法与DirectSoundCreate8 使用的设备GUID参数相同。
hr = lpds->Initialize(NULL);
if (FAILED(hr))
{
  ErrorHandler(hr);  // Add error-handling here.
}
4. 在你关闭应用程序之前,调用CoUninitialize 函数关闭COM库,如:
CoUninitialize();

DirectSound学习笔记(2):创建设备对象相关推荐

  1. JavaScript学习笔记:创建自定义对象

    文章目录 一.利用构造函数模式创建自定义对象 二.采用原型模式创建自定义对象 三.采用混合模式创建自定义对象 四.采用动态原型模式创建自定义对象 一.利用构造函数模式创建自定义对象 使用构造函数可以创 ...

  2. 【数据库学习笔记】——创建数据库连接对象connection

    目录 connect函数的参数 创建连接对象连接MySQL代码 连接对象常见属性与方法 事务名词解释 课程视频链接: 第14节 Python操作数据库_哔哩哔哩_bilibili666https:// ...

  3. 【数据库学习笔记】——cursor游标对象

    目录 1.创建cursor对象 2.cursor对象常用方法 3.操作数据库的常见流程(五部曲) 课程视频链接: 第14节 Python操作数据库_哔哩哔哩_bilibili666https://ww ...

  4. JavaScript学习笔记02【基础——对象(Function、Array、Date、Math)】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  5. Django:学习笔记(2)——创建第一个应用

    Django:学习笔记(2)--创建第一个应用 创建应用 在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定.Django 自带一个工具,可以帮你生成应用的基础目录结构, ...

  6. spring学习笔记02-spring-bean创建的细节问题

    spring学习笔记02-spring-bean创建的细节问题 三种创建Bean对象的方式 Bean的作用范围 Bean的生命周期 <?xml version="1.0" e ...

  7. JavaScript学习笔记:创建、添加与删除节点

    JavaScript学习笔记:创建.添加与删除节点 文章目录 JavaScript学习笔记:创建.添加与删除节点 一.DOM对象节点类型 二.创建节点 1.创建元素节点 2.创建文本节点 3.创建属性 ...

  8. oracle 创建角色 权限设置,[学习笔记] Oracle创建用户、分配权限、设置角色,

    [学习笔记] Oracle创建用户.分配权限.设置角色, 创建用户 create user student --用户名 identified by "123456" --密码 de ...

  9. JavaScript学习笔记03【基础——对象(RegExp、Global)】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

最新文章

  1. android stadio 打开别人的工程 一直在编译中
  2. linux c 编译时 include 和 链接库 文件路径指定
  3. Leetcode 144. 二叉树的前序遍历 解题思路及C++实现
  4. ADSL MODEM巧设置解决BT、电驴等下载软件掉线问题
  5. 清北学堂十一培训酱油记
  6. NetCore 2.0 + Swagger 的WebAPI 模板例子
  7. C#指南,重温基础,展望远方!(8)C#数组
  8. vscode工作区是什么意思_VS Code中的“工作区”是什么?
  9. 并发(10):线程之间的协作(上)
  10. Day54 Java框架 SSH案例_CRM(二)
  11. 腾讯开放平台实现QQ登录
  12. 副总和副总裁的区别_总经理与副总经理的巨大区别
  13. 软件一般是用什么语言开发的
  14. 福建省三明市谷歌卫星地图下载
  15. Element ui —— dialog 弹窗 设置点击空白处不关闭
  16. 【网络安全】——逻辑漏洞之短信轰炸漏洞
  17. 猫眼娱乐财报:盈利的可持续难题
  18. 难道真的忘记放洗衣粉了??
  19. 使用预计算实时全局光照优化照明-微调光照贴图参数
  20. 开源,选择Google Code还是Sourceforge【转】

热门文章

  1. android runnable内存泄漏,这个Runnable可以防止内存泄漏吗?
  2. stats | nls——求解非线性回归的待定参数
  3. java writeint_Java DataOutputStream writeInt()方法
  4. 3d 自动生成物体_根据 2D 图片自动生成 3D 图书封面的牛逼工具
  5. 零基础小白如何学习UI设计
  6. 2020年了,JavaScript依然是前端最受欢迎的语言吗?
  7. 关于TCP三次握手过程
  8. B - C语言实验——整数位
  9. can总线短距离不用双绞线_汽车中的总线系统——以太网(2)博通出世
  10. bootstrap file input java,BootStrap-fileinput初识