C# 如何监控麦克风的噪音?

C# 如何监控麦克风的噪音?,c#,windows-mobile,compact-framework,audio,C#,Windows Mobile,Compact Framework,Audio,我试图找到一种算法来检测用户何时用C#对着WM6设备上的麦克风(如Ninentdo DS或iPhone)吹气 我本想用波形来实时读取麦克风中的声音,并将其输入一个小的缓冲区,但我对如何识别吹奏的声音有点迷茫,我想这听起来像白噪声。有人知道怎么做吗 任何帮助都将不胜感激。如果我要解决这个问题,我会对着麦克风吹气,然后打开话筒。然后在波浪数据上运行,以获得一个主频(或几个主频)。我会做几次“打击”,看看他们是否会产生类似的结果。如果他们这样做了(我相当肯定他们会),那么我会使用一个算法来寻找相同的频

我试图找到一种算法来检测用户何时用C#对着WM6设备上的麦克风(如Ninentdo DS或iPhone)吹气

我本想用波形来实时读取麦克风中的声音,并将其输入一个小的缓冲区,但我对如何识别吹奏的声音有点迷茫,我想这听起来像白噪声。有人知道怎么做吗


任何帮助都将不胜感激。

如果我要解决这个问题,我会对着麦克风吹气,然后打开话筒。然后在波浪数据上运行,以获得一个主频(或几个主频)。我会做几次“打击”,看看他们是否会产生类似的结果。如果他们这样做了(我相当肯定他们会),那么我会使用一个算法来寻找相同的频率


这不是一项琐碎的任务,但由于完成了大量的录音和数学工作,您可能可以毫不费力地让它工作。

这并不完全相同,但下面是我对一个关于音符开始检测的问题的回答:

答案描述了一种依赖于信号强度上升到给定阈值以上的方法。这种方法可以检测吹出的噪音,尽管它也会对任何噪音做出反应,所以说话等也会触发它


您可以使用FFT,但我认为这对于实时使用来说太慢了,尤其是在Windows Mobile设备上(虽然可能足够快)。但是,除非鼓风机吹出特定的音符,否则吹出的噪音不可能有主频。如果FFT足够快,您可能实际上想要寻找没有主频的噪声(您可以假设任何具有主频或主频的噪声都是语音或某种乐器),并且这些噪声在可闻范围的上限(超过10000Hz左右)有很大的权重.

话筒中的一击不一定会在高范围(10,00hz+)内显示主频。在PC话筒中吹气最有可能导致信号失真和失真,这也有很多低频段。产生的信号将只是一个大的饱和爆发


几年前我曾做过一个类似的项目,我所做的只是寻找远远高于正常口语水平的音量峰值。很好

sthg的回答提到失真可能是对着麦克风吹气的结果。我刚刚做了一个快速测试,我的吹奏录音(在廉价的麦克风上)显示了大量最小值和最大值的样本(例如,每个样本WAV文件16位上的32767和-32768),看起来每个峰值都应用了平顶。检测吹气声音的一种非常简单的方法可能是将最小值/最大值的所有样本计数,如果它们占总数的5%以上(或某些其他阈值),则假设吹气正在发生。

我没有研究这一光谱,但我认为你应该看到一个频带有限的噪声频谱,大部分能量低于几百赫兹。这意味着你不需要一个完整的音频带宽FFT,16K点是多余的。即使在一个小带宽上使用256点FFT,除了语音,您也应该能够分辨出麦克风中的噪声。

事实上,我们有两种不同的实现方式,这是我多年前做的(可能是1.2版左右)。我认为“噪声”(至少是白噪声,这是吹进麦克风应该产生的)根据定义是所有频率的混合;主频意味着音高,这将使声音“不是噪音”。不同的话筒将产生不同的频率特征。我认为试图在频域中检测这一点将是一个太“芬尼基”的算法。。。在某些情况下工作,在另一些情况下失败。我相信你在主频上的话。我的FFT工作全部用于地震分析。据我所知,表面上看起来“嘈杂”的波形通常会由于自然频率而显示出几个主要的尖峰。我假设(可能是错误的)你在白噪声中也看到了类似的情况。我认为白噪声本身在所有频率下都表现出相同的强度(尽管那可能是粉红色的噪声——已经很晚了,我太累了,无法用谷歌搜索)。然而,我不认为一次打击实际上是白噪声。10000赫兹的东西完全是猜测——我从来没有看过一次打击的录音。你提到的失真让我想到了另一个答案。简单、有效、快速……我想这就是我要走的路(尽管它远没有滚动FFT那么有趣)。谢谢。我希望有人能理解“假设爆炸正在发生”这句话中的幽默:)“噪音”。。似乎是一对尴尬的组合。你在意的是吹的声音,而不仅仅是响亮的声音吗?如果你真的不在乎声音是什么,问题就容易多了。