Por qué una aplicación de Android nunca podrá emular el funcionamiento de la cancelación de ruido
A pesar de que un módil podría funcionar como sistema de cancelación de ruido, en un Android no podría existir una aplicación así. ¿Por qué?
29 septiembre, 2016 21:31Las aplicaciones de música están entre las más utilizadas en Android. Desde las dedicadas a streaming y listas offline, como Spotify o Play Music, a los reproductores capaces de poner todas las pistas almacenadas en Mp3, como PlayerPro o PowerAmp. ¿Sueles escuchar música con el móvil? Seguro que has probado alguna de estas cuatro apps.
Vale, tenemos el reproductor y las canciones, ahora toca elegir auriculares. ¿In-ear, de diadema, Bluetooth, con cable… Muchas opciones donde elegir y una que no suele encontrarse: los auriculares con cancelación de ruido. Son mucho más caros, aunque compensan por su capacidad de eliminar las interferencias sonoras del ambiente.
Los auriculares con cancelación de ruido funcionan filtrando los sonidos constantes del exterior para que sólo escuches la música. Incluyen un sistema de micrófonos y software exclusivo que les permite funcionar. De hecho, y dadas esas especificaciones, podría desarrollarse una aplicación Android que emulase a los auriculares con cancelación de ruido. ¿A que suena bien? Pues es imposible.
Latencia, el muro insalvable
El principal obstáculo para crear una aplicación Android capaz de cancelar el ruido ambiente es la latencia. Explicada grosso modo, la latencia de sonido es el retraso entre que se produce el audio y éste se emite por un dispositivo externo, como los auriculares. También hay latencia entre el audio que emite una fuente y el dispositivo que la graba.
Actualizo esta parte del artículo como bien han puntualizado en los comentarios.
A pesar de que con Android Marshmallow se redujo notablemente la latencia, ésta depende en exceso del hardware y de los drivers empleados en la gestión de dicho hardware. Si bien hay smartphones donde la latencia es mínima (el Nexus 6P o el 5X), en otros sobrepasa en exceso lo necesario para implementar la cancelación de ruido por software.
En la página de Superpowered disponen de un completa lista de móviles donde los usuarios les han realizado tests de latencia. Puedes descargar su app desde aquí y averiguar tú mismo cómo se comporta tu smartphone (en mi Huawei Nova Plus el resultado fue de 63 milisegundos). Algunos móviles:
- Nexus 6P con Android 6.01: 17 milisegundos.
- Nexus 5X con Android 6.01: 17 milisegundos.
- Samsung Galaxy S6 con Android 6.01: 38 milisegundos.
- OnePlus 3 con Android 6.01: 13 milisegundos.
- iPhone 6 (no pone la versión de iOS): 9 milisegundos.
Están tomados los datos de latencia más bajos y sólo de salida: a éstos habría que sumarles el tiempo de procesado y la latencia provocada por la captura de audio. Además, hay que tener en cuenta que las pruebas se realizan en el entorno nativo del teléfono: sería posible reducirlo optimizando al máximo todo el proceso y utilizando software dedicado, como el de Superpowered.
Para la cancelación de ruido en Android la aplicación debería actuar en 3 pasos:
- Captar el sonido ambiente.
- Procesar dicho sonido.
- Emitir el resultado del proceso.
Unos auriculares con cancelación de ruido disponen de hardware dedicado exclusivamente a esa función. Son efectivos con sonidos de frecuencia baja y media, reduciéndose su capacidad para eliminar ruido conforme la frecuencia aumenta (sonidos agudos). Para reducir un sonido de 4 kHz en 10 decibelios la latencia máxima debería ser 4.2 segundos. Para 20 decibelios harían falta 0,4 milisegundos. Está muy bien explicado en este hilo de Slashdot.
Se necesitaría una latencia muy baja para obtener una cancelación de ruido por software que resulte efectiva (sobre todo con los sonidos de alta frecuencia). Según los modelos más completos del mercado, los Bose QC25 eliminan unos 21 decibelios; los Sony h.ear unos 17 db (he tomado los datos de Wall Street Journal). Hay que tener en cuenta que el entorno de la prueba es un avión, recinto en el que predominan las frecuencias bajas y medias.
La cancelación de ruido explicada
Ya hicimos un post extenso sobre cómo funciona la cancelación de ruido en los auriculares con esta opción, pero dejaré una breve explicación para que quede en contexto. No obstante, puedes ampliar la información a través del siguiente link.
Los auriculares con cancelación de ruido disponen de micrófonos con los que captan el sonido ambiente. El proceso para cancelar los ruidos constantes del exterior es el siguiente:
- Un procesador analiza los sonidos que provienen del exterior de los auriculares (a través de los micrófonos).
- Identificando el sonido constante y predecible, el procesador genera ondas iguales al ruido, pero opuestas en fase.
- Igual que si tiramos una piedra en cada lado de un estanque y las ondas terminan anulándose en el centro, el ruido ambiente también se anula quedando sólo la música.
- El dueño de los auriculares sólo percibe la música dado que la cancelación de ruido se ocupa de filtrar el ambiente exterior.
- Este sistema funciona sólo con los sonidos constantes y predecibles, como el motor de un avión o la muchedumbre. Cuando se producen ruidos súbitos el sistema no será capaz de anularlos, por lo que se escucharán a través de la música.
Escuchar música mediante auriculares con cancelación de ruido es una experiencia interesante. Dependiendo de la calidad y potencia del sistema de cancelación se escucha más o menos ambiente, pero siempre hay un contraste alto entre activar o no la función. Como si de repente fueras la única persona de la estancia.
Distancia entre los micrófonos y las orejas
Además de la latencia, que es un muro insalvable en Android, hay otro problema añadido: los micrófonos que captan el ruido han de estar lo más cerca posible de las orejas.
El sonido se desplaza por el aire manteniendo el ángulo de la fuente. Y no suena con la misma potencia a dos distancias distintas, por más que estén separadas por unos centímetros. Esto implica que las ondas de fase opuesta tienen que generarse teniendo en cuenta la posición del oído, que es quien capta los sonidos.
Los micrófonos deben estar en el mismo sitio que las orejas, que recibirán la música sin el ruido ambiente
Como una aplicación obtendría el ruido a cancelar de los micrófonos del móvil, lo único viable sería llevar dicho móvil en la oreja para que así captase el audio en el ángulo y volumen necesario. Bueno, más bien un móvil en sendas orejas: dada su posición, el ambiente llega de manera distinta a cada una.
Ésta es la razón por la que todos los auriculares con cancelación de ruido poseen un micrófono en cada auricular: se encargan de generar el sonido de cancelación para la posición exacta donde debe emitirse, los oídos.
Seguiremos soñando con una app de cancelación de ruido
Confieso que es algo que siempre me he preguntado: ¿por qué no hay una aplicación que emule el funcionamiento de unos auriculares con cancelación de ruido si el móvil tiene todo lo necesario para hacerlo? Auriculares, salida de audio y chips capaces de procesar los sonidos. ¿Qué más necesita? Dispositivos con una latencia de sonido aceptable y resolver la posición de los micrófonos. Con lo simple que parece…