public void SetDefaultAudioDevice(SoundControllServer.AudioDevice device, AudioDeviceRole role) { if (device == null) { throw new ArgumentNullException("device"); } // BADNESS: The following code uses undocumented interfaces provided by the Audio SDK. This is completely // unsupported, and should be used for amusement purposes only. This is *extremely likely* to be broken // in future updates and/or versions of Windows. If Larry Osterman was dead, he would be rolling over // in his grave if he knew you were using this for nefarious purposes. var config = new PolicyConfig(); int hr; IPolicyConfig2 config2 = config as IPolicyConfig2; if (config2 != null) { // Windows 7 -> Windows 8.1 hr = config2.SetDefaultEndpoint(device.Id, role); } else { // Windows 10+ hr = ((IPolicyConfig3)config).SetDefaultEndpoint(device.Id, role); } if (hr != HResult.OK) { throw Marshal.GetExceptionForHR(hr); } }
/// <summary> /// Gets WASAPI Audio device. /// </summary> /// <param name="dataFlow">Audio data flow.</param> /// <param name="deviceRole">Audio device role.</param> /// <returns>Audio device list.</returns> private static AudioDevice[] GetWASAPIAudioDevices(AudioDataFlow dataFlow, AudioDeviceRole deviceRole = AudioDeviceRole.Multimedia) { var devices = new List <AudioDevice>(); var mmde = new MMDeviceEnumerator(); var role = deviceRole switch { AudioDeviceRole.Console => Role.Console, AudioDeviceRole.Multimedia => Role.Multimedia, AudioDeviceRole.Communications => Role.Communications, _ => Role.Multimedia, }; if (dataFlow.HasFlag(AudioDataFlow.Render)) { try { var device = mmde.GetDefaultAudioEndpoint(NAudio.CoreAudioApi.DataFlow.Render, role); devices.Add(GetAudioDeviceFromMMDevice(device, AudioDataFlow.Render)); } catch (Exception) { } foreach (var item in mmde.EnumerateAudioEndPoints(NAudio.CoreAudioApi.DataFlow.Render, DeviceState.Active)) { devices.Add(GetAudioDeviceFromMMDevice(item, AudioDataFlow.Render)); } } return(devices.ToArray()); }
public void SetDefaultAudioDevice(AudioDevice device, AudioDeviceRole role) { if (device == null) throw new ArgumentNullException("device"); // BADNESS: The following code uses undocumented interfaces provided by the Audio SDK. This is completely // unsupported, and should be used for amusement purposes only. This is *extremely likely* to be broken // in future updates and/or versions of Windows. If Larry Osterman was dead, he would be rolling over // in his grave if he knew you were using this for nefarious purposes. var config = new PolicyConfig(); int hr; IPolicyConfig2 config2 = config as IPolicyConfig2; if (config2 != null) { // Windows 7 -> Windows 8.1 hr = config2.SetDefaultEndpoint(device.Id, role); } else { // Windows 10+ hr = ((IPolicyConfig3)config).SetDefaultEndpoint(device.Id, role); } if (hr != HResult.OK) throw Marshal.GetExceptionForHR(hr); }
public void SetDefaultAudioDevice(AudioDevice device, AudioDeviceRole role = AudioDeviceRole.Multimedia) { if (device == null) { throw new ArgumentNullException(nameof(device)); } var config = new PolicyConfig(); int hr; if (config is IPolicyConfig2 config2) { // Windows 7 -> Windows 8.1 hr = config2.SetDefaultEndpoint(device.Id, role); } else { // Windows 10+ hr = ((IPolicyConfig3)config).SetDefaultEndpoint(device.Id, role); } if (hr != HResult.OK) { throw Marshal.GetExceptionForHR(hr); } }
public bool IsDefaultAudioDevice(AudioDevice device, AudioDeviceRole role) { AudioDevice defaultDevice = GetDefaultAudioDevice(device.Kind, role); if (defaultDevice == null) { return(false); } return(String.Equals(defaultDevice.Id, device.Id, StringComparison.OrdinalIgnoreCase)); }
void IMMNotificationClient.OnDefaultDeviceChanged(AudioDeviceKind kind, AudioDeviceRole role, string deviceId) { var handler = DefaultDeviceChanged; if (handler != null) { AudioDevice device = GetDevice(deviceId); handler(this, new DefaultAudioDeviceEventArgs(device, kind, role)); } }
public AudioDevice GetDefaultAudioDevice(AudioDeviceKind kind, AudioDeviceRole role) { int hr = _deviceEnumerator.GetDefaultAudioEndpoint(kind, role, out IMMDevice underlyingDevice); if (hr == HResult.OK) { return(new AudioDevice(underlyingDevice)); } if (hr == HResult.NotFound || hr == HResult.FileNotFound) // See #33 { return(null); } throw Marshal.GetExceptionForHR(hr); }
public bool IsDefaultAudioDevice(AudioDevice device, AudioDeviceRole role) { if (device == null) { throw new ArgumentNullException("device"); } AudioDevice defaultDevice = GetDefaultAudioDevice(device.Kind, role); if (defaultDevice == null) { return(false); } return(String.Equals(defaultDevice.Id, device.Id, StringComparison.OrdinalIgnoreCase)); }
void IMMNotificationClient.OnDefaultDeviceChanged(AudioDeviceKind kind, AudioDeviceRole role, string deviceId) { InvokeOnSynchronizationContext(() => { var handler = DefaultDeviceChanged; if (handler != null) { AudioDevice device = null; if (deviceId != null) { device = GetDevice(deviceId); } handler(this, new DefaultAudioDeviceEventArgs(device, kind, role)); } }); }
public AudioDevice GetDefaultAudioDevice(AudioDeviceKind kind, AudioDeviceRole role) { const int E_NOTFOUND = unchecked ((int)0x80070490); IMMDevice underlyingDevice; int hr = _underlyingEnumerator.GetDefaultAudioEndpoint(kind, role, out underlyingDevice); if (hr == HResult.OK) { return(new AudioDevice(underlyingDevice)); } if (hr == E_NOTFOUND) { return(null); } throw Marshal.GetExceptionForHR(hr); }
public bool IsDefaultAudioDevice(AudioDevice device, AudioDeviceRole role) { if (device == null) throw new ArgumentNullException("device"); AudioDevice defaultDevice = GetDefaultAudioDevice(device.Kind, role); if (defaultDevice == null) return false; return String.Equals(defaultDevice.Id, device.Id, StringComparison.OrdinalIgnoreCase); }
public DefaultAudioDeviceEventArgs(AudioDevice device, AudioDeviceKind kind, AudioDeviceRole role) : base(device) { _kind = kind; _role = role; }
protected SetAsDefaultDeviceCommand(AudioDeviceManager manager, AudioDevice device, AudioDeviceRole role) { _manager = manager; _device = device; _role = role; }
protected SetAsDefaultDeviceCommandBase(AudioDeviceManager manager, AudioDeviceRole role) { _manager = manager; _role = role; }
public AudioDevice GetDefaultAudioDevice(AudioDeviceKind kind, AudioDeviceRole role) { IMMDevice underlyingDevice; int hr = _deviceEnumerator.GetDefaultAudioEndpoint(kind, role, out underlyingDevice); if (hr == HResult.OK) return new AudioDevice(underlyingDevice); if (hr == HResult.NotFound || hr == HResult.FileNotFound) // See #33 return null; throw Marshal.GetExceptionForHR(hr); }
void IMMNotificationClient.OnDefaultDeviceChanged(AudioDeviceKind kind, AudioDeviceRole role, string deviceId) { InvokeOnSynchronizationContext(() => { var handler = DefaultDeviceChanged; if (handler != null) { AudioDevice device = null; if (deviceId != null) device = GetDevice(deviceId); handler(this, new DefaultAudioDeviceEventArgs(device, kind, role)); } }); }
/// <summary> /// Gets Audio devices. /// </summary> /// <param name="dataFlow">Audio data flow. In current version, only <see cref="AudioDataFlow.Render"/> is supported.</param> /// <param name="deviceType">Audio device type.</param> /// <param name="deviceRole">Audio device role.</param> /// <returns>Audio device list.</returns> public static AudioDevice[] GetAudioDevices(AudioDataFlow dataFlow, AudioDeviceType deviceType = AudioDeviceType.WASAPI, AudioDeviceRole deviceRole = AudioDeviceRole.Multimedia) { AudioDevice[] result; if (deviceType == AudioDeviceType.WASAPI) { result = GetWASAPIAudioDevices(dataFlow, deviceRole); } else if (deviceType == AudioDeviceType.Wave) { result = GetWaveAudioDevices(dataFlow); } else if (deviceType == AudioDeviceType.DirectSound) { result = GetDirectSoundAudioDevices(dataFlow); } else if (deviceType == AudioDeviceType.ASIO) { result = GetASIOAudioDevices(dataFlow); } else { throw new ArgumentException(String.Format("Invalid device type: {0}", deviceType), nameof(deviceType)); } return(result); }
public DefaultAudioDeviceEventArgs(AudioDevice device, AudioDeviceKind kind, AudioDeviceRole role) : base(device) { _kind = kind; _role = role; }
/// <summary> /// Gets Audio render devices. /// </summary> /// <param name="deviceType">Audio device type.</param> /// <param name="deviceRole">Audio device role.</param> /// <returns>Audio device list.</returns> public static AudioDevice[] GetAudioRenderDevices(AudioDeviceType deviceType = AudioDeviceType.WASAPI, AudioDeviceRole deviceRole = AudioDeviceRole.Multimedia) { return(GetAudioDevices(AudioDataFlow.Render, deviceType, deviceRole)); }