www.pudn.com > Test9.rar > Test9.cpp
//--------------------------------------------------------------------------- #include#pragma hdrstop #include "Test9.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { int wavedevice,mididevice; WAVEOUTCAPSA wavecap; wavedevice=(int)waveOutGetNumDevs(); if(wavedevice==0) ShowMessage("没有发现波形设备!"); else { ComboBox1->Clear(); ComboBox1->Items->Clear(); for(int i=0;i Clear(); RichEdit1->Lines->Add("当前设备数目:"+String(wavedevice)); RichEdit1->Lines->Add("厂商ID:"+String(wavecap.wMid)); RichEdit1->Lines->Add("产品ID:"+String(wavecap.wPid)); RichEdit1->Lines->Add("驱动器版本:"+String(wavecap.vDriverVersion)); RichEdit1->Lines->Add("当前设备名称:"+String(wavecap.szPname)); RichEdit1->Lines->Add("格式种类:"+String(wavecap.dwFormats)); RichEdit1->Lines->Add("信道数量:"+String(wavecap.wChannels)); RichEdit1->Lines->Add("保留数量:"+String(wavecap.wReserved1)); RichEdit1->Lines->Add("驱动支持数目:"+String(wavecap.dwSupport)); ComboBox1->Items->Add(String(wavecap.szPname)); } ComboBox1->ItemIndex=0; } } //--------------------------------------------------------------------------- unsigned TForm1::GetVolume(int dev)//得到设备的音量dev=0主音量,1WAVE ,2MIDI ,3 LINE IN { long device;unsigned rt=0; MIXERCONTROL volCtrl; HMIXER hmixer; switch(dev) { case 1: device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; break; case 2: device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; break; case 3: device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; break; case 4: device=MIXERLINE_COMPONENTTYPE_SRC_LINE; break; case 5: device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE; break; default: device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; } if(mixerOpen(&hmixer,0,0,0,0)) return 0; if(!GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_VOLUME,&volCtrl)) return 0; rt=GetVolumeValue(hmixer,&volCtrl)*100/volCtrl.Bounds.lMaximum; mixerClose(hmixer); return rt; } void __fastcall TForm1::Button2Click(TObject *Sender) { int mididevice; MIDIOUTCAPSA midicap; mididevice=(int)midiOutGetNumDevs(); if(mididevice==0) ShowMessage("没有发现MIDI设备!"); else { midiOutGetDevCaps(0,&midicap,sizeof(MIDIOUTCAPS)); RichEdit1->Clear(); RichEdit1->Lines->Add("当前设备数目:"+String(mididevice)); RichEdit1->Lines->Add("厂商ID:"+String(midicap.wMid)); RichEdit1->Lines->Add("产品ID:"+String(midicap.wPid)); RichEdit1->Lines->Add("驱动器版本:"+String(midicap.vDriverVersion)); RichEdit1->Lines->Add("当前设备名称:"+String(midicap.szPname)); RichEdit1->Lines->Add("声音数量:"+String(midicap.wVoices)); RichEdit1->Lines->Add("信道掩吗:"+String(midicap.wChannelMask)); RichEdit1->Lines->Add("音符:"+String(midicap.wNotes)); RichEdit1->Lines->Add("驱动支持数目:"+String(midicap.dwSupport)); } } //--------------------------------------------------------------------------- bool TForm1::GetVolumeControl(HMIXER hmixer,long componentType,long ctrlType,MIXERCONTROL* mxc) { MIXERLINECONTROLS mxlc; MIXERLINE mxl; mxl.cbStruct = sizeof(mxl); mxl.dwComponentType = componentType; if(!mixerGetLineInfo((HMIXEROBJ)hmixer,&mxl,MIXER_GETLINEINFOF_COMPONENTTYPE)) { mxlc.cbStruct = sizeof(mxlc); mxlc.dwLineID = mxl.dwLineID; mxlc.dwControlType = ctrlType; mxlc.cControls = 1; mxlc.cbmxctrl = sizeof(MIXERCONTROL); mxlc.pamxctrl = mxc; if(mixerGetLineControls((HMIXEROBJ)hmixer,&mxlc,MIXER_GETLINECONTROLSF_ONEBYTYPE)) return 0; else return 1; } return 0; } long TForm1::GetMuteValue(HMIXER hmixer,MIXERCONTROL *mxc) { MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_BOOLEAN mxcdMute; mxcd.hwndOwner = 0; mxcd.cbStruct = sizeof(mxcd); mxcd.dwControlID = mxc->dwControlID; mxcd.cbDetails = sizeof(mxcdMute); mxcd.paDetails = &mxcdMute; mxcd.cChannels = 1; mxcd.cMultipleItems = 0; if(mixerGetControlDetails((HMIXEROBJ)hmixer,&mxcd,MIXER_OBJECTF_HMIXER|MIXER_GETCONTROLDETAILSF_VALUE)) return -1; return mxcdMute.fValue; } //--------------------------------------------------------------------------- unsigned TForm1::GetVolumeValue(HMIXER hmixer,MIXERCONTROL *mxc) { MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_UNSIGNED vol; vol.dwValue=0; mxcd.hwndOwner = 0; mxcd.cbStruct = sizeof(mxcd); mxcd.dwControlID = mxc->dwControlID; mxcd.cbDetails = sizeof(vol); mxcd.paDetails = &vol; mxcd.cChannels = 1; if(mixerGetControlDetails((HMIXEROBJ)hmixer, &mxcd, MIXER_OBJECTF_HMIXER|MIXER_GETCONTROLDETAILSF_VALUE)) return -1; return vol.dwValue; } //--------------------------------------------------------------------------- bool TForm1::SetMuteValue(HMIXER hmixer,MIXERCONTROL *mxc,bool mute) { MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_BOOLEAN mxcdMute;mxcdMute.fValue=mute; mxcd.hwndOwner = 0; mxcd.dwControlID = mxc->dwControlID; mxcd.cbStruct = sizeof(mxcd); mxcd.cbDetails = sizeof(mxcdMute); mxcd.paDetails = &mxcdMute; mxcd.cChannels = 1; mxcd.cMultipleItems = 0; if(mixerSetControlDetails((HMIXEROBJ)hmixer,&mxcd,MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE)) return 0; return 1; } //--------------------------------------------------------------------------- bool TForm1::SetVolumeValue(HMIXER hmixer,MIXERCONTROL *mxc,long volume) { MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_UNSIGNED vol;vol.dwValue = volume; mxcd.hwndOwner = 0; mxcd.dwControlID = mxc->dwControlID; mxcd.cbStruct = sizeof(mxcd); mxcd.cbDetails = sizeof(vol); mxcd.paDetails = &vol; mxcd.cChannels = 1; if(mixerSetControlDetails((HMIXEROBJ)hmixer,&mxcd,MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE)) return 0; return 1; } bool TForm1::SetVolume(long dev,long vol)//设置设备的音量 { // dev =0,1,2 分别表示主音量,波形,MIDI ,LINE IN // vol=0-100 表示音量的大小 , 设置与返回音量的值用的是百分比,即音量从0 - 100,而不是设备的绝对值 // retrun false 表示设置音量的大小的操作不成功 // retrun true 表示设置音量的大小的操作成功 long device; bool rc=false; MIXERCONTROL volCtrl; HMIXER hmixer; switch (dev) { case 1: device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; break; case 2: device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; break; case 3: device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; break; case 4: device=MIXERLINE_COMPONENTTYPE_SRC_LINE; break; case 5: device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE; break; default: device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; } if(mixerOpen(&hmixer,0,0,0,0)) return 0; if(GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_VOLUME,&volCtrl)) { vol=vol*volCtrl.Bounds.lMaximum/100; if(SetVolumeValue(hmixer,&volCtrl,vol)) rc=true; } mixerClose(hmixer); return rc; } //--------------------------------------------------------------------------- bool TForm1::SetMute(long dev,bool vol)//设置设备静音 { //dev =0,1,2,3,4,5 分别表示主音量,波形,MIDI ,CD,LINE IN,麦克风 // retrun false 表示没有静音 // retrun true 表示静音` long device; bool rc=false; MIXERCONTROL volCtrl; HMIXER hmixer; switch (dev) { case 1: device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; break; case 2: device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; break; case 3: device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; break; case 4: device=MIXERLINE_COMPONENTTYPE_SRC_LINE; break; case 5: device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE; break; default: device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; } if(mixerOpen(&hmixer,0,0,0,0)) return false; if(GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_MUTE,&volCtrl)) if(SetMuteValue(hmixer,&volCtrl,(bool)vol)) rc=true; mixerClose(hmixer); return rc; } //--------------------------------------------------------------------------- bool TForm1::GetMute(long dev)//检查设备是否静音 { //dev =0,1,2,3,4,5 分别表示主音量,波形,MIDI ,CD,LINE IN,麦克风 // retrun false 表示没有静音 // retrun true 表示静音 long device; bool rc=false; MIXERCONTROL volCtrl; HMIXER hmixer; switch (dev) { case 1: device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; break; case 2: device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; break; case 3: device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; break; case 4: device=MIXERLINE_COMPONENTTYPE_SRC_LINE; break; case 5: device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE; break; default: device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; } if(mixerOpen(&hmixer,0,0,0,0)) return 0; if(GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_MUTE,&volCtrl)) rc=GetMuteValue(hmixer,&volCtrl); mixerClose(hmixer); return rc; } void __fastcall TForm1::Button3Click(TObject *Sender) { //首先检查是否静音 CheckBox1->Checked=GetMute(0); CheckBox2->Checked=GetMute(1); CheckBox3->Checked=GetMute(2); CheckBox4->Checked=GetMute(3); CheckBox5->Checked=GetMute(4); CheckBox6->Checked=GetMute(5); //设置音量范围 TrackBar1->Min=0; TrackBar1->Max=100; TrackBar2->Min=0; TrackBar2->Max=100; TrackBar3->Min=0; TrackBar3->Max=100; TrackBar4->Min=0; TrackBar4->Max=100; TrackBar5->Min=0; TrackBar5->Max=100; TrackBar6->Min=0; TrackBar6->Max=100; TrackBar1->Position=100-GetVolume(0); TrackBar2->Position=100-GetVolume(1); TrackBar3->Position=100-GetVolume(2); TrackBar4->Position=100-GetVolume(3); TrackBar5->Position=100-GetVolume(4); TrackBar6->Position=100-GetVolume(5); } //--------------------------------------------------------------------------- void __fastcall TForm1::TrackBar1Change(TObject *Sender) { ChangeVolumn(); } //--------------------------------------------------------------------------- void TForm1::ChangeVolumn() { SetMute(0,CheckBox1->Checked); SetMute(1,CheckBox2->Checked); SetMute(2,CheckBox3->Checked); SetMute(3,CheckBox4->Checked); SetMute(4,CheckBox5->Checked); SetMute(5,CheckBox6->Checked); SetVolume(0,100-TrackBar1->Position); SetVolume(1,100-TrackBar2->Position); SetVolume(2,100-TrackBar3->Position); SetVolume(3,100-TrackBar4->Position); SetVolume(4,100-TrackBar5->Position); SetVolume(5,100-TrackBar6->Position); } void __fastcall TForm1::TrackBar2Change(TObject *Sender) { ChangeVolumn(); } //--------------------------------------------------------------------------- void __fastcall TForm1::TrackBar3Change(TObject *Sender) { ChangeVolumn(); } //--------------------------------------------------------------------------- void __fastcall TForm1::TrackBar4Change(TObject *Sender) { ChangeVolumn(); } //--------------------------------------------------------------------------- void __fastcall TForm1::TrackBar5Change(TObject *Sender) { ChangeVolumn(); } //--------------------------------------------------------------------------- void __fastcall TForm1::TrackBar6Change(TObject *Sender) { ChangeVolumn(); } //--------------------------------------------------------------------------- void __fastcall TForm1::CheckBox1Click(TObject *Sender) { ChangeVolumn(); } //--------------------------------------------------------------------------- void __fastcall TForm1::CheckBox2Click(TObject *Sender) { ChangeVolumn(); } //--------------------------------------------------------------------------- void __fastcall TForm1::CheckBox3Click(TObject *Sender) { ChangeVolumn(); } //--------------------------------------------------------------------------- void __fastcall TForm1::CheckBox4Click(TObject *Sender) { ChangeVolumn(); } //--------------------------------------------------------------------------- void __fastcall TForm1::CheckBox5Click(TObject *Sender) { ChangeVolumn(); } //--------------------------------------------------------------------------- void __fastcall TForm1::CheckBox6Click(TObject *Sender) { ChangeVolumn(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) { OpenDialog1->Filter="音乐文件|*.wav;*.mp3|所有文件|*.*"; if(OpenDialog1->Execute()==mrOk) { MediaPlayer1->FileName=OpenDialog1->FileName; MediaPlayer1->Open(); MediaPlayer1->Play(); } } //---------------------------------------------------------------------------