我正在寻找简单的解决方案,它将返回 C# 中麦克风输入的整数值。我已经在网上检查了可用的示例,但它们都不能在 x64 环境中工作。 (VS2008 + W7 x64)。
是否有任何简单的解决方案可以返回 C# 中麦克风输入的幅度(或频率)值?
我尝试了 NAudio 但没有结果,如下:http://www.codeproject.com/KB/audio-video/cswavrec.aspx?msg=2155497 http://www.codeproject.com/KB/audio-video/cswavrec.aspx?msg=2155497没有运气。
我认为最简单的方法是使用旧的 Windows 多媒体 API,因为它非常简单。
这是 MSDN 的链接:http://msdn.microsoft.com/en-us/library/dd743586(v=VS.85).aspx 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 多媒体功能将使您更快地实现。
在构建简单的软件合成器时,我曾多次使用过这些函数。遗憾的是,该代码早已不复存在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)