//Get default audio device mute status public static bool AudioMuteGetStatus(bool inputDevice) { try { IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator) new MMDeviceEnumerator(); IMMDevice.IMMDevice deviceItem = null; if (!inputDevice) { deviceItem = deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia); } else { deviceItem = deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eCapture, ERole.eMultimedia); } //Get the audio device volume endpoint deviceItem.Activate(typeof(IAudioEndpointVolume).GUID, 0, IntPtr.Zero, out object deviceActivated); IAudioEndpointVolume audioEndPointVolume = (IAudioEndpointVolume)deviceActivated; //Get the current mute status audioEndPointVolume.GetMute(out bool muteStatus); return(muteStatus); } catch { //Debug.WriteLine("Failed to get mute status."); return(false); } }
//Mute default audio device public static void AudioUnmute(bool inputDevice) { try { IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator) new MMDeviceEnumerator(); IMMDevice.IMMDevice deviceItem = null; if (!inputDevice) { deviceItem = deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia); } else { deviceItem = deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eCapture, ERole.eMultimedia); } //Get the audio device volume endpoint deviceItem.Activate(typeof(IAudioEndpointVolume).GUID, 0, IntPtr.Zero, out object deviceActivated); IAudioEndpointVolume audioEndPointVolume = (IAudioEndpointVolume)deviceActivated; //Set the switched mute status audioEndPointVolume.SetMute(false, Guid.Empty); Debug.WriteLine("Unmuted audio device."); } catch { Debug.WriteLine("Failed to unmute audio device."); } }
//Get default audio device volume (0-100) public static int AudioVolumeGet(bool inputDevice) { try { IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator) new MMDeviceEnumerator(); IMMDevice.IMMDevice deviceItem = null; if (!inputDevice) { deviceItem = deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia); } else { deviceItem = deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eCapture, ERole.eMultimedia); } //Get the audio device volume endpoint deviceItem.Activate(typeof(IAudioEndpointVolume).GUID, 0, IntPtr.Zero, out object deviceActivated); IAudioEndpointVolume audioEndPointVolume = (IAudioEndpointVolume)deviceActivated; //Get the audio device volume audioEndPointVolume.GetMasterVolumeLevelScalar(out float volumeLevelCurrentFloat); int volumeLevelInt = Convert.ToInt32(volumeLevelCurrentFloat * 100); //Debug.WriteLine("Current volume: " + volumeLevelInt + "%"); return(volumeLevelInt); } catch { Debug.WriteLine("Failed to get default audio device volume."); return(-1); } }
//Get the current default audio device public static AudioDeviceSummary GetDefaultDevice() { try { IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator) new MMDeviceEnumerator(); IMMDevice.IMMDevice deviceItem = deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia); //Get the audio device id string deviceId = deviceItem.GetId(); //Get the audio device name PropertyVariant propertyVariant = new PropertyVariant(); IPropertyStore propertyStore = deviceItem.OpenPropertyStore(STGM.STGM_READ); propertyStore.GetValue(ref PKEY_Device_FriendlyName, out propertyVariant); string deviceName = Marshal.PtrToStringUni(propertyVariant.pwszVal); return(new AudioDeviceSummary() { Identifier = deviceId, Name = deviceName }); } catch { Debug.WriteLine("Failed to get the default audio device."); return(null); } }
//Up default audio device volume (0-100) public static bool AudioVolumeUp(int targetStep, bool inputDevice) { try { IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator) new MMDeviceEnumerator(); IMMDevice.IMMDevice deviceItem = null; if (!inputDevice) { deviceItem = deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia); } else { deviceItem = deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eCapture, ERole.eMultimedia); } //Get the audio device volume endpoint deviceItem.Activate(typeof(IAudioEndpointVolume).GUID, 0, IntPtr.Zero, out object deviceActivated); IAudioEndpointVolume audioEndPointVolume = (IAudioEndpointVolume)deviceActivated; //Get the audio device volume audioEndPointVolume.GetMasterVolumeLevelScalar(out float volumeLevelCurrentFloat); float volumeLevelFloat = volumeLevelCurrentFloat + (targetStep / 100F); //Check the target volume if (volumeLevelFloat > 1.00) { volumeLevelFloat = 1.00F; } if (volumeLevelFloat < 0.00) { volumeLevelFloat = 0.00F; } //Change the audio device volume audioEndPointVolume.SetMasterVolumeLevelScalar(volumeLevelFloat, Guid.Empty); Debug.WriteLine("Up volume: " + targetStep + "% / " + volumeLevelFloat); return(true); } catch { Debug.WriteLine("Failed to up default audio device volume."); return(false); } }
//Set default audio device volume (0-100) public static bool AudioVolumeSet(int targetVolume, bool inputDevice) { try { IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator) new MMDeviceEnumerator(); IMMDevice.IMMDevice deviceItem = null; if (!inputDevice) { deviceItem = deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia); } else { deviceItem = deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eCapture, ERole.eMultimedia); } //Get the audio device volume endpoint deviceItem.Activate(typeof(IAudioEndpointVolume).GUID, 0, IntPtr.Zero, out object deviceActivated); IAudioEndpointVolume audioEndPointVolume = (IAudioEndpointVolume)deviceActivated; //Check the target volume if (targetVolume > 100) { targetVolume = 100; } if (targetVolume < 0) { targetVolume = 0; } //Set the audio device volume float volumeLevelFloat = targetVolume / 100F; audioEndPointVolume.SetMasterVolumeLevelScalar(volumeLevelFloat, Guid.Empty); Debug.WriteLine("Set volume: " + targetVolume + "% / " + volumeLevelFloat); return(true); } catch { Debug.WriteLine("Failed to set default audio device volume."); return(false); } }
//Get all the playback audio devices public static List <AudioDeviceSummary> ListAudioDevices() { try { List <AudioDeviceSummary> deviceListSummary = new List <AudioDeviceSummary>(); IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator) new MMDeviceEnumerator(); IMMDeviceCollection deviceCollection = deviceEnumerator.EnumAudioEndpoints(EDataFlow.eRender, DeviceState.ACTIVE); uint deviceCount = deviceCollection.GetCount(); for (uint deviceIndex = 0; deviceIndex < deviceCount; deviceIndex++) { IMMDevice.IMMDevice deviceItem = deviceCollection.Item(deviceIndex); //Get the audio device id string deviceId = deviceItem.GetId(); //Get the audio device name PropertyVariant propertyVariant = new PropertyVariant(); IPropertyStore propertyStore = deviceItem.OpenPropertyStore(STGM.STGM_READ); propertyStore.GetValue(ref PKEY_Device_FriendlyName, out propertyVariant); string deviceName = Marshal.PtrToStringUni(propertyVariant.pwszVal); //Add device to summary list deviceListSummary.Add(new AudioDeviceSummary() { Identifier = deviceId, Name = deviceName }); } return(deviceListSummary); } catch { Debug.WriteLine("Failed to get audio devices."); return(null); } }