private AudioCaptureSettings GetCurrentAudioCaptureSettings() { AudioCaptureSettings captureSettings = null; var item = audioSourcesComboBox.SelectedItem; if (item != null) { var tag = ((item as ComboBoxItem)?.Tag); if (tag != null) { captureSettings = tag as AudioCaptureSettings; } } return(captureSettings); }
private void UpdateAudioSources() { List <MMDevice> mmdevices = new List <MMDevice>(); try { using (var deviceEnum = new MMDeviceEnumerator()) { var defaultCaptureId = ""; try { if (deviceEnum.HasDefaultAudioEndpoint(DataFlow.Capture, Role.Console)) { var captureDevice = deviceEnum.GetDefaultAudioEndpoint(DataFlow.Capture, Role.Console); if (captureDevice != null) { defaultCaptureId = captureDevice.ID; mmdevices.Add(captureDevice); } } } catch (Exception ex) { logger.Warn(ex); } var defaultRenderId = ""; try { if (deviceEnum.HasDefaultAudioEndpoint(DataFlow.Render, Role.Console)) { var renderDevice = deviceEnum.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console); if (renderDevice != null) { defaultRenderId = renderDevice.ID; mmdevices.Add(renderDevice); } } } catch (Exception ex) { logger.Warn(ex); } try { var allDevices = deviceEnum.EnumerateAudioEndPoints(DataFlow.All, DeviceState.Active); foreach (var d in allDevices) { if (d.ID == defaultRenderId || d.ID == defaultCaptureId) { continue; } mmdevices.Add(d); } } catch (Exception ex) { logger.Warn(ex); } } } catch (Exception ex) { logger.Error(ex); } //var dataSource = new BindingList<ComboBoxItem>(mmdevices.Select(d => new ComboBoxItem { Name = d.FriendlyName, Tag = d.ID }).ToList()); var dataSource = new BindingList <ComboBoxItem>(); foreach (var d in mmdevices) { //$"{bitsPerSample} bit PCM: {sampleRate / 1000}kHz {channels} channels" AudioCaptureSettings captureSettings = null; var client = d.AudioClient; if (client != null) { var mixFormat = client.MixFormat; if (mixFormat != null) { captureSettings = new AudioCaptureSettings { DeviceId = d.ID, Name = d.FriendlyName, BitsPerSample = mixFormat.BitsPerSample, SampleRate = mixFormat.SampleRate, Channels = mixFormat.Channels, Description = $"{mixFormat.BitsPerSample} bit PCM: {mixFormat.SampleRate / 1000}kHz {mixFormat.Channels} channels", }; } } ComboBoxItem item = new ComboBoxItem { Name = d.FriendlyName, Tag = captureSettings, }; dataSource.Add(item); d?.Dispose(); } mmdevices.Clear(); //dataSource.Add(new ComboBoxItem { Name = "Disabled", Tag = null, }); audioSourcesComboBox.DataSource = dataSource; audioSourcesComboBox.DisplayMember = "Name"; }