2010-01-14 16 views
13

Quiero construir algo similar a Tunatic o Midomi (probarlos si no está seguro de lo que hacen) y me pregunto qué algoritmos que tendría que utilizar; La idea que tengo sobre el funcionamiento de este tipo de aplicaciones es algo como esto:reconocimiento de música y Procesamiento de Señales

  1. tienen una gran base de datos con varias canciones
  2. para cada canción 1. reducir la calidad/velocidad de bits (64 kbps por ejemplo) y calcular el sonido "almohadilla"
  3. tienen el sonido/extracto de la música que desea identificar
  4. para la canción en 3. reducir/velocidad de bits de calidad (de nuevo a 64 kbps) y calcular sonido "de hash "
  5. si 4. hash de sonido se encuentra en cualquiera de las 2. hashes de sonido devolver la música emparejado

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

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

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

¿Cómo voy a ir sobre construyendo un sistema similar con Python (tal vez un módulo incorporado) o PHP?

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

+1

Preguntas relacionadas: [Biblioteca/código de reconocimiento de muestra de sonido] (http://stackoverflow.com/questions/2817663/sound-sample-recognition-library-code), [huella digital de huella digital opensource?] (Http: // stackoverflow .com/questions/2462410/acoustic-fingerprint-opensource). Buena [descripción general de wiki de MusicBrainz] (http://wiki.musicbrainz.org/Fingerprinting). – Albert

+0

Aquí hay una excelente opción para Python: https://github.com/worldveil/dejavu – lollercoaster

Respuesta

10

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 central en sí: http://marsyas.sness.net

+0

¿Cómo puedo detectar si alguien silba al micrófono de iPhone ...? – iDeveloper

1

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

La parte complicada es hacer esta búsqueda rápidamente (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.

3

MFCC extraído de la música es muy útil para encontrar la similitud timbrel entre canciones ... esto se usa con más frecuencia para encontrar canciones similares. Como señaló Darren, Marsyas es una herramienta que se puede utilizar 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 documentos presentados en el Mirex 2009

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

+0

+1 para el MFCC – keyboardP

1

He leído un artículo sobre el método en el que un determinado servicio de recuperación de información de música (sin nombres mencionados) lo hace - calculando la transformada de Fourier a tiempo corto sobre la muestra de audio. Luego, el algoritmo 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 sorprendentes pocas colisiones entre diferentes muestras, y también se levanta contra aproximadamente el 50% de pérdida de datos de la información máxima .....

11

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. Puede 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.

+1

Sabía que olvidé algo: la similitud en el nivel de nota a menudo se logra al calcular un cromagrama. Para cada marco de tiempo, calcula la cantidad de C, C#, D, D #, ..., A #, B en la señal. Por lo tanto, el cromagrama tiene una dimensión de 12 por tiempo. Muchos métodos de similitud usan esto. –

+0

Gracias por su aporte. ¿Podrías enviarme el código por correo electrónico? Me está costando mucho trabajo descubrir esto, algún código de ejemplo sería útil. –

+0

@Steve Tjoa ¿es posible detectar el sonido Whistle ..? – iDeveloper

1

Actualmente estoy desarrollando un motor de búsqueda de música con ActionScript 3. La idea es analizar los acordes primero y marcar los marcos (está limitado a archivos mp3 en este momento) donde la frecuencia cambia drásticamente (cambios de melodía e ignorando 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 pregunta si se trata de un canto o simplemente 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?

1

El MusicBrainz project 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. Consulte here para obtener 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 PCM brutos.

Recientemente he escrito 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). Ver here.

4

Recientemente he portado mi sistema de huellas digitales de audio basados ​​en hito a Python:

https://github.com/dpwe/audfprint

Se puede reconocer pequeños (5-10 seg) extractos de una base de datos de referencia de los 10s de miles de pistas, y es bastante robusto para el ruido y las distorsiones del canal. 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 las frecuencias y las diferencias de tiempo, incluso no coincidiría con diferentes tomas, ciertamente no con versiones de cobertura o zumbidos. Por lo que yo entiendo, Midomi/SoundHound funciona haciendo coincidir los zumbidos entre sí (por ejemplo, a través de dynamic time warping), 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 ("Consulta por zumbido") es un problema de investigación en curso en la recuperación de información de música, pero sigue siendo bastante difícil. Puede ver los resúmenes de un conjunto de sistemas evaluados el año pasado en el MIREX 2013 QBSH Results.

0

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

  • cómo recoger eficazmente la base de datos de la melodía en la aplicación en el 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 el índice de series temporales?

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

Cuestiones relacionadas