您的位置:首页 > 其它

XAudio2学习二之获取输出设备数

2016-01-21 16:17 295 查看

XAudio2学习二之获取输出设备数

徐冬冬

本篇主要讲如何获取输出设备数:所谓输出设备,就是播放设备,比如扬声器。

一.VS怎么 引用XAudio2静态库和头文件。

头文件:Project右键->properties->c/c++->additional include directories:./SDK\DirectX2010\Include

静态库:暂时不需要添加。

二.获取音频输出设备数:

XAudio2获取音频输出设备主要有四步:

1、初始化COM组件:

COM组件初始化有两种:CoInitialize、CoInitializeEx。两者都是WinAPI。使用COM组件之前必须调用二者之一进行初始化。

这两者是有区别的:CoInitialize是告诉Windows以单线程方式运行。而CoInitializeEx告诉Windows可以以多线程方式运行(也可以以单线程方式运行),以多线程方式初始化时使用COINIT_MULTITHREADED。

2、创建XAudio2引擎:

IXAudio2是XAudio2的声音引擎,基本上所有操作都是基于此基础上,引擎创建后默认是开启的。

IXAudio2MasterVoice、IXAudio2SubmixVoice、IXAudio2SourceVoice都是由IXAudio2创建的。

而IXAudio2可以通过XAudio2Create()函数接口来创建。

IXAudio2 *pEngine = NULL;
hr = XAudio2Create(&pEngine);//创建一个IXAudio2对象

对于XAudio2Create接口原型:

HRESULT XAudio2Create(
  _Out_ IXAudio2          **ppXAudio2,
  _In_  UINT32            Flags,
  _In_  XAUDIO2_PROCESSOR XAudio2Processor
);



ppXAudio2表示返回一个IXAudio2对象。Flags表示IXAudio2的行为。此参数必须为0.XAudio2Processor指定使用哪一个CPU。缺省值为XAUDIO2_DEFAULT_PROCESSOR。

3.获取输出设备个数:

UINT uPlayer = 0;
hr = pEngine->GetDeviceCount(&uPlayer);//获取音频输出设备个数
GetDeviceCount只有一个参数,返回个数。

4.释放资源:

pEngine->Release();//释放资源
CoUninitialize();//释放资源
IXAudio2接口继承自IUnKnown,使用完成后必须进行释放。然后释放COM套件。

下面是完整的例子:

#include "XAudio2.h"
#include <stdio.h>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
	HRESULT hr =  CoInitialize(0);//初始化COM组件
	if (FAILED(hr))
		return -1;

	IXAudio2 *pEngine = NULL;
	hr = XAudio2Create(&pEngine);//创建一个IXAudio2对象
	if (FAILED(hr))
		return -1;

	UINT uPlayer = 0;
	hr = pEngine->GetDeviceCount(&uPlayer);//获取音频输出设备个数
	if (FAILED(hr))
		return -1;

	cout << uPlayer<<endl;

	pEngine->Release();//释放资源
	CoUninitialize();//释放资源

	return 0;
}

备注:请尊重版权,转载请联系作者QQ:1245178753。

交流请加:

群名称:XAudio2 交流群

群 号:233537460

本文链接:/article/3704295.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: