/// <summary> /// method for setting the volume to a specific level /// </summary> /// <param name="volumeLevel">volume level we wish to set volume to</param> public static void SetVolume(int volumeLevel) { try { //method level variables int currVolume; int mixerControl; //create a new volume control VolumeStructs.Mixer volumeControl = new VolumeStructs.Mixer(); //open the mixer control PCWin32.mixerOpen(out mixerControl, 0, 0, 0, 0); //set the type to volume control type int controlType = VolumeConstants.MIXERCONTROL_CONTROLTYPE_VOLUME; //get the current mixer control and get the current volume GetMixer(mixerControl, VolumeConstants.MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, controlType, out volumeControl, out currVolume); //now check the volume level. If the volume level //is greater than the max then set the volume to //the max level. If it's less than the minimum level //then set it to the minimun level if (volumeLevel > volumeControl.lMaximum) { volumeLevel = volumeControl.lMaximum; } else if (volumeLevel < volumeControl.lMinimum) { volumeLevel = volumeControl.lMinimum; } //set the volume SetMixer(mixerControl, volumeControl, volumeLevel); //now re-get the mixer control GetMixer(mixerControl, VolumeConstants.MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, controlType, out volumeControl, out currVolume); //make sure the volume level is equal to the current volume if (volumeLevel != currVolume) { throw new Exception("Cannot Set Volume"); } //close the mixer control as we are finished with it PCWin32.mixerClose(mixerControl); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// method for retrieving the current volume from the system /// </summary> /// <returns>int value</returns> public static int GetVolume() { //method level variables int currVolume; int mixerControl; //create a new volume control VolumeStructs.Mixer mixer = new VolumeStructs.Mixer(); //open the mixer PCWin32.mixerOpen(out mixerControl, 0, 0, 0, 0); //set the type to volume control type int type = VolumeConstants.MIXERCONTROL_CONTROLTYPE_VOLUME; //get the mixer control and get the current volume level GetMixer(mixerControl, VolumeConstants.MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, type, out mixer, out currVolume); //close the mixer control since we are now done with it PCWin32.mixerClose(mixerControl); //return the current volume to the calling method return(currVolume); }