2011-03-24 132 views

回答

4

你的意思是實施一個拍板?

沒有必要使用花哨的數學或語音識別API。只需使用MediaRecorder及其getMaxAmplitute()方法即可。

以下是您需要的一些代碼。該算法記錄一段時間,然後測量幅度差異。如果它很大,那麼用戶可能發出一聲巨響。

public void recordClap() 
{ 
    recorder.start(); 

    int startAmplitude = recorder.getMaxAmplitude(); 
    Log.d(D_LOG, "starting amplitude: " + startAmplitude); 
boolean ampDiff; 
do 
{ 
    Log.d(D_LOG, "waiting while taking in input"); 
    waitSome(); 
    int finishAmplitude = 0; 
    try 
    { 
     finishAmplitude = recorder.getMaxAmplitude(); 
    } 
    catch (RuntimeException re) 
    { 
     Log.e(D_LOG, "unable to get the max amplitude " + re); 
    } 
    ampDiff = checkAmplitude(startAmplitude, finishAmplitude); 
    Log.d(D_LOG, "finishing amp: " + finishAmplitude + " difference: " + ampDiff); 
} 
while (!ampDiff && recorder.isRecording()); 

}

private boolean checkAmplitude(int startAmplitude, int finishAmplitude) 
{ 
    int ampDiff = finishAmplitude - startAmplitude; 
    Log.d(D_LOG, "amplitude difference " + ampDiff); 
    return (ampDiff >= 10000); 
} 
2

如果我試圖檢測尖叫或響亮的聲音,我只想尋找一個高根均方通過麥克風傳來的聲音。我想你可以嘗試訓練一個語音識別系統來識別一個尖叫聲,但它看起來像是矯枉過正。

+0

似乎是合理的。你能否爲此添加示例代碼? – Kaps 2011-03-24 06:42:20

+0

好吧,沒有。我沒有真正爲Android編碼的一件事。我剛剛完成了各種聲音節目。此外,這不是一個'給我代碼'網站。給它一個鏡頭,併發布你的代碼尋求幫助,如果它不工作。查找root-mean-squared。你基本上只需要一段時間,對數值進行平方,找到這些數值的平均值,然後取平均值的平方根。這個用法實際上可以跳過平方根。然後你只需要看看你在尖叫時與談話/安靜時得到的值,並設置一個正確的閾值。 – 2011-03-24 06:46:40

+0

我認爲你的回答沒有幫助。我還不能投票,所以這是另一種' – brainmurphy1 2012-07-15 21:02:12