studio programacion móviles desarrollo curso aplicaciones php python audio signal-processing audio-processing

php - móviles - manual de programacion android pdf



Reconocimiento de música y procesamiento de señal (9)

Quiero construir algo similar a Tunatic o Midomi (pruébelos si no estás seguro de lo que hacen) y me pregunto qué algoritmos tendría que usar; La idea que tengo sobre el funcionamiento de tales aplicaciones es algo como esto:

  1. tener una gran base de datos con varias canciones
  2. para cada canción en 1. reduzca la calidad / velocidad de bits (a 64 kbps por ejemplo) y calcule el sonido "hash"
  3. tener el sonido / extracto de la música que desea identificar
  4. para la canción en 3. reduzca la calidad / velocidad de bits (nuevamente a 64 kbps) y calcule el sonido "hash"
  5. si 4. el hash de sonido está en alguno de los 2. hash de sonido devuelve la música coincidente

Pensé en reducir la calidad / velocidad de bits debido a los ruidos del entorno y las diferencias de codificación.

¿Estoy en el camino correcto aquí? ¿Alguien puede proporcionarme documentación específica o ejemplos ? Midori parece reconocer incluso los hum''s , ¡eso es asombrosamente impresionante! ¿Cómo lo hacen?

¿Existen hashes de sonido o es algo que acabo de inventar? Si lo hacen, ¿cómo puedo calcularlos? Y, lo que es más importante, ¿cómo puedo comprobar si child-hash está en father-hash ?

¿Cómo voy a construir un sistema similar con Python (tal vez un módulo integrado) o PHP ?

Algunos ejemplos (preferiblemente en Python o PHP) serán muy apreciados. ¡Gracias por adelantado!


Ha pasado un tiempo desde la última vez que procesé la señal, pero en lugar de reducir la resolución, debe observar las representaciones de dominio de frecuencia (por ejemplo, FFT o DCT). Entonces podrías hacer una especie de hash y buscar la canción de la base de datos con esa secuencia.

La parte complicada es hacer que esta búsqueda sea rápida (tal vez algunos documentos sobre la búsqueda de genes puedan ser de interés). Sospecho que iTunes también detecta algunos instrumentos para reducir la búsqueda.


Leí un artículo sobre el método en el que lo hace un determinado servicio de recuperación de información de música (sin nombres), calculando la transformada de Fourier a corto plazo sobre la muestra de audio. El algoritmo luego selecciona ''picos'' en el dominio de frecuencia, es decir, posiciones de tiempo y frecuencias que son particularmente de gran amplitud, y usa el tiempo y la frecuencia de estos picos para generar un hash. Resulta que el hash tiene pocas colisiones sorprendentes entre diferentes muestras, y también se levanta contra aproximadamente el 50% de pérdida de datos de la información máxima .....


MFCC extraído de la música es muy útil para encontrar la similitud timbrel entre canciones. Esto se usa con mayor frecuencia para encontrar canciones similares. Como señala Darren, Marsyas es una herramienta que se puede usar para extraer MFCC y encontrar canciones similares convirtiendo el MFCC en una representación vectorial única.

Además de MFCC, Rhythm también se usa para encontrar la similitud de la canción. Hay pocos artículos presentados en el Mirex 2009.

que le dará una buena visión general de los diferentes algoritmos y características que son más útiles para detectar la similitud de la música.


Trabajé en la periferia de un marco genial que implementa varias técnicas de recuperación de información musical. Apenas soy un experto (edit: de hecho, no estoy cerca de un experto, solo para aclarar), pero puedo decir que la Transformada rápida de Fourier se usa en todas partes con estas cosas. El análisis de Fourier es raro, pero su aplicación es bastante directa. Básicamente, puede obtener mucha información sobre el audio cuando lo analiza en el dominio de la frecuencia en lugar del dominio del tiempo. Esto es lo que el análisis de Fourier le brinda.

Eso puede ser un poco fuera de tema de lo que quieres hacer. En cualquier caso, hay algunas herramientas geniales en el proyecto para jugar, así como ver el código fuente de la biblioteca principal en sí: http://marsyas.sness.net


Investigo en recuperación de información de música (MIR). El documento seminal sobre huellas dactilares de música es el de Haitsma y Kalker alrededor de 2002-03. Google debería conseguirte.

Leí un libro blanco temprano (muy temprano, antes de 2000) sobre el método de Shazam. En ese punto, básicamente detectaron picos espectrotemporales y luego modificaron los picos. Estoy seguro de que ese procedimiento ha evolucionado.

Ambos métodos abordan la similitud de la música en el nivel de la señal, es decir, es robusta a las distorsiones del entorno. No creo que funcione bien para consulta por zumbido (QBH). Sin embargo, ese es un problema diferente (aunque relacionado) con soluciones diferentes (aunque relacionadas), por lo que puede encontrar soluciones en la literatura. (Demasiados para nombrar aquí).

Los procedimientos de ISMIR están disponibles de forma gratuita en línea. Puedes encontrar cosas valiosas allí: http://www.ismir.net/

Estoy de acuerdo con el uso de una biblioteca existente como Marsyas. Depende de lo que quieras. Numpy / Scipy es indispensable aquí, creo. Se pueden escribir cosas simples en Python por su cuenta. Diablos, si necesita cosas como STFT, MFCC, puedo enviarle un código por correo electrónico.


Actualmente estoy desarrollando un motor de búsqueda de música con ActionScript 3. La idea es analizar los acordes primero y marcar los fotogramas (está limitado a los archivos mp3 en este momento) donde la frecuencia cambia drásticamente (cambios de melodía e ignorando los ruidos). Después de eso, hago lo mismo con el sonido de entrada y comparo los resultados con los archivos invertidos. El que coincida determina la canción coincidente.

Para el método de Axel, creo que no debe preocuparse por la consulta, ya sea que se trate de un canto o simplemente de un zumbido, ya que no implementa un programa de reconocimiento de voz. Pero tengo curiosidad acerca de su método que usa funciones hash. ¿Podrías explicarme eso?


Hace poco porté mi sistema de huellas dactilares basado en puntos de referencia de audio a Python:

https://github.com/dpwe/audfprint

Puede reconocer extractos pequeños (5-10 segundos) de una base de datos de referencia de 10 de miles de pistas, y es bastante robusto para el ruido y las distorsiones de los canales. Utiliza combinaciones de picos espectrales locales, similares al sistema Shazam.

Esto solo puede coincidir exactamente con la misma pista, ya que depende de detalles precisos de frecuencias y diferencias de tiempo, incluso no coincide con diferentes tomas, ciertamente no cubre versiones o zumbidos. Por lo que yo entiendo, Midomi / SoundHound funciona haciendo coincidir los zumbidos entre sí (por ejemplo, a través del time-warming dinámico ), y luego tiene un conjunto de enlaces curados por humanos entre los conjuntos de zumbidos y la pista musical deseada.

Hacer coincidir un zumbido directamente con una pista de música ("Consultar por zumbido") es un problema de investigación en curso en la recuperación de información de música, pero todavía es bastante difícil. Puede ver los resúmenes de un conjunto de sistemas evaluados el año pasado en los resultados MIREX 2013 QBSH .


Para la función de consulta por zumbido, es más complicado que la solución de huellas dactilares de audio, lo difícil proviene de:

  • ¿Cómo recopilar eficientemente la base de datos de melodías en la aplicación del mundo real? muchos sistemas de demostración usan midi para desarrollarse, pero el costo de la solución de midi es extremadamente no asequible para una empresa.
  • cómo lidiar con la variación de tiempo, por ejemplo, el zumbido del usuario puede ser rápido o lento. usar DTW? sí, DTW es una muy buena solución para lidiar con series de tiempo con variación de tiempo, PERO cuesta demasiada carga de CPU.
  • cómo hacer un índice de series de tiempo?

Aquí hay una consulta de demostración tarareando el proyecto de código abierto, https://github.com/EmilioMolina/QueryBySingingHumming , podría ser una referencia.


El proyecto MusicBrainz mantiene dicha base de datos. Puede realizar consultas basadas en una huella digital.

El proyecto existe desde hace un tiempo y ha utilizado diferentes huellas dactilares en el pasado. Mira aquí para una lista.

La última huella dactilar que están usando es AcoustId . Existe la biblioteca Chromaprint (también con enlaces de Python) donde puede crear tales huellas dactilares. Debe alimentarlo con datos de PCM sin formato.

Recientemente escribí una biblioteca en Python que hace la decodificación (usando FFmpeg) y proporciona funciones para generar la huella digital AcoustId (usando Chromaprint) y otras cosas (también para reproducir la transmisión a través de PortAudio). Mira aquí .