Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > DirectSound学习笔记(2):创建设备对象
【标  题】:DirectSound学习笔记(2):创建设备对象
【关键字】:DirectSound
【来  源】:http://blog.csdn.net/pyundeng/archive/2006/10/21/1344646.aspx

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

Your Ad Here

创建设备对象

创建设备对象最简单的方式是使用 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学习笔记(3):协作级别:【上一篇】
installshield制作一个简单的vc++安装程序:【下一篇】
【相关文章】
  • DirectSound学习笔记(3):协作级别
  • DirectSound学习笔记(4):设备性能
  • DirectSound学习笔记(5):使用WAV数据
  • DirectSound学习笔记(6):创建辅助缓冲区
  • DirectSound学习笔记(7):缓冲区操作
  • 建立第一个directX程序——在C#下利用DirectSound实现声音播放
  • 【随机文章】
  • 韩国首次证实CDMA手机对身体存在电磁危害
  • spring 实践,进一步理解和使用aop
  • 启动WinMySQLAdmin出现-MyODBC- Not Found的问题
  • Java程序3(流,socket)
  • xml学习文档 DTD 恐惧
  • acroread与realplay的安装问题
  • 开始我的LINUX之旅
  • Java Map 集合类简介(续1)
  • 参加思科上海研发笔试
  • junit
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.