你如何使用Android的实时语音文本?

在android 4.1中,你可以使用键盘上的麦克风选项来实时的语音转换为文本。

我一直在寻找android.speech的文档,试图找出如何实现应用程序的实时语音文本。 但是,唯一有利于此的选项是“EXTRA_PARTIAL_RESULTS”选项(服务器在每次尝试使用时都忽略)。

代码:

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "VoiceIME"); intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true); intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 3000L); mSpeaker.startListening(intent); 

不要返回部分结果。

我知道这是可能的,因为键盘版本一贯。 任何人都知道?

Solutions Collecting From Web of "你如何使用Android的实时语音文本?"

在你调用startListening之前,你需要注册onPartialResults 。 两件重要的事情要注意:

  • Android API不指定调用onPartialResults的bundle的结构;
  • 不是每个语音识别器都支持这个callback。

因此,您的代码将特定于Google语音search。

 mSpeaker.setRecognitionListener(new RecognitionListener() { ... public void onPartialResults(Bundle partialResults) { // WARNING: The following is specific to Google Voice Search String[] results = partialResults.getStringArray("com.google.android.voicesearch.UNSUPPORTED_PARTIAL_RESULTS"); updateTheUi(results); } ... } 

要在开源应用程序中查看此callback,请参阅Babble:

  • Google Play: https : //play.google.com/store/apps/details?id = be.lukin.android.babble
  • 源代码: https : //github.com/lukin0110/babble/blob/master/android/app/src/be/lukin/android/babble/BabbleActivity.java

如果要在麦克风打开时显示实时部分结果,而在说话人说话时,则可能需要使用RecognizerIntent放弃方法,并且将recognitionService放弃,以支持简单的android文本框,并与之前select的麦克风相结合'像你可以在Android'笔记'示例应用程序中做的图标…

请参阅./samples/android-16/NotePad/tests/src/com/example/android/notepad

这个组合提供的function就像你实时看到从服务器端“voiceSearch”返回的部分文本 – 语音结果,这与“识别器”有关的“部分”callback有所不同。

许多评论指出,RecognizerIntent不会触发“onPartialResults”的callback。 出于某种原因,Android 4.2似乎不支持使用JavaScript工作正常的“连续”speechRecognition模式。 我在4.2版本的“RecognitionListener”接口testing中,在卷事件上显示了数百个“onRmsChanged”的callback,而在“partialResult”事件中显示为零活动。 某处,这个callback会丢失?

为js解决scheme,安装铬-β释放25并去这里

使用Android笔记应用程序。 从键盘上预先select麦克风图标,就可以完成与上面的JS webapp链接完全相同的function。

由于我们无法确定从部分结果callback中进入的Bundle的关键名称,请使用它来查找其内容:

 public void onPartialResults(Bundle partialResults) { String string = "Bundle{"; for (String key : partialResults.keySet()) { string += " " + key + " => " + partialResults.get(key) + ";"; } Log.e("joshtag","onPartialResults"+string); //see the keynames in Logcat and extract partial reesults here }