Для всех пользователей, использующих Android API распознавания голоса, было удобно RecognitionListener вы могли бы регистр, который будет подталкивать различные события к вашим обратным вызовам. В частности, был метод onBufferReceived(byte[])
:
public abstract void onBufferReceived (byte[] buffer)
С: API Level 8 получено больше звука. Цель этого функция позволяет давать обратную связь пользователю в отношении захваченный звук. Нет гарантии, что этот метод будет вызван.
Параметры
buffer
буфер, содержащий последовательность 16-разрядных целые числа, представляющие одноканальный аудиопоток. Частота выборки зависит от реализации.
Хотя метод явно заявляет, что нет гарантии, что он будет вызван, в ICS и до этого он будет эффективно вызван в 100% случаев: достаточно регулярно, по крайней мере, чтобы, объединив все байты, полученные таким образом, вы может восстановить весь аудиопоток и воспроизвести его.
По какой-то причине, однако, в SDK Jellybean это магически перестало работать. Там нет уведомления об устаревании, и код все еще компилируется, но onBufferReceived
теперь называется никогда. Технически это не нарушает их API (так как там сказано "нет гарантии", метод будет вызван), но, очевидно, это изменчивое изменение для многих вещей, которые зависели от этого поведения.
Кто-нибудь знает, почему эта функция была отключена, и если есть способ воспроизвести ее поведение на Jellybean?
Разъяснение. Я понимаю, что вся вещь RecognizerIntent
- это интерфейс с несколькими реализациями (включая некоторые из доступных в Play Маркете), и каждый из них может выбрать, что делать с RecognitionListener
, Я специально ссылаюсь на стандартную реализацию Google, которую используют большинство телефонов Jellybean.