按照官方网站上的指南: http://cmusphinx.sourceforge.net/2011/05/building-pocketsphinx-on-android/
我设法在我的设备上安装了该示例。
现在我想更改以下代码:
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
start_date = new Date();
this.listening = true;
this.rec.start();
break;
case MotionEvent.ACTION_UP:
Date end_date = new Date();
long nmsec = end_date.getTime() - start_date.getTime();
this.speech_dur = (float)nmsec / 1000;
if (this.listening) {
Log.d(getClass().getName(), "Showing Dialog");
this.rec_dialog = ProgressDialog.show(PocketSphinxDemo.this, "", "Recognizing speech...", true);
this.rec_dialog.setCancelable(false);
this.listening = false;
}
this.rec.stop();
break;
default:
;
}
/* Let the button handle its own state */
return false;
}
这样您就不必使用按钮上的点击开始语音识别,当您开始说话时开始识别并在讲完后立即停止。
这可能吗?我希望有人可以提供帮助。
谢谢。
答案 0 :(得分:0)
有可能但有点长。
而不是按钮,等待麦克风输入的开始并等到没有输入的时刻。这可以用作输入。
基本上,您需要一段代码,这些代码将持续运行直到获得输入。在单独的线程中运行它并使用条件语句/定时循环(使用线程)来获取输入。 使用标志退出循环或继续循环。
希望我的要求是正确的,我希望我能帮到你。
答案 1 :(得分:0)
试试这个。一旦启动线程获取输入,就会显示几秒钟的通知,比如3-4秒,这会要求用户等待。在这几秒钟内,您必须检测可用的背景噪声并计算此噪声的平均强度和其他特征。然后,关闭通知并读取输入。使用您获得的噪声测量值检查输入的强度。如果它相同或更低,它只是噪音或输入不够响亮/清晰。因此,要求用户大声/清晰地说话。获得输入后,尝试使用可以执行此操作的API来过滤噪声,并清除信号并准备好进行检测。
这本质上是一项工程工作,在使用MATLAB的DSP中非常容易。希望我的想法适用于Android,我真的希望我没有混淆你。
但在Android中,您需要一个专门的API,或者Android可能会提供一些可以帮助您的东西。我之前没有做过这样的事。所以我能够提供可以帮助你的精确命令,以防万一。
希望我能帮到你。