2009-07-04 13 views
1

現在のコンピュータのデフォルトのオーディオ記録デバイスの現在のボリュームを検出します。使用するAPIやソリューションはありますか?現在のオーディオデバイスのボリュームを検出する方法

私はオーディオレコーダーを作成していますが、録音前にデフォルトのオーディオレコーディングデバイスの現在の音量を知ってもらいたいので、オーディオレコーディングされていない問題を避けることができますミュート)。

結果がパーセント値の形式で取得できる場合(0%はミュートを意味し、100%は最大ボリュームを意味します)、素晴らしい結果になります。

VSTS 2008 + C#+ .Net 3.5を使用してWindowsフォームアプリケーションを作成しています。

答えて

3

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

、ミキサーのボリュームとエンドポイント体積は両方(これはAGCを使用するアプリケーションは、変更しなくても正常に動作することができます)実際のキャプチャハードウェアのボリュームを反映:これは、あなたが何をしたいのかおおよそです。

関連する問題