我試圖找到一種算法來檢測用戶在WM6設備上用C#吹入麥克風(如Ninentdo DS或iPhone)時的情況。如何監聽麥克風的噪音?
我正在考慮使用波形從麥克風實時讀取到一個小緩衝區,但我有點失去了如何識別吹的聲音,我想這聽起來像白噪聲。任何人有想法如何做到這一點?
任何幫助將不勝感激。
我試圖找到一種算法來檢測用戶在WM6設備上用C#吹入麥克風(如Ninentdo DS或iPhone)時的情況。如何監聽麥克風的噪音?
我正在考慮使用波形從麥克風實時讀取到一個小緩衝區,但我有點失去了如何識別吹的聲音,我想這聽起來像白噪聲。任何人有想法如何做到這一點?
任何幫助將不勝感激。
如果我要解決這個問題,我會吹進麥克風和record that。然後對波數據運行an FFT以獲得主頻(或少數)。我會這樣做幾次「打擊」,看看他們是否會產生類似的結果。如果他們這樣做(我確信他們會這樣做),那麼我會使用算法來尋找相同的頻率。
這不是一項簡單的任務,但是由於大量的錄音和數學工作已經完成,您可能可以在沒有太多痛苦的情況下工作。
我不知道OpenNetCF有一個FFT函數。很酷。 – MusiGenesis 2009-01-08 02:24:32
事實上,我們有兩種不同的實現方式,我很久以前就做過了(可能在1.2版本左右)。 – ctacke 2009-01-08 02:48:57
我認爲「噪音」(至少是白噪聲,這是吹入麥克風應該產生的噪音)是所有頻率的混合;一個主導頻率意味着音調,這會使聲音「不是噪音」 – 2009-02-14 07:16:26
這是不完全一樣,但這裏是我回答關於音符開始檢測問題:
答案描述了依賴於信號強度的上升高於給定的閾值的方法。這種方法可以檢測吹氣噪音,儘管它也會響應任何噪音,所以說話等也會觸發它。
您可以使用FFT,但我認爲這樣做實時使用速度太慢,尤其是在Windows Mobile設備上(儘管它可能足夠快)。但是,吹風機噪音不太可能具有主導頻率,除非鼓風機鳴笛特定音符。如果FFT速度足夠快,您可能實際上想要查找沒有主頻的噪聲(假設任何具有主導頻率或頻率的是語音或某種儀器)並且權重很大朝着可聽範圍的上端(大約10,000hz左右)。
麥克風的擊中不一定會顯示高頻範圍(10,00hz +)的主頻率。吹出PC麥克風很可能會導致信號失真和失真,同時也會產生很多低頻率的頻率。產生的信號將只是一個大的飽和突發。
幾年前,我不得不做一個類似的項目,我所做的只是尋找音量高於正常水平的音量。工作很好。
sthg的回答提到變形可能是吹入話筒的結果。我只做了一個快速測試,並且我的吹風錄音(在便宜的麥克風上)顯示了大量樣本的最小值和最大值(例如,每個樣本16位WAV文件中的32767和-32768),其中看起來像一個平頂已被應用到每個峯值。檢測吹氣聲音的一種非常簡單的方法可能是對所有處於最小/最大值的樣本進行計數,並且如果它們佔總數(或其他閾值)的5%以上,則認爲吹氣發生。
我沒有看過這個頻譜,但我認爲你應該看到一個頻帶限制的噪聲頻譜,大部分能量低於幾百赫茲。這意味着你不需要完整的音頻帶寬FFT,16K點是矯枉過正的。即使是在一個小帶寬上的256點FFT,你也應該能夠告訴從話音中吹出麥克風的噪音。
「噪音」..似乎是一個尷尬的配對。 – mmcdole 2009-02-14 06:31:27
你是否在意這種聲音是吹的,而不僅僅是響亮的東西?如果你不關心聲音是什麼,這個問題變得更容易。 – 2009-02-14 06:31:44