【发布时间】:2014-01-29 15:24:13
【问题描述】:
对于使用 Android 的voice recognition API 的每个人,曾经有一个方便的RecognitionListener 可以注册,它将各种事件推送到您的回调。特别是有如下onBufferReceived(byte[])方法:
public abstract void onBufferReceived (byte[] buffer)自:API 级别 8 收到更多声音。这样做的目的 功能是允许向用户提供有关 捕获的音频。无法保证会调用此方法。
参数
buffer一个包含大端16位序列的缓冲区 表示单声道音频流的整数。采样率 依赖于实现。
虽然该方法明确声明没有保证将调用它,但在 ICS 和之前它会有效地被调用 100% 的时间:至少,通过连接所有以这种方式接收的字节,您可以重建整个音频流并播放它。
然而,出于某种原因,在 Jellybean SDK 中,这神奇地停止了工作。没有弃用通知,代码仍在编译,但 onBufferReceived 现在 从不 被调用。从技术上讲,这并没有破坏他们的 API(因为它说“不能保证”该方法会被调用),但显然这对于依赖这种行为的许多事情来说是一个重大变化。
有人知道为什么禁用此功能,是否有办法在 Jellybean 上复制其行为?
澄清:我意识到整个 RecognizerIntent 是一个具有多种实现的接口(包括一些在 Play 商店中可用),并且他们每个人都可以选择如何处理 RecognitionListener .我特别指的是绝大多数 Jellybean 手机使用的默认 Google 实现。
【问题讨论】: