首页 文章

Android语音识别活动的启动延迟

提问于
浏览
3

我正在尝试实现一个Android应用程序,该应用程序通过文本到语音和Android的语音识别活动与用户进行对话 .

以下代码启动活动,如tutorial中所述:

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
        RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);

问题是活动需要0.5到1秒的时间才能开始录制用户的声音 . 这似乎不是很多,但这通常意味着用户在语音识别活动开始录制之前已经开始说话,这意味着应用程序将错过用户所说的部分内容 .

是否有一种很好的方法可以解决这种延迟问题,这样我就可以在讲完语音后立即开始语音识别?

我考虑过的可能性:

  • 在Android中预加载活动并在启动时暂停 . 除非我能够更改活动中的代码,否则我不会以任何方式执行此操作,我不会将其视为Android源代码的一部分 .

  • 在完成文本到语音之前调用启动活动的时间 . 这并不理想,因为它依赖于未定义的行为:语音识别活动需要多长时间才能加载,这可能因系统而异 . 此外,它需要知道文本到语音将用多长时间来表达一个短语,这不是text-to-speech API的一部分 .

  • 启动语音识别活动,然后暂停正在运行的线程 . 绝对不推荐 .

  • 调用不知道如何执行此操作的方法,并且不确定它是否可行 .

  • 实现我自己的语音识别活动版本 . 这就是我无论如何都不是一件容易的事情,而是我未经许可进行语音识别的服务器 .

如果您对如何正确完成这一任务有任何其他想法,或者解决上述任何可能令人敬畏的问题 .

2 回答

  • 1

    您可以做的一件事是鼓励用户说出更长的命令 . 这样,如果他们开始讲得太快,系统就可以识别命令的后半部分 .

    例如,不是让系统识别“打开电子邮件”,而是鼓励用户说“系统打开电子邮件”,这样如果系统只听到“打开电子邮件”部分,它仍然可以识别命令 .

    它可能会为命令添加不必要的单词,但我相信它不像让用户暂停那样尴尬 . 正如您所描述的那样,延迟是有问题的 .

  • 1

    看起来有一种较低级别的方式来控制语音识别活动 .

    创建一个名为SpeechRecognizer的对象,调用SpeechRecognizer.setRecognitionListener()并将其传递给RecognitionListener . 然后将RecognizerIntent.ACTION_RECOGNIZE_SPEECH Intent传递给SpeechRecognizer.startListening(),它将开始监听并执行语音识别,而无需等待弹出窗口 .

    来自:How can I use speech recognition without the annoying dialog in android phones

相关问题