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

时间:2011-08-17 00:47:01

标签: android android-activity speech-recognition

我正在尝试实施一个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
  • 启动语音识别活动,然后暂停正在运行的线程。绝对不推荐。
  • 从我的活动中调用语音识别活动中未在API中公开的方法。我不知道该怎么做,我不确定它是否可能。
  • 实施我自己的语音识别活动版本。这就是我现在正在做的事情,但它无论如何都不是微不足道的,我宁愿不用Java编写自己的FLAC编码器,也不必使用Google的服务器在未经许可的情况下进行语音识别。

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 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