| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- /******************************************************************************/
- #include "stdafx.h"
- namespace EE{
- /******************************************************************************/
- #if WINDOWS_OLD
- static Bool tried, created;
- static HMIXER handle;
- static UInt ctrl_id_vol,
- ctrl_id_mute;
- #else
- #define MUTE_USER 0x1
- #define MUTE_EX 0x2
- static Flt Volume=1;
- static Byte Mute =0;
- static void SetMute() {SoundVolume.update();}
- #endif
- /******************************************************************************/
- AppVolumeClass AppVolume;
- /******************************************************************************/
- AppVolumeClass::AppVolumeClass() {}
- void AppVolumeClass::del()
- {
- #if WINDOWS_OLD
- if(tried)
- {
- mixerClose(handle);
- handle=null;
- }
- #endif
- }
- Bool AppVolumeClass::create()
- {
- #if WINDOWS_OLD
- if(tried)return created;
- tried=true;
- if(!mixerOpen(&handle, MIXER_OBJECTF_MIXER, 0, 0, 0))
- {
- MIXERLINE ml; Zero(ml);
- ml.cbStruct=SIZE(MIXERLINE);
- ml.dwComponentType=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
- if(!mixerGetLineInfo((HMIXEROBJ)handle, &ml, MIXER_GETLINEINFOF_COMPONENTTYPE))
- {
- MIXERCONTROL mc ; Zero(mc );
- MIXERLINECONTROLS mlc; Zero(mlc);
- mlc.cbmxctrl=SIZE(MIXERCONTROL);
- mlc.cbStruct=SIZE(MIXERLINECONTROLS);
- mlc.dwLineID=ml.dwLineID;
- mlc.dwControlType=MIXERCONTROL_CONTROLTYPE_VOLUME;
- mlc.cControls=1;
- mlc.pamxctrl=&mc;
- if(!mixerGetLineControls((HMIXEROBJ)handle, &mlc, MIXER_GETLINECONTROLSF_ONEBYTYPE))
- {
- ctrl_id_vol=mc.dwControlID;
-
- Zero(mc );
- Zero(mlc);
- mlc.cbmxctrl=SIZE(MIXERCONTROL);
- mlc.cbStruct=SIZE(MIXERLINECONTROLS);
- mlc.dwLineID=ml.dwLineID;
- mlc.dwControlType=MIXERCONTROL_CONTROLTYPE_MUTE;
- mlc.cControls=1;
- mlc.pamxctrl=&mc;
- if(!mixerGetLineControls((HMIXEROBJ)handle, &mlc, MIXER_GETLINECONTROLSF_ONEBYTYPE))
- {
- ctrl_id_mute=mc.dwControlID;
- return created=true;
- }
- }
- }
- }
- return false;
- #else
- return true;
- #endif
- }
- /******************************************************************************/
- void AppVolumeClass::volume(Flt volume)
- {
- SAT(volume);
- #if WINDOWS_OLD
- if(create())
- {
- MIXERCONTROLDETAILS mcd ; Zero(mcd );
- MIXERCONTROLDETAILS_UNSIGNED mcdu; Zero(mcdu);
- mcd.cbStruct =SIZE(MIXERCONTROLDETAILS);
- mcd.cbDetails=SIZE(MIXERCONTROLDETAILS_UNSIGNED);
- mcd.dwControlID=ctrl_id_vol;
- mcd.paDetails=&mcdu;
- mcd.cChannels=1;
- mcdu.dwValue =RoundU(0xFFFF*volume);
- mixerSetControlDetails((HMIXEROBJ)handle, &mcd, MIXER_SETCONTROLDETAILSF_VALUE);
- }
- #else
- if(Volume!=volume)
- {
- Volume =volume;
- SoundVolume.update();
- }
- #endif
- }
- Flt AppVolumeClass::volume()
- {
- #if WINDOWS_OLD
- if(create())
- {
- MIXERCONTROLDETAILS mcd ; Zero(mcd );
- MIXERCONTROLDETAILS_UNSIGNED mcdu; Zero(mcdu);
- mcd.cbStruct =SIZE(MIXERCONTROLDETAILS);
- mcd.cbDetails=SIZE(MIXERCONTROLDETAILS_UNSIGNED);
- mcd.dwControlID=ctrl_id_vol;
- mcd.paDetails=&mcdu;
- mcd.cChannels=1;
- mixerGetControlDetails((HMIXEROBJ)handle, &mcd, MIXER_GETCONTROLDETAILSF_VALUE);
- return mcdu.dwValue/Flt(0xFFFF);
- }
- return 0;
- #else
- return Volume;
- #endif
- }
- /******************************************************************************/
- void AppVolumeClass::mute(Bool mute)
- {
- #if WINDOWS_OLD
- if(create())
- {
- MIXERCONTROLDETAILS mcd ; Zero(mcd );
- MIXERCONTROLDETAILS_BOOLEAN mcdb; Zero(mcdb);
- mcd.cbStruct =SIZE(MIXERCONTROLDETAILS);
- mcd.cbDetails=SIZE(MIXERCONTROLDETAILS_BOOLEAN);
- mcd.dwControlID=ctrl_id_mute;
- mcd.paDetails=&mcdb;
- mcd.cChannels=1;
- mcdb.fValue =mute;
- mixerSetControlDetails((HMIXEROBJ)handle, &mcd, MIXER_SETCONTROLDETAILSF_VALUE);
- }
- #else
- if(FlagTest(Mute, MUTE_USER)!=mute){Mute^=MUTE_USER; SetMute();}
- #endif
- }
- Bool AppVolumeClass::mute()
- {
- #if WINDOWS_OLD
- if(create())
- {
- MIXERCONTROLDETAILS mcd ; Zero(mcd );
- MIXERCONTROLDETAILS_BOOLEAN mcdb; Zero(mcdb);
- mcd.cbStruct =SIZE(MIXERCONTROLDETAILS);
- mcd.cbDetails=SIZE(MIXERCONTROLDETAILS_BOOLEAN);
- mcd.dwControlID=ctrl_id_mute;
- mcd.paDetails=&mcdb;
- mcd.cChannels=1;
- mixerGetControlDetails((HMIXEROBJ)handle, &mcd, MIXER_GETCONTROLDETAILSF_VALUE);
- return mcdb.fValue!=0;
- }
- return false;
- #else
- return FlagTest(Mute, MUTE_USER);
- #endif
- }
- #if !WINDOWS_OLD
- void AppVolumeClass::muteEx (Bool mute) {if(FlagTest(Mute, MUTE_EX)!=mute){Mute^=MUTE_EX; SetMute();}}
- Bool AppVolumeClass::muteEx ( )C {return FlagTest(Mute, MUTE_EX);}
- Bool AppVolumeClass::muteFinal( )C {return Mute!=0;}
- #endif
- /******************************************************************************/
- }
- /******************************************************************************/
|