No conozco los detalles del sistema de Google, pero hay dos tecnologías que son relevantes para resolver este problema, y puede utilizar ambas juntas (dependiendo de las circunstancias). De cualquier manera, lo primero que hace es Transformación de Fourier muestras cortas de lo que está escuchando. Esto le da el espectro del sonido, diciéndole cuánto de cada frecuencia está presente, y (porque tiene una secuencia de muestras) cómo eso cambia con el tiempo. Una vez que tiene esto, puede filtrar algunas bandas de tonos muy altos y bajos que no ayudan a identificar el sonido.
El resultado de esto es una colección de "cubos", donde cada cubo representa una banda de frecuencia para una fracción de segundo determinada, y el valor te dice cuánto sonido hay en ese cubo. Aquí es donde hay dos posibilidades.
Clasificador bayesiano
La posibilidad más simple es dar estos cubos a algún tipo de clasificador bayesiano pre-entrenado. Esta es una clase de algoritmos de IA que puede tomar alguna colección de características (los cubos de frecuencia/tiempo) y clasificar la situación en uno de los grupos que defina: en este caso, "habla" o "música" o "algo más". Aunque se necesita mucho datos de entrenamiento para enseñar al algoritmo cómo hacer esta clasificación, los parámetros que resultan (el algoritmo pre-entrenado) son muy compactos, por lo que es práctico incluir estos datos en la aplicación, permitiendo la clasificación fuera de línea. Si utilizas la función de reconocimiento de voz fuera de línea de Google, es de esperar que utilice este tipo de algoritmo por sí solo.
No olvides que un uso de esta característica podría ser reconocer una consulta de "OK Google" en un pub con música de fondo, por lo que la clasificación no es tan simple como "habla" o "música": tiene que decidir cuál es más fuerte o en primer plano.
Reconocimiento de la música
La otra posibilidad es tratar de encontrar una pieza musical que coincida de inmediato. El reconocimiento de música implica una gran base de datos de toda la música que quieres reconocer. Cada pieza musical ya ha sido pasada por el análisis de frecuencia, así que está indexada por los mismos cubos de frecuencia/tiempo que la aplicación ha grabado. La aplicación sólo tiene que ir a la nube para preguntar a la base de datos, "¿Tienes alguna música que tenga estos cubos?"
La parte del tiempo de los cubos sólo se calcula en relación con los cubos cercanos, así que encontrará la pieza musical sin importar qué parte de ella estés escuchando. Además, la información de los cubos se reduce con una función de hash (una función que convierte algunos números en un número más pequeño), por lo que es resistente a la pérdida de algunas frecuencias (debido a un mal sistema de sonido u otro ruido de fondo).
Esto es algo muy largo de hacer sólo para diferenciar el habla de la música, y requiere consultar los servidores de Google para hacerlo, por lo que normalmente no sería una buena opción. Sólo es una buena opción porque, si se trata de música, la aplicación tendrá que hacerlo de todos modos para reconocerla.
Resumen
Dadas las ventajas y desventajas de los dos algoritmos, esperaría que la aplicación incluyera ambos. Para el uso fuera de línea, sólo usaría el clasificador simple. Para el uso en línea, bien podría usar ambos en paralelo: usando el clasificador para dar un resultado rápido si es muy probable que la entrada sea el habla, mientras espera a que la base de datos de música en la nube intente reconocer la pieza musical en particular (o decir no).
0 votos
¿Cómo sabe que está escuchando música?
1 votos
Por muy interesante que sea esta pregunta, me temo que no hay nadie más que el propio Google que pueda responderla, a no ser que se explique en algún sitio.