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