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;iClear(); 
                        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(); 
 
        }         
} 
//---------------------------------------------------------------------------