c#中的实时麦克风幅度测量

Mar*_*ian 10 .net c# voice input microphone

我正在寻找简单的解决方案,它将在c#中返回麦克风输入的整数值.我已经在网上检查可用的样本,但它们都没有在x64环境中工作.(VS2008 + W7 x64).

是否有任何简单的解决方案可以返回c#中麦克风输入的幅度(或频率)值?

我试过没有结果的NAudio,这个:http : //www.codeproject.com/KB/audio-video/cswavrec.aspx? msg=2155497 没有运气.

Joh*_*ren 2

我认为最简单的方法是使用旧的 Windows 多媒体 API,因为它非常简单。

以下是 MSDN 的链接:http://msdn.microsoft.com/en-us/library/dd743586 (v=VS.85).aspx

您所做的就是使用该waveInOpen函数来获取输入设备。要确定要使用的设备,您无需枚举所有设备,但可以查询其中的每一个设备。通过调用 返回已安装设备的数量waveInGetNumDevs。然后,您可以调用waveInGetDevCaps每个设备并检查这些属性。

当您拥有设备句柄后,您可以重复调用waveInAddBuffer以获取小块数据。waveInOpen根据您在表示原始音频数据的字节期间指定的格式。以某个频率采样的 8 或 16 位有符号或无符号幅度。

然后,您可以应用滚动平均值来平滑信号并打印出来。

据我所知,C# 没有完善的 API,因此您要做的就是使用 P/Invoke 来获取 Win32 API 函数。这相当简单,您只需移植 Win32 标头的小版本即可直接从 C# 调用它们。

如果您更顽固,您可以用 C++/CLI 编写包装器库。这并不是一个坏主意,因为它允许您使用现有的 Windows C/C++ 头文件并以有趣的方式混合 C++ 和托管代码。只要小心非托管资源,您很快就会拥有一个非常强大的 intropability 库。

但从 Windows Vista 开始,还有更高级的音频 API,Windows Core Audio 组件可能会更有趣。但对于基本的 I/O 操作,Windows 多媒体功能将使您更快地实现。

在构建简单的软件合成器时,我曾多次使用过这些函数。遗憾的是,该代码早已不复存在。