我想构建一个Android应用程序,它将识别我的声音,将其转换为文本,并将显示我刚刚在吐司中说的话。我可以通过一个按钮为我启动语音识别器。但是现在我想让它仅以我的声音为基础。
应用程序应该触发语音识别器,并且只有在我开始讲话时才开始听我说话,并且当它感觉到沉默时应该停止听。就像说话汤姆应用程序的功能。它记录了声音,但我想用语音识别器识别它。有点像这样:
if(no silense)
Launch Recognizer
else if(silence)
Stop Recognizer
Show toast
主要问题是如何在启动语音识别器之前检测用户是否在说话。有没有办法感知噪音强度.. ??
其次,有没有办法在后台启动语音识别器...... ??
是否可以在后台服务中检测到音频信号(有人开始说话),然后立即启动语音识别器识别语音。
答案 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界面。