これを行う方法は、を使用してデフォルトの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
}
}
}