我想检测当前计算机的默认音频录制设备的当前音量。有没有使用API或解决方案?如何检测当前音频设备音量
我正在写一个录音机,我想让用户在录音之前知道默认录音设备的当前音量,这样我们可以避免无音频录音问题(例如最终用户有录音设备静音)。
如果可以百分比值的形式检索结果(即0%意味着静音,100%意味着最大音量),那就太棒了!
我使用VSTS 2008 + C#+ .Net 3.5编写Windows窗体应用程序。
我想检测当前计算机的默认音频录制设备的当前音量。有没有使用API或解决方案?如何检测当前音频设备音量
我正在写一个录音机,我想让用户在录音之前知道默认录音设备的当前音量,这样我们可以避免无音频录音问题(例如最终用户有录音设备静音)。
如果可以百分比值的形式检索结果(即0%意味着静音,100%意味着最大音量),那就太棒了!
我使用VSTS 2008 + C#+ .Net 3.5编写Windows窗体应用程序。
要做到这一点的方法是使用WaveInOpen
打开默认的WaveIn设备,那会给你一个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
}
}
}
对于捕获设备,调音台体积和终点体积既反映实际采集硬件的体积(这让使用AGC无需修改正常运行的应用程序)。