First, note that I know there are a few questions like this already posted; however they don\'t seem to address the problem adequately. I have a C# application, with all th
I tried doing exactly this a while ago when I was writing .NET Voice Recorder using NAudio, and found it extremely hard. You probably have to end up writing two lots of code, one for XP and one for Vista/Win 7. I am using NAudio for the mixer interop.
This is what I ended up with (still doesn't work everywhere)
private void TryGetVolumeControl()
{
int waveInDeviceNumber = waveIn.DeviceNumber;
if (Environment.OSVersion.Version.Major >= 6) // Vista and over
{
var mixerLine = new MixerLine((IntPtr)waveInDeviceNumber, 0, MixerFlags.WaveIn);
foreach (var control in mixerLine.Controls)
{
if (control.ControlType == MixerControlType.Volume)
{
volumeControl = control as UnsignedMixerControl;
MicrophoneLevel = desiredVolume;
break;
}
}
}
else
{
var mixer = new Mixer(waveInDeviceNumber);
foreach (var destination in mixer.Destinations)
{
if (destination.ComponentType == MixerLineComponentType.DestinationWaveIn)
{
foreach (var source in destination.Sources)
{
if (source.ComponentType == MixerLineComponentType.SourceMicrophone)
{
foreach (var control in source.Controls)
{
if (control.ControlType == MixerControlType.Volume)
{
volumeControl = control as UnsignedMixerControl;
MicrophoneLevel = desiredVolume;
break;
}
}
}
}
}
}
}
}