/// <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); }
// ******************************** Audio Devices - Audio Output Peak Meter - Open / Close / GetValues #region Audio Devices - Audio Output Peak Meter - Open / Close / GetValues internal bool PeakMeter_Open(AudioDevice device, bool change) { if (!pm_HasPeakMeter || change) { IMMDeviceEnumerator deviceEnumerator = null; IMMDevice levelDevice = null; if (pm_HasPeakMeter) { PeakMeter_Close(); } try { deviceEnumerator = (IMMDeviceEnumerator) new MMDeviceEnumerator(); if (device == null) { deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out levelDevice); } else { deviceEnumerator.GetDevice(device._id, out levelDevice); } if (levelDevice != null) { levelDevice.Activate(ref IID_IAudioMeterInformation, 3, IntPtr.Zero, out object levelDeviceInfo); pm_PeakMeterInfo = (IAudioMeterInformation)levelDeviceInfo; pm_PeakMeterInfo.GetMeteringChannelCount(out pm_PeakMeterChannelCount); if (pm_PeakMeterChannelCount > MAX_AUDIO_CHANNELS) { pm_PeakMeterChannelCount = MAX_AUDIO_CHANNELS; } if (pm_PeakMeterValues == null) { pm_PeakMeterValues = new float[MAX_AUDIO_CHANNELS]; pm_PeakMeterValuesStop = new float[MAX_AUDIO_CHANNELS]; for (int i = 0; i < MAX_AUDIO_CHANNELS; i++) { pm_PeakMeterValuesStop[i] = STOP_VALUE; } } pm_HasPeakMeter = true; StartSystemDevicesChangedHandlerCheck(); } } catch { /* ignore */ } if (levelDevice != null) { Marshal.ReleaseComObject(levelDevice); } if (deviceEnumerator != null) { Marshal.ReleaseComObject(deviceEnumerator); } } return(pm_HasPeakMeter); }