//--------------------------------------------------------------------------- #include
#pragma hdrstop #include "Unit1.h"
#include "mmsystem.h"
#include "assert.h" #include "stdio.h" HMIXER MM_HMIXER; MIXERCAPS MM_MxCaps; //---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Initial(); ScrollBar1->Max = 0xFFFF; ScrollBar2->Max = 0xFFFF; ScrollBar3->Max = 0xFFFF; ScrollBar4->Max = 0xFFFF; ScrollBar5->Max = 0xFFFF; ScrollBar6->Max = 0xFFFF; ScrollBar7->Max = 0xFFFF; ScrollBar8->Max = 0xFFFF; ScrollBar9->Max = 0xFFFF; ScrollBar10->Max = 0xFFFF; ScrollBar11->Max = 0xFFFF; ScrollBar13->Max = 0xFFFF; ScrollBar15->Max = 0xFFFF; ScrollBar16->Max = 0xFFFF; int VolumeValue[2]; GetMasterVolumeValue(0,VolumeValue); ScrollBar1->Position = 0xFFFF - VolumeValue[0]; ScrollBar9->Position = 0xFFFF - VolumeValue[1]; GetMasterVolumeValue(2,VolumeValue); ScrollBar2->Position = 0xFFFF - VolumeValue[0]; ScrollBar10->Position = 0xFFFF - VolumeValue[1]; GetMasterVolumeValue(4,VolumeValue); ScrollBar3->Position = 0xFFFF - VolumeValue[0]; ScrollBar11->Position = 0xFFFF - VolumeValue[1]; GetMasterVolumeValue(6,VolumeValue); ScrollBar4->Position = 0xFFFF - VolumeValue[0]; GetMasterVolumeValue(8,VolumeValue); ScrollBar5->Position = 0xFFFF - VolumeValue[0]; ScrollBar13->Position = 0xFFFF - VolumeValue[1]; GetMasterVolumeValue(11,VolumeValue); ScrollBar6->Position = 0xFFFF - VolumeValue[0]; GetMasterVolumeValue(13,VolumeValue); ScrollBar7->Position = 0xFFFF - VolumeValue[0]; ScrollBar15->Position = 0xFFFF - VolumeValue[1]; GetMasterVolumeValue(15,VolumeValue); ScrollBar8->Position = 0xFFFF - VolumeValue[0]; ScrollBar16->Position = 0xFFFF - VolumeValue[1];
}
//--------------------------------------------------------------------------- __fastcall TForm1::~TForm1()
{
UnInitial();
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender)
{
/*
mciSendString("close p1",0,0,0); mciSendStringA("open new type WAVEAudio alias p1",0,0,0); mciSendString("record p1",0,0,0);
*/
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
SetMasterVolumeValue(0xFFFF - ScrollBar1->Position,0xFFFF - ScrollBar9->Position,MIXERLINE_COMPONENTTYPE_DST_FIRST); SetMasterVolumeValue(0xFFFF - ScrollBar2->Position,0xFFFF - ScrollBar10->Position,2); SetMasterVolumeValue(0xFFFF - ScrollBar3->Position,0xFFFF - ScrollBar11->Position,4); SetMasterVolumeValue(0xFFFF - ScrollBar4->Position,0xFFFF - ScrollBar4->Position,6); SetMasterVolumeValue(0xFFFF - ScrollBar5->Position,0xFFFF - ScrollBar13->Position,8); SetMasterVolumeValue(0xFFFF - ScrollBar6->Position,0xFFFF - ScrollBar6->Position,11); SetMasterVolumeValue(0xFFFF - ScrollBar7->Position,0xFFFF - ScrollBar15->Position,13); SetMasterVolumeValue(0xFFFF - ScrollBar8->Position,0xFFFF - ScrollBar16->Position,15);
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Initial(void)
{
assert(MM_HMIXER == NULL); MM_NumMixers = mixerGetNumDevs(); MM_HMIXER = NULL; ZeroMemory(&MM_MxCaps,sizeof(MIXERCAPS)); MM_Minimum = 0; MM_Maximum = 0; MM_VolumeControlID = 0; MM_DstLineName = ""; MM_VolumeControlName = ""; if (MM_NumMixers != 0)
{
if (mixerOpen(&MM_HMIXER,0,reinterpret_cast(Handle),NULL,MIXER_OBJECTF_MIXER | CALLBACK_WINDOW) != MMSYSERR_NOERROR)
{
ShowMessage("mixerOpen Error"); return;
}
if (mixerGetDevCaps(reinterpret_cast(MM_HMIXER),&MM_MxCaps,sizeof(MIXERCAPS)) != MMSYSERR_NOERROR)
{
ShowMessage("mixerGetDevCaps Error"); return;
}
}
else
{
ShowMessage("mixerGetNumDevs Error");
} if (MM_HMIXER == NULL)
{
ShowMessage("Initial Error_1"); return ;
} MIXERLINE mxl1,mxl2; MIXERCONTROL mxc1,mxc2; MIXERLINECONTROLS mxlc1,mxlc2; for (int i = 0;i < MM_MxCaps.cDestinations - 1;i )
{
mxl1.dwDestination = i; mxl1.cbStruct = sizeof(MIXERLINE); if (mixerGetLineInfo(reinterpret_cast(MM_HMIXER),&mxl1,MIXER_GETLINEINFOF_DESTINATION) != MMSYSERR_NOERROR)
{
ShowMessage("MIXER_GETLINEINFOF_DESTINATION Error"); return;
} if (mxl1.cControls > 1)
{
mxlc1.cbStruct = sizeof(MIXERLINECONTROLS); mxlc1.dwLineID = mxl1.dwLineID; mxlc1.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME; mxlc1.cControls = mxl1.cControls; mxlc1.cbmxctrl = sizeof(MIXERCONTROL); mxlc1.pamxctrl = &mxc1; if (mixerGetLineControls(reinterpret_cast(MM_HMIXER),&mxlc1,MIXER_GETLINECONTROLSF_ALL) != MMSYSERR_NOERROR)
{
ShowMessage("MIXER_GETLINECONTROLSF_ALL Error"); return;
} for (int k = 0;k < mxlc1.cControls - 1;k )
{
Form1->ListBox1->Items->Add(mxl1.szName); Form1->ListBox1->Items->Add(mxc1.dwControlID);
}
} for (int j = 0;j < mxl1.cConnections;j )
{
mxl2.dwSource = j; mxl2.dwDestination = mxl1.dwDestination; mxl2.cbStruct = sizeof(MIXERLINE); if (mixerGetLineInfo(reinterpret_cast(MM_HMIXER),&mxl2,MIXER_GETLINEINFOF_SOURCE) != MMSYSERR_NOERROR)
{
ShowMessage("MIXER_GETLINEINFOF_SOURCE Error"); return;
} mxlc2.cbStruct = sizeof(MIXERLINECONTROLS); mxlc2.dwLineID = mxl2.dwLineID; mxlc2.cControls = mxl2.cControls; mxlc2.cbmxctrl = sizeof(MIXERCONTROL); mxlc2.pamxctrl = &mxc2; if (mixerGetLineControls(reinterpret_cast(MM_HMIXER),&mxlc2,MIXER_GETLINECONTROLSF_ALL) != MMSYSERR_NOERROR)
{
ShowMessage("MIXER_GETLINECONTROLSF_ALL Error"); return;
} for (int k = 0;k < mxlc2.cControls - 1;k )
{
if (mxlc2.dwControlType == MIXERCONTROL_CONTROLTYPE_VOLUME)
{ }
} Form1->ListBox1->Items->Add(mxl2.szName); Form1->ListBox1->Items->Add(mxc2.dwControlID);
}
}
}
//--------------------------------------------------------------------------- void __fastcall TForm1::UnInitial(void)
{
if(MM_HMIXER != NULL)
{
if(mixerClose(MM_HMIXER) == MMSYSERR_NOERROR)
{
MM_HMIXER = NULL;
}
else
{
ShowMessage("Close MM_HMIXER Error");
}
}
}
//--------------------------------------------------------------------------- void __fastcall TForm1::SetMasterVolumeValue(double ValueL,double ValueR,long ID)
{
if (MM_HMIXER == NULL)
{
ShowMessage("SetMasterVolumeValue Error_1"); return;
} MIXERCONTROLDETAILS_UNSIGNED mxcdVolume[2] = {ValueL,ValueR}; MIXERCONTROLDETAILS mxcd; mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS); mxcd.dwControlID = ID; if (ID == 6 || ID == 11)
{
mxcd.cChannels = 1; ValueR = ValueL;
}
else
{
mxcd.cChannels = 2;
} mxcd.cMultipleItems = 0; mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED); mxcd.paDetails = &mxcdVolume; if (mixerSetControlDetails(reinterpret_cast(MM_HMIXER),&mxcd,MIXER_OBJECTF_HMIXER | MIXER_SETCONTROLDETAILSF_VALUE) != MMSYSERR_NOERROR)
{
ShowMessage("SetMasterVolumeValue Error_2"); return;
}
}
//--------------------------------------------------------------------------- void __fastcall TForm1::GetMasterVolumeValue(long ID,int *VolumeValue)
{
MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_UNSIGNED mxcdVolume[2]; ZeroMemory(mxcdVolume,sizeof(mxcdVolume)); if (MM_HMIXER == NULL)
{
ShowMessage("GetMasterVolumeValue Error_1"); return;
} mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS); mxcd.dwControlID = ID; if (ID == 6 || ID == 11)
{
mxcd.cChannels = 1;
}
else
{
mxcd.cChannels = 2;
} mxcd.cMultipleItems = 0; mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED); mxcd.paDetails = &mxcdVolume; if (mixerGetControlDetails(reinterpret_cast(MM_HMIXER),&mxcd,MIXER_GETCONTROLDETAILSF_VALUE) != MMSYSERR_NOERROR)
{
ShowMessage("GetMasterVolumeValue Error_2"); return;
} VolumeValue[0] = mxcdVolume[0].dwValue; VolumeValue[1] = mxcdVolume[1].dwValue; if (ID == 6 || ID == 11)
{
VolumeValue[1] = VolumeValue[0];
}
}
//---------------------------------------------------------------------------
請問一下
為何我用這一段程式所獲取的Mc Volume的dwControlID為10,當我直接把設定值哪來用時卻無法使用. 之後我把設定值改為11的話就可以使用了
而其餘所獲的的dwControlID都可以直接拿來使用
for (int j = 0;j < mxl1.cConnections;j )
{
mxl2.dwSource = j; mxl2.dwDestination = mxl1.dwDestination; mxl2.cbStruct = sizeof(MIXERLINE); if (mixerGetLineInfo(reinterpret_cast(MM_HMIXER),&mxl2,MIXER_GETLINEINFOF_SOURCE) != MMSYSERR_NOERROR)
{
ShowMessage("MIXER_GETLINEINFOF_SOURCE Error"); return;
} mxlc2.cbStruct = sizeof(MIXERLINECONTROLS); mxlc2.dwLineID = mxl2.dwLineID; mxlc2.cControls = mxl2.cControls; mxlc2.cbmxctrl = sizeof(MIXERCONTROL); mxlc2.pamxctrl = &mxc2; if (mixerGetLineControls(reinterpret_cast(MM_HMIXER),&mxlc2,MIXER_GETLINECONTROLSF_ALL) != MMSYSERR_NOERROR)
{
ShowMessage("MIXER_GETLINECONTROLSF_ALL Error"); return;
} for (int k = 0;k < mxlc2.cControls - 1;k )
{
if (mxlc2.dwControlType == MIXERCONTROL_CONTROLTYPE_VOLUME)
{ }
} Form1->ListBox1->Items->Add(mxl2.szName); Form1->ListBox1->Items->Add(mxc2.dwControlID);
}