Para cualquiera que use el voice recognition API de Android, solía haber un práctico RecognitionListener que podría registrar varios eventos en sus callbacks. En particular, hubo el onBufferReceived(byte[])
método siguiente:¿Por qué RecognitionListener dejó de funcionar en JellyBean?
public abstract void onBufferReceived (byte[] buffer)
desde: Nivel API 8 Más sonido ha sido recibido. El propósito de esta función es permitir la retroalimentación al usuario con respecto al audio capturado . No hay garantía de que se llame a este método.
Parámetros
buffer
un tampón que contiene una secuencia de-big endian 16 bits números enteros que representan un flujo de audio de canal único. La frecuencia de muestreo depende de la implementación.
Aunque el método establece explícitamente que no hay garantía se va a llamar, en el ICS y antes de que efectivamente se llamaría el 100% del tiempo: con suficiente regularidad, al menos, de que mediante la concatenación de todos los bytes recibido de esta manera, podría reconstruir toda la secuencia de audio y reproducirla.
Por alguna razón, sin embargo, en el Jellybean SDK, mágicamente dejó de funcionar. No hay notificación de obsolescencia y el código aún se compila, pero el onBufferReceived
ahora es nunca llamado. Técnicamente, esto no está rompiendo su API (ya que dice que "no hay garantía" de que se llame al método), pero claramente este es un cambio radical para muchas cosas que dependen de este comportamiento.
¿Alguien sabe por qué esta funcionalidad fue deshabilitada, y si hay una manera de replicar su comportamiento en Jellybean?
Aclaración: Me dan cuenta de que todo el RecognizerIntent
cosa es una interfaz con múltiples implementaciones (incluyendo algunos disponibles en la Play Store), y que cada uno puede elegir qué hacer con RecognitionListener
. Me refiero específicamente a la implementación predeterminada de Google que usa la gran mayoría de los teléfonos de Jellybean.
Gracias por el análisis en profundidad que confirma que el problema es universal en Jellybean :) Supongo que la única forma en que puede ser más definitivo es si conseguimos que un ingeniero de Google explique por qué ocurrió esto. ¡Gracias! –