Path: blob/master/site/es-419/hub/tutorials/spice.ipynb
25118 views
Copyright 2020 The TensorFlow Hub Authors.
Licensed under the Apache License, Version 2.0 (the "License");
Detección de tono con SPICE
En este Colab, le mostraremos cómo usar el modelo SPICE que se descarga de TensorFlow Hub.
El archivo de entrada de audio
Ahora la parte más difícil: ¡Graba tu canto! 😃
Proporcionamos cuatro métodos para obtener un archivo de audio:
Grabar el audio directamente en Colab
Cargar desde su computadora
Usar un archivo guardado en Google Drive
Descargar el archivo desde Internet
Elija uno de los cuatro métodos siguientes.
Preparar los datos de audio
Ahora que tenemos el audio, lo convertiremos en el formato requerido y luego los escucharemos.
La entrada del modelo SPICE debe ser un archivo de audio a una frecuencia de muestreo de 16 kHz y con un solo canal (mono).
Para ayudarle con esta parte, creamos una función (convert_audio_for_model
) para convertir cualquier archivo wav que tenga al formato que requiere el modelo:
Primero lo primero, veamos la forma de onda de nuestro canto.
Una visualización más informativa es el espectrograma, que muestra las frecuencias presentes a lo largo del tiempo.
Aquí usamos una escala de frecuencia logarítmica para que el canto sea más claramente visible.
Ahora se necesita una última conversión. Las muestras de audio están en formato int16. y debemos normalizarlas en floats de entre -1 y 1.
Ejecutar el modelo
Ahora la parte fácil, carguemos el modelo con TensorFlow Hub e ingresemos el audio. SPICE nos dará dos salidas: tono e incertidumbre.
TensorFlow Hub es una biblioteca para la publicación, descubrimiento y consumo de partes reutilizables de modelos de aprendizaje automático. Facilita el uso del aprendizaje automático para resolver sus desafíos.
Para cargar el modelo solo se necesita el módulo Hub y la URL que apunta al modelo:
Nota: Un detalle interesante a destacar es que todas las URL del modelo de Hub se pueden usar para descargar y también para leer la documentación, por lo que si apunta su navegador a ese enlace, puede leer la documentación sobre cómo usar el modelo y aprender más sobre cómo fue entrenado.
Una vez que se carga el modelo y se preparan los datos, necesitamos 3 líneas para obtener el resultado:
Para que los resultados sean más fáciles de entender, eliminaremos todas las estimaciones de tono con confianza baja (confianza < 0,9) y trazaremos las restantes.
Los valores de tono que devuelve SPICE están en el rango de 0 a 1. Los convertiremos en valores de tono absoluto en Hz.
Ahora, veamos qué tan buena es la predicción: vamos a superponer los tonos predichos sobre el espectrograma original. Para que las predicciones de tono sean más visibles, cambiamos el espectrograma a blanco y negro.
Convertir a notas musicales
Ahora que tenemos los valores de tono, ¡vamos a convertirlos en notas! Esta parte sí que es un desafío. Tenemos que tener en cuenta dos cosas:
las pausas (cuando no hay canto)
el tamaño de cada nota (desplazamientos)
1: Agregar ceros a la salida para indicar los momentos sin canto
2: Agregar desplazamientos de notas
Cuando una persona canta libremente, la melodía puede tener un desplazamiento de los valores de tono absoluto que las notas pueden representar. Por lo tanto, para convertir predicciones en notas, es necesario corregir este posible desplazamiento. Esto es lo que calcula el siguiente código.
Ahora podemos usar algunas heurísticas para intentar estimar la secuencia más probable de notas cantadas. El desplazamiento ideal calculado anteriormente es un ingrediente, pero también necesitamos conocer la velocidad (¿cuántas predicciones forman, por ejemplo, un octavo?) y el desplazamiento de tiempo para comenzar a cuantificar. Para simplificar, probaremos diferentes velocidades y desplazamientos de tiempo y mediremos el error de cuantificación. Finalmente, usaremos los valores que minimicen este error.
¡Ahora escribamos las notas cuantificadas como partituras!
Para eso usaremos dos bibliotecas: music21 y Open Sheet Music Display
Nota: para simplificar, asumimos aquí que todas las notas tienen la misma duración (una blanca).
Convirtamos las notas musicales a un archivo MIDI y escuchémoslo.
Para crear este archivo, podemos usar la secuencia que creamos antes.
Para escucharlo en Colab, necesitamos volver a convertirlo a wav. Una forma sencilla de hacerlo es con Timidity.
Y finalmente, escuche el audio; creado a partir de notas, creado vía MIDI a partir de los tonos predichos, inferidos por el modelo.