怎样编程设置声卡的首选设备

xiaoqiqixiao 2004-03-25 09:08:41
我有2块声卡,可以在控制面板中选择一块作为首选设备,但我不想手工设置,怎样编程选择?
...全文
71 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shadowWind 2004-08-03
  • 打赏
  • 举报
回复
mark
xiaoqiqixiao 2004-03-25
  • 打赏
  • 举报
回复
这,这,这,呵呵,首先感谢支持

只是我要的不是枚举设备啊,我要的是如何设置首选设备啊,枚举设备我直接用
waveOutGetNumDevs,然后一个个用waveOutGetDevCaps来获得设备属性就可以了
至于这个IAMAudioInputMixer,好象是用来设备左右声道,音调之类的东东吧

呵呵,两次表示感谢
smallbugworm 2004-03-25
  • 打赏
  • 举报
回复
通过枚举 ICreateDevEnum *pSysDevEnum = NULL;
IEnumMoniker *pEnumCat = NULL;
IMoniker *pMoniker = NULL;
int iIndex = 0;

ULONG cFetched;

// Instantiate the system device enumerator if it doesn't exist
if (pSysDevEnum == NULL)
{
hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL,
CLSCTX_INPROC, IID_ICreateDevEnum,
(void **)&pSysDevEnum);
if (FAILED(hr))
return 0;
}

// Enumerate all filters of the selected category
hr = pSysDevEnum->CreateClassEnumerator(CLSID_AudioInputDeviceCategory, &pEnumCat, 0);
if (SUCCEEDED(hr))
{
// Enumerate all filters using the category enumerator
// hr = EnumFiltersAndMonikersToList(pEnumCat, List);
if(pEnumCat != NULL)
{
pEnumCat->Reset();
while(hr = pEnumCat->Next(1, &pMoniker, &cFetched), hr==S_OK)
{
IPropertyBag *pBag;
hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pBag);
if(SUCCEEDED(hr))
{
VARIANT var;
var.vt = VT_BSTR;
hr = pBag->Read(L"FriendlyName", &var, NULL);
if(hr == NOERROR)
{
char achName[MAX_PATH];
WideCharToMultiByte(CP_ACP, 0, var.bstrVal, -1, achName, MAX_PATH,
NULL, NULL);
strcpy(m_szAudioName [iIndex],achName);
SysFreeString(var.bstrVal);
// ASSERT(m_cap.rgpmAudioMenu[iIndex] == 0);
m_rgpmAudio[iIndex] = pMoniker;
pMoniker->AddRef();
}
SAFE_RELEASE(pBag);
}
pMoniker->Release();
iIndex++;
}
}
SAFE_RELEASE(pEnumCat);
}

m_nDeviceNum = iIndex;
SAFE_RELEASE(pSysDevEnum);
return m_nDeviceNum;这是枚举设备的代码
然后通过IAMAudioInputMixer这个接口进行设置,对这个接口的说明请参考DX SDK

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧