我正在尝试找到一种算法来检测用户何时使用C#在WM6设备上吹入麦克风(如Ninentdo DS或iPhone)。
我正在考虑使用波形从麦克风实时读取到一个小缓冲区,但我对如何识别吹动声音有点迷失,我猜这听起来像是白噪声。任何人都知道如何做到这一点?
非常感谢任何帮助。
答案 0 :(得分:4)
如果我要解决这个问题,我会吹进麦克风并record that。然后在波形数据上运行an FFT以获得主导频率(或几个)。我会做几次“打击”,看看他们是否产生类似的结果。如果他们这样做(而且我很确定他们会这样做)那么我会使用算法来寻找相同的频率。
这不是一项微不足道的任务,但是由于很多录音和数学工作已经完成,你可以在没有太多痛苦的情况下让它工作。
答案 1 :(得分:3)
麦克风中的一击不一定会显示高频范围内的主频(10,00hz +)。吹入PC麦克风最有可能导致信号静态和失真,这也有很多低频范围。结果信号只是一个很大的饱和度。
几年前我不得不做一个类似的项目,我所做的只是寻找远高于正常水平的音量峰值。工作得很好。
答案 2 :(得分:3)
答案 3 :(得分:1)
这不完全相同,但这是我对一个关于音符开始检测的问题的答案:
答案描述了一种依赖于信号强度超过给定阈值的方法。这种方法可以检测到一种吹动噪音,虽然它也会对任何噪音做出反应,所以说话等也会触发它。
您可以使用FFT,但我认为这实时使用速度太慢,尤其是在Windows Mobile设备上(尽管可能足够快)。然而,吹风噪声不太可能具有主导频率,除非鼓风机吹响特定音符。如果FFT足够快,你实际上可能想要寻找没有主导频率的噪声(你假设任何具有主要频率或频率的东西都是语音或某种仪器)且权重很大朝向可听范围的上端(大约10,000hz左右)。
答案 4 :(得分:1)
我没有看过这个频谱,但我认为你应该看到频带限制的噪声频谱,其中大部分能量低于几百赫兹。这意味着您不需要完整的音频带宽FFT,并且16K点过度。即使在小带宽上进行256点FFT,您也应该能够将麦克风中的噪音分开讲话。