/// <summary> /// Returns a list of the system's enabled audio output devices. Returns null if no enabled audio output devices are present. See also: Player.Audio.DeviceCount and Player.Audio.GetDefaultDevice. /// </summary> public AudioDevice[] GetDevices() { AudioDevice[] audioDevices = null; _base._lastError = HResult.MF_E_NO_AUDIO_PLAYBACK_DEVICE; IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator) new MMDeviceEnumerator(); deviceEnumerator.EnumAudioEndpoints(EDataFlow.eRender, (uint)DeviceState.Active, out IMMDeviceCollection deviceCollection); Marshal.ReleaseComObject(deviceEnumerator); if (deviceCollection != null) { deviceCollection.GetCount(out uint count); if (count > 0) { audioDevices = new AudioDevice[count]; for (int i = 0; i < count; i++) { audioDevices[i] = new AudioDevice(); deviceCollection.Item((uint)i, out IMMDevice device); Player.GetDeviceInfo(device, audioDevices[i]); Marshal.ReleaseComObject(device); } _base._lastError = Player.NO_ERROR; } Marshal.ReleaseComObject(deviceCollection); } return(audioDevices); }
/// <summary> /// Returns the system's default audio output device. Returns null if no default audio output device is present. See also: Player.Audio.GetDevices. /// </summary> public AudioDevice GetDefaultDevice() { AudioDevice audioDevice = null; IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator) new MMDeviceEnumerator(); deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out IMMDevice device); Marshal.ReleaseComObject(deviceEnumerator); if (device != null) { audioDevice = new AudioDevice(); Player.GetDeviceInfo(device, audioDevice); Marshal.ReleaseComObject(device); _base._lastError = Player.NO_ERROR; } else { _base._lastError = HResult.MF_E_NO_AUDIO_PLAYBACK_DEVICE; } return(audioDevice); }