管理访问麦克风输入和系统音量

Jos*_*elo 4 .net audio microphone

我期待做三件事:

从麦克风访问数据.我真想知道的是设备所感知的声音的整体音量.

设置麦克风增益.

设置系统音量.

我所有的windows开发经验都是C#/ WPF,所以我想保持管理.我不需要特别高性能或实时处理或任何东西.

我环顾四周,似乎SlimDX可能是一个很好的包装,但即使在那里,我也不知道从哪里开始.

当然不是那么难吗?

Mus*_*sis 6

这是一个链接,显示如何从C#访问Windows中的音频混音器:

http://www.codeguru.com/csharp/csharp/cs_graphics/sound/article.php/c10931

这将允许您设置麦克风增益和系统音量.不过,第一部分有点复杂.基本上,您需要开始录制输入(使用DirectSound或waveInXXXX API [我个人最喜欢的]).当每个缓冲区充满音频时,您可以计算缓冲区的均方根,并使用它来估计音量.

编辑:这是一个项目的链接(我已成功使用和修改,所以我知道它有效),它显示了如何使用waveInXXXX API录制音频:

http://www.codeproject.com/KB/audio-video/cswavrec.aspx?df=90&fid=16677&mpp=25&noise=3&sort=Position&view=Quick&select=3005817

编辑2:因为我已经厌倦了发布链接,这里是一个计算音频缓冲区均方根的实际公式(这里的类型是float [],但它可以很容易地修改为处理short [],这是你通常从waveInXXXX获得的东西:

public static float RootMeanSquared(ref float[] audio)
{
    double sumOfSquared = 0;
    for (int i = 0; i < audio.Length; i++)
    {
        sumOfSquared += audio[i] * audio[i];
    }
    return (float)Math.Sqrt(sumOfSquared / (double)audio.Length);
}
Run Code Online (Sandbox Code Playgroud)