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

Android语音识别活动的启动延迟,android,android-activity,speech-recognition,Android,Android Activity,Speech Recognition,我正在尝试实现一个Android应用程序,通过文本到语音和Android的语音识别活动与用户进行对话 以下代码启动活动,如中所述: 问题是该活动需要0.5到1秒的时间才能开始录制用户的语音。这看起来不多,但这通常意味着用户在语音识别活动开始录制之前就已经开始说话了,这意味着应用程序将错过用户所说的部分内容 有没有一个好方法可以避免这种延迟,这样我可以在文字转换成语音后立即开始语音识别 我考虑过的可能性: 在Android中预加载活动,并在启动时暂停。我不认为有任何方法可以做到这一点,除非我有能

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

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

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

有没有一个好方法可以避免这种延迟,这样我可以在文字转换成语音后立即开始语音识别

我考虑过的可能性:

  • 在Android中预加载活动,并在启动时暂停。我不认为有任何方法可以做到这一点,除非我有能力更改活动中的代码,因为它不是Android源代码的一部分
  • 在文本到语音转换完成之前,调用启动活动的时间。这并不理想,因为它依赖于未定义的行为:加载语音识别活动所需的时间,这可能因系统而异。此外,它还需要知道说一个短语需要多长时间才能从文本转换为语音,而这个短语不是语言的一部分
  • 启动语音识别活动,然后暂停正在运行该活动的线程。绝对不推荐
  • 从“我的活动”的“语音识别”活动调用API中未公开的方法。我不知道该怎么做,也不确定这是否可能
  • 实现我自己版本的语音识别活动。这就是我现在正在做的,但无论如何这都不是小事,我也不想在未经允许的情况下用Java编写自己的FLAC编码器并使用Google的服务器进行语音识别

如果您对如何正确执行此操作有任何其他想法,或者有一种解决上述任何问题的方法,那将非常棒。

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

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


它可能会在命令中添加不必要的词语,但我相信这并没有让用户停顿那么尴尬。正如您所描述的,延迟是有问题的。

似乎有一种较低级别的方法来控制语音识别活动

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


发件人:

是的,这绝对是一个可行的解决方案,但对于用户最关心速度的简短回答,如“是”、“否”或“取消”,这并不好。
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);