如何监听麦克风的噪音?

时间:2009-01-07 23:32:52

标签: c# windows-mobile compact-framework audio

我正在尝试找到一种算法来检测用户何时使用C#在WM6设备上吹入麦克风(如Ninentdo DS或iPhone)。

我正在考虑使用波形从麦克风实时读取到一个小缓冲区,但我对如何识别吹动声音有点迷失,我猜这听起来像是白​​噪声。任何人都知道如何做到这一点?

非常感谢任何帮助。

5 个答案:

答案 0 :(得分:4)

如果我要解决这个问题,我会吹进麦克风并record that。然后在波形数据上运行an FFT以获得主导频率(或几个)。我会做几次“打击”,看看他们是否产生类似的结果。如果他们这样做(而且我很确定他们会这样做)那么我会使用算法来寻找相同的频率。

这不是一项微不足道的任务,但是由于很多录音和数学工作已经完成,你可以在没有太多痛苦的情况下让它工作。

答案 1 :(得分:3)

麦克风中的一击不一定会显示高频范围内的主频(10,00hz +)。吹入PC麦克风最有可能导致信号静态和失真,这也有很多低频范围。结果信号只是一个很大的饱和度。

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

Note onset detection

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

您可以使用FFT,但我认为这实时使用速度太慢,尤其是在Windows Mobile设备上(尽管可能足够快)。然而,吹风噪声不太可能具有主导频率,除非鼓风机吹响特定音符。如果FFT足够快,你实际上可能想要寻找没有主导频率的噪声(你假设任何具有主要频率或频率的东西都是语音或某种仪器)且权重很大朝向可听范围的上端(大约10,000hz左右)。

答案 4 :(得分:1)

我没有看过这个频谱,但我认为你应该看到频带限制的噪声频谱,其中大部分能量低于几百赫兹。这意味着您不需要完整的音频带宽FFT,并且16K点过度。即使在小带宽上进行256点FFT,您也应该能够将麦克风中的噪音分开讲话。