2011-03-24 179 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