waveOutGetNumDevs与mixerGetNumDevs还是有大大的区别的.
还是举例看现象吧
本人机器有三块声卡,分别为:
0--Serial Audio Device
1--USB Audio Play
2--Vinyl AC'97 Audio(WAVE)
eg1:
#define MY_AUDIO_NAME "Serial Audio Device"
int GetWaveOutID()
{
int nDevNum = mixerGetNumDevs(); //区别就在这里 nDevNum 为2
//得不到USB Audio Play这块虚拟声卡
int _tWaveOutID = -1;
for(int i=0;i<nDevNum;i++)
{
MIXERCAPS stMixerCaps;
char * psDest = NULL;
memset(&stMixerCaps, 0, sizeof(stMixerCaps));
mixerGetDevCaps(i, &stMixerCaps, sizeof(stMixerCaps));
psDest = strstr(stMixerCaps.szPname, MY_AUDIO_NAME);
//AfxMessageBox(stMixerCaps.szPname);
if (psDest!=NULL)
{
_tWaveOutID=i;
}
}
return _tWaveOutID;
}
/////////////////////////////////////////////////////////////
eg2:
#define MY_AUDIO_NAME "Serial Audio Device"
int GetWaveOutID()
{
int nDevNum = mixerGetNumDevs(); //区别就在这里 nDevNum 为3
//可以得到USB Audio Play这块虚拟声卡
int _tWaveOutID = -1;
for(int i=0;i<nDevNum;i++)
{
MIXERCAPS stMixerCaps;
char * psDest = NULL;
memset(&stMixerCaps, 0, sizeof(stMixerCaps));
mixerGetDevCaps(i, &stMixerCaps, sizeof(stMixerCaps));
psDest = strstr(stMixerCaps.szPname, MY_AUDIO_NAME);
//AfxMessageBox(stMixerCaps.szPname);
if (psDest!=NULL)
{
_tWaveOutID=i;
}
}
return _tWaveOutID;
}
///////////////////////////////////////////////////////////////////////
现象就是这样,让我们再看看waveOutGetNumDevs与mixerGetNumDevs的介绍
mixerGetNumDevs :获取当前混合设备数量.
waveOutGetNumDevs:返回系统中安装了的声卡的个数.