Android:更改PochetSphinix的开始语音识别

时间:2011-07-16 15:51:51

标签: android

按照官方网站上的指南: 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;
}

这样您就不必使用按钮上的点击开始语音识别,当您开始说话时开始识别并在讲完后立即停止。

这可能吗?我希望有人可以提供帮助。

谢谢。

2 个答案:

答案 0 :(得分:0)

有可能但有点长。

而不是按钮,等待麦克风输入的开始并等到没有输入的时刻。这可以用作输入。

基本上,您需要一段代码,这些代码将持续运行直到获得输入。在单独的线程中运行它并使用条件语句/定时循环(使用线程)来获取输入。 使用标志退出循环或继续循环。

希望我的要求是正确的,我希望我能帮到你。

答案 1 :(得分:0)

是的..这是可能的。背景噪音可以照顾。但这可能需要专门的API和一些非常好的编码。

试试这个。一旦启动线程获取输入,就会显示几秒钟的通知,比如3-4秒,这会要求用户等待。在这几秒钟内,您必须检测可用的背景噪声并计算此噪声的平均强度和其他特征。然后,关闭通知并读取输入。使用您获得的噪声测量值检查输入的强度。如果它相同或更低,它只是噪音或输入不够响亮/清晰。因此,要求用户大声/清晰地说话。获得输入后,尝试使用可以执行此操作的API来过滤噪声,并清除信号并准备好进行检测。

这本质上是一项工程工作,在使用MATLAB的DSP中非常容易。希望我的想法适用于Android,我真的希望我没有混淆你。

但在Android中,您需要一个专门的API,或者Android可能会提供一些可以帮助您的东西。我之前没有做过这样的事。所以我能够提供可以帮助你的精确命令,以防万一。

希望我能帮到你。