对于所有使用 Android 的人语音识别API http://developer.android.com/reference/android/speech/RecognizerIntent.html,曾经有一个方便的识别监听器 http://developer.android.com/reference/android/speech/RecognitionListener.html#onBufferReceived%28byte%5B%5D%29您可以注册将各种事件推送到您的回调。特别是,有以下情况onBufferReceived(byte[]) http://developer.android.com/reference/android/speech/RecognitionListener.html#onBufferReceived%28byte%5B%5D%29 method:
public abstract void onBufferReceived (byte[] buffer)
自:API 级别 8收到了更多的声音。这样做的目的
功能是允许向用户提供有关
捕获的音频。不保证会调用此方法。
参数 buffer
包含 big-endian 16 位序列的缓冲区
表示单通道音频流的整数。采样率
取决于实现。
尽管该方法明确指出没有保证它会被调用,在 ICS 和之前的版本中,它实际上 100% 都会被调用:至少,通过连接以这种方式接收到的所有字节,您可以重建整个音频流并播放它。
然而,由于某种原因,在 Jellybean SDK 中,这神奇地停止工作了。没有弃用的通知,代码仍然可以编译,但是onBufferReceived
is now never叫。从技术上讲,这并没有破坏他们的 API(因为它说“不能保证”该方法将被调用),但显然这对于许多依赖于这种行为的事情来说是一个重大变化。
有谁知道为什么这个功能被禁用,以及是否有办法在 Jellybean 上复制其行为?
澄清: 我意识到整个RecognizerIntent
事物是一个具有多种实现的接口(包括 Play 商店中提供的一些实现),并且它们每个都可以选择要执行的操作RecognitionListener
。我特别指的是绝大多数 Jellybean 手机使用的默认 Google 实现。
Google 并未将此方法称为其 Jelly Bean 语音应用程序 (QuickSearchBox)。它根本不在代码中。除非谷歌工程师给出正式评论,否则我无法给出明确的答案“为什么”他们这样做。我确实搜索了开发者论坛,但没有看到任何有关此决定的评论。
语音识别的ic默认来自Google的VoiceSearch.apk。你可以反编译这个apk,然后发现有一个Activity来处理action *android.speech.action.RECOGNIZE_SPEECH*的意图。在此 apk 中,我搜索了“onBufferReceived”并在中找到了对它的引用com.google.android.voicesearch.GoogleRecognitionService$RecognitionCallback.
通过 Jelly Bean,Google 将 VoiceSearch.apk 重命名为 QuickSearch.apk,并向应用程序添加了许多新内容(例如离线听写)。您希望仍然可以找到 onBufferReceived 调用,但由于某种原因它完全消失了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)