基于语音(噪音)强度的语音识别?

时间:2012-06-12 18:50:44

标签: android voice-recognition

我想构建一个Android应用程序,它将识别我的声音,将其转换为文本,并将显示我刚刚在吐司中说的话。我可以通过一个按钮为我启动语音识别器。但是现在我想让它仅以我的声音为基础。

应用程序应该触发语音识别器,并且只有在我开始讲话时才开始听我说话,并且当它感觉到沉默时应该停止听。就像说话汤姆应用程序的功能。它记录了声音,但我想用语音识别器识别它。有点像这样:

if(no silense)
   Launch Recognizer
else if(silence)
   Stop Recognizer
Show toast

主要问题是如何在启动语音识别器之前检测用户是否在说话。有没有办法感知噪音强度.. ??

其次,有没有办法在后台启动语音识别器...... ??

是否可以在后台服务中检测到音频信号(有人开始说话),然后立即启动语音识别器识别语音。

2 个答案:

答案 0 :(得分:2)

大多数语音识别器已经有一个终点指针来检测语音开始和语音结束。终点通常会尝试读取环境噪声水平,以确定静音基线并调整信噪比。但是,如果输入噪声电平发生变化,它可能会触发终点指示的开始发声。如果一直听着,使用敏感的麦克风,终点指示器也可能会捡起旁边的人,而不是你。

因此,使用语音按钮是一种很好的做法,可以在您希望谈话时宣布。试图让识别器一直听,可能不是你想要做的,或者应该留给研究人员。

答案 1 :(得分:1)

好的,我已经弄清楚了。我为此使用了mediaRecorder类。当应用程序启动时,我开始使用mediaRecoder录制音频(或者您可以提供一个按钮来启动和停止整个过程)。我检查mediaRecorder录制的音频幅度。如果幅度超过预定义的阈值,我暂停录制并启动Voice Recognition activity。在OnActivityResult我再次恢复录音机。

if(mRecorder != null){
        int i= mRecorder.getMaxAmplitude();   // Getting amplitude 
        Log.d("AMPL : ", String.valueOf(i));

        if(i>20000){      // If amplitude is more than 20000
            onRecord(false);    //Stop recording before launching recognizer
            Intent intent=new Intent(this,VoiceRecognizer.class);   //Launch recognizer activity
            startActivityForResult(intent, 12112);
        }

或者:您也可以使用RecognitionListener SO帖子中提到的this界面。