如何获得系统当前的音频设备名称?

sunmono 2004-09-21 06:45:37
请问:
如何获得系统当前使用的音频设备的名称?
谢谢!!!!!
...全文
157 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sodangerous 2004-09-22
  • 打赏
  • 举报
回复
mixerGetDevCaps
DentistryDoctor 2004-09-22
  • 打赏
  • 举报
回复
// method to get the list of mixer information from VFW
void MixerList::getMixerInfo(){

MIXERCAPS mixcaps;
MMRESULT err;
unsigned long iNumDevs, i, j, k, l, xpos, ypos;
MixerInfo * mInfo;
DestInfo * dInfo;
SourceInfo * sInfo;
ControlInfo * cInfo;

/* Get the number of Mixer devices in this computer */
iNumDevs = mixerGetNumDevs();

/* Go through all of those mixer devices, getting info for each one */
for (i = 0; i < iNumDevs; i++)
{
/* Get info about the next device */
if (!mixerGetDevCaps(i, &mixcaps, sizeof(MIXERCAPS)))
{
/* create a mixerInfo for the mixer */
mInfo = new MixerInfo();
mInfo->setName(mixcaps.szPname);

/* Get info about all the destination lines for this mixer */
for(j=0;j<mixcaps.cDestinations;j++){
dInfo = new DestInfo();
MIXERLINE dmixerline;
dmixerline.cbStruct = sizeof(MIXERLINE);
dmixerline.dwDestination = j;
if ((err = mixerGetLineInfo((HMIXEROBJ)i,&dmixerline, MIXER_GETLINEINFOF_DESTINATION))) {
TRACE0("Error getting destination lines\n");
}
else{
dInfo->setName(dmixerline.szName);
dInfo->setFlags(dmixerline.fdwLine);
dInfo->setLineID(dmixerline.dwLineID);

/* Get info about all the controls for this dest line */
MIXERLINECONTROLS destLineControls;
MIXERCONTROL * destControlArray = (MIXERCONTROL*)malloc(dmixerline.cControls * sizeof(MIXERCONTROL));
destLineControls.cbStruct = sizeof(MIXERLINECONTROLS);
destLineControls.cControls = dmixerline.cControls;
destLineControls.dwLineID = dmixerline.dwLineID;
destLineControls.pamxctrl = destControlArray;
destLineControls.cbmxctrl = sizeof(MIXERCONTROL);
if ((err = mixerGetLineControls((HMIXEROBJ)i, &destLineControls, MIXER_GETLINECONTROLSF_ALL))){
TRACE0("Error getting destination line controls");
}
else{
ypos = STD_CONTROL_START + STD_BORDER * 2;
for(l=0;l<dmixerline.cControls;l++){
ypos = ypos + STD_BORDER;
cInfo = new ControlInfo();
cInfo->setName(destControlArray[l].szName);
cInfo->setId(destControlArray[l].dwControlID);
cInfo->setType(destControlArray[l].dwControlType);
cInfo->setFlags(destControlArray[l].fdwControl);
cInfo->setMulti(destControlArray[l].cMultipleItems);
cInfo->setMax(destControlArray[l].Bounds.dwMaximum);
cInfo->setMin(destControlArray[l].Bounds.dwMinimum);
cInfo->setStep(destControlArray[l].Metrics.cSteps);
cInfo->setGUIx(STD_BORDER * 2);
cInfo->setGUIy(ypos);
cInfo->setWide(STD_CONTROL_WIDE);
cInfo->setHigh(getControlHeight(cInfo->getType()));
ypos = ypos + cInfo->getHigh() + STD_BORDER ;
dInfo->addControl(cInfo);
}
}

/* Get info about all the source lines for this dest line */
xpos = STD_CONTROL_WIDE + STD_BORDER * 4;
for(k=0;k<dmixerline.cConnections;k++){
sInfo = new SourceInfo();
MIXERLINE smixerline;
smixerline.cbStruct = sizeof(MIXERLINE);
smixerline.dwDestination = j;
smixerline.dwSource = k;
if ((err = mixerGetLineInfo((HMIXEROBJ)i, &smixerline, MIXER_GETLINEINFOF_SOURCE))){
TRACE0("Error getting source lines\n");
}
else{
sInfo->setName(smixerline.szName);
sInfo->setFlags(smixerline.fdwLine);
sInfo->setLineID(smixerline.dwLineID);
sInfo->setGUIy(STD_CONTROL_START);
sInfo->setGUIx(xpos);
if (sInfo->isActive())
xpos = xpos + STD_CONTROL_WIDE + STD_BORDER * 3;

/* get info about all the controls for this source line */
MIXERLINECONTROLS sourceLineControls;
MIXERCONTROL * sourceControlArray = (MIXERCONTROL*)malloc(smixerline.cControls * sizeof(MIXERCONTROL));
sourceLineControls.cbStruct = sizeof(MIXERLINECONTROLS);
sourceLineControls.cControls = smixerline.cControls;
sourceLineControls.dwLineID = smixerline.dwLineID;
sourceLineControls.pamxctrl = sourceControlArray;
sourceLineControls.cbmxctrl = sizeof(MIXERCONTROL);
if ((err = mixerGetLineControls((HMIXEROBJ)i, &sourceLineControls, MIXER_GETLINECONTROLSF_ALL))){
TRACE0("Error getting source line controls");
}
else{
ypos = STD_CONTROL_START + STD_BORDER * 3;
for(l=0;l<smixerline.cControls;l++){
cInfo = new ControlInfo();
cInfo->setName(sourceControlArray[l].szName);
cInfo->setId(sourceControlArray[l].dwControlID);
cInfo->setType(sourceControlArray[l].dwControlType);
cInfo->setFlags(sourceControlArray[l].fdwControl);
cInfo->setMulti(sourceControlArray[l].cMultipleItems);
cInfo->setMax(sourceControlArray[l].Bounds.dwMaximum);
cInfo->setMin(sourceControlArray[l].Bounds.dwMinimum);
cInfo->setStep(sourceControlArray[l].Metrics.cSteps);
cInfo->setGUIx(sInfo->getGUIx() + STD_BORDER);
cInfo->setGUIy(ypos);
cInfo->setWide(STD_CONTROL_WIDE);
cInfo->setHigh(getControlHeight(cInfo->getType()));
ypos += cInfo->getHigh() + STD_BORDER;
sInfo->addControl(cInfo);
}
}

dInfo->addSource(sInfo);
}
}
}

mInfo->addDest(dInfo);
}

/* add the info for the mixer to the list of mixers */
addMixer(mInfo);
}
}

}
sunmono 2004-09-22
  • 打赏
  • 举报
回复
up help

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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