Способ сделать это, чтобы открыть устройство WaveIn по умолчанию, используя WaveInOpen
, и это даст вам ручку waveIn. Затем вы можете использовать микшер ... API для выбора соответствующей линии микшера.
Это будет линия назначения и будет иметь некоторые элементы управления (часто немой и громкость). Вы можете установить их. Однако здесь он становится немного сложнее. Также имеется множество «источников», связанных с пунктом назначения (например, микрофон, линия и т. Д.). Они также могут иметь громкость и звук и другие пользовательские элементы управления. Возможно, вам придется немного поэкспериментировать, чтобы найти элемент управления, который вы действительно хотите изменить. Мне было трудно найти код, который надежно работает как с Vista, так и с XP (это может быть связано с драйверами вашей звуковой карты).
Я написал управляемые обертки для всех этих функций в NAudio, которые помогут вам в этом. Это примерно то, что вы хотите сделать:
MixerLine mixerLine;
if (waveInHandle != IntPtr.Zero)
{
mixerLine = new MixerLine(waveInHandle, 0, MixerFlags.WaveInHandle);
}
else
{
mixerLine = new MixerLine((IntPtr)waveInDeviceNumber, 0, MixerFlags.WaveIn);
}
foreach (MixerControl control in mixerLine.Controls)
{
if (control.ControlType == MixerControlType.Volume)
{
// this is the volume control of the "destination"
UnsignedMixerControl volumeControl = (UnsignedMixerControl)control;
Debug.WriteLine(volumeControl.Percent.ToString());
}
}
// to examine the volume controls of the "sources":
if (source.ComponentType == MixerLineComponentType.SourceMicrophone)
{
foreach (MixerControl control in source.Controls)
{
if (control.ControlType == MixerControlType.Volume)
{
// this might be the one you want to set
}
}
}