我希望做三件事:
从麦克风访问数据。我真的想知道的是设备感知到的声音的总音量。
设置麦克风增益。
设置系统音量。
我所有的 Windows 开发经验都是 C#/WPF,所以我想保持管理。我不需要特别高性能或实时处理或任何东西。
我环顾四周,似乎 SlimDX 可能是一个很好的包装器,但即使如此,我也不知道从哪里开始。
肯定没那么难吧?
以下链接展示了如何从 C# 访问 Windows 中的音频混音器:
http://www.codeguru.com/csharp/csharp/cs_graphics/sound/article.php/c10931 http://www.codeguru.com/csharp/csharp/cs_graphics/sound/article.php/c10931
这将允许您设置麦克风增益和系统音量。不过,第一部分有点复杂。基本上,您需要开始录制输入(使用 DirectSound 或 waveInXXXX API [我个人最喜欢的])。当每个缓冲区充满音频时,您可以计算缓冲区的均方根并使用它来估计音量。
Edit:这里是一个项目的链接(我已经成功使用和修改了该项目,所以我知道它有效),它展示了如何使用 waveInXXXX API 录制音频:
Edit 2:由于我厌倦了发布链接,这里有一个计算音频缓冲区均方根的实际公式(这里的类型是 float[],但可以轻松修改它以处理短[],这就是您所需要的通常从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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)