public VolumeHelper(WaveInEvent waveIn) { if (waveIn == null) throw new ArgumentNullException(); _waveIn = new WeakReference(waveIn); volumeControl = null; altVolumeControl = null; TryGetVolumeControl(); }
private void TryGetVolumeControl() { if (Wave == null) return; try { int waveInDeviceNumber = Wave.DeviceNumber; if (Environment.OSVersion.Version.Major >= 6) // Vista and over { var mixerLine = Wave.GetMixerLine(); foreach (var control in mixerLine.Controls) { Common.DebugHelper.WriteLine("{0} Mixer Line Control {1} [{2}]", mixerLine.Name, control.Name, control.ControlType); } foreach (var control in mixerLine.Controls) { if (control.ControlType == MixerControlType.Volume) { if (control.IsUnsigned) { try { this.volumeControl = control as UnsignedMixerControl; break; } catch { this.volumeControl = null; } } else if (control.IsSigned) { try { this.altVolumeControl = control as SignedMixerControl; } catch { this.altVolumeControl = null; } } } } } else { var mixer = new Mixer(waveInDeviceNumber); foreach (var destination in mixer.Destinations.Where(d => d.ComponentType == MixerLineComponentType.DestinationWaveIn)) { foreach (var source in destination.Sources .Where(source => source.ComponentType == MixerLineComponentType.SourceMicrophone)) { foreach (var control in source.Controls .Where(control => control.ControlType == MixerControlType.Volume)) { if (control.IsUnsigned) { try { volumeControl = control as UnsignedMixerControl; break; } catch { volumeControl = null; } } else if (control.IsSigned) { try { this.altVolumeControl = control as SignedMixerControl; } catch { this.altVolumeControl = null; } } } } } } } catch { volumeControl = null; altVolumeControl = null; } }