2010-12-02 15 views
28

Estoy desarrollando un software que depende de la detección de acordes musicales. Conozco algunos algoritmos para la detección de tono, con técnicas basadas en el análisis cepstral o la autocorrelación, pero se centran principalmente en el reconocimiento de material monofónico. Pero necesito trabajar con cierto reconocimiento polifónico, es decir, múltiples tonos al mismo tiempo, como en un acorde; ¿Alguien sabe algunos buenos estudios o soluciones en ese asunto?Algoritmos de detección de acordes?

Actualmente estoy desarrollando algunos algoritmos basados ​​en la FFT, pero si alguien tiene una idea sobre algunos algoritmos o técnicas que puedo usar, sería de gran ayuda.

+7

Esto suena realmente difícil. Después de elegir el fundamental, no estoy seguro de cómo podrá distinguir las otras notas de los armónicos. Tal vez en algunos casos simples, podría ir a buscar dónde estaría el tercero menor o mayor (o 7º, etc.), pero considerando las inversiones de acordes y todo eso, ni siquiera se garantiza que la raíz más baja sea la frecuencia más baja. El quinto del acorde está relacionado con el tercer armónico, etc ... Tal vez después de encontrar las notas fundamentales y otras notas que * no son * armónicos simples, podrías tener algún tipo de coincidencia de patrón para reconocer acordes comunes. – xscott

+0

Ya implementado aquí: https://github.com/adamstark/Chord-Detector-and-Chromagram – relascope

Respuesta

11

Este es un buen proyecto bastante Open Source: https://patterns.enm.bris.ac.uk/hpa-software-package

Detecta acordes basados ​​en una chromagram - una buena solución, se rompe una ventana de todo el espectro en una serie de clases de la echada (tamaño: 12) con valores flotantes. Entonces, los acordes pueden ser detectados por un Modelo de Markov Oculto.

.. debería proporcionarle todo lo que necesita. :)

+0

¡Esa es una gran respuesta! Ya encontré este proyecto (es una vieja pregunta que no he vuelto a consultar, pero tu respuesta sería la mejor) y se la recomiendo a cualquiera que busque esto. – Nemeth

+0

El enlace que ha publicado en el software no funciona. ¿Puedes actualizarlo? Gracias. – OmK

12

El autor de Capo, un programa de transcripción para la Mac, tiene un blog bastante profundo. La entrada "A Note on Auto Tabbing" tiene algunas buenas saltando de puntos:

empecé a investigar los diferentes métodos de transcripción automática a mediados de 2009, porque tenía curiosidad acerca de hasta qué punto a lo largo de esta tecnología era, y si podrían integrarse en un futuro versión de Capo.

Cada uno de estos algoritmos de transcripción automática comienza con algún tipo de representación intermedia de los datos de audio, y luego transfieren eso a una forma simbólica (es decir, inicios de nota y duraciones).

Aquí es donde encontré algunas representaciones espectrales costosas (la Transformada Wavelet Continua (CWT), la Transformada Q Constante (CQT) y otras). Implementé todas estas transformaciones espectrales para que también pudiera implementar los algoritmos presentados por los papeles que estaba leyendo. Esto me daría una idea de si funcionarían en la práctica.

Capo tiene algunos impressive technology. La característica sobresaliente es que su vista principal no es un espectrograma de frecuencia como la mayoría de los otros programas de audio. Presenta el audio como un piano roll, con las notas visibles a simple vista.

http://supermegaultragroovy.com/products/Capo/img/screen1_sm-nq8.png

(Nota: Las barras de notas duras fueron dibujados por un usuario Las manchas difusas debajo son lo Capo muestra..)

4

Este es un problema de coincidencia de patrones muy difícil, probablemente adecuado para una IA técnica como entrenar redes neuronales o algoritmos genéticos.

Básicamente, en cada punto del tiempo, adivina el número de notas que se tocan, las notas, los instrumentos que tocaron las notas, las amplitudes y la duración de la nota. Luego suma las magnitudes de todos los armónicos y armónicos que generarían todos esos instrumentos cuando se tocan en ese volumen en ese punto de su envolvente (ataque, decaimiento, etc.). Reste la suma de todos esos armónicos del espectro de su señal, luego minimice la diferencia sobre todas las posibilidades. Reconocimiento de patrones del ruido transitorio de golpe/chirrido/desplume/etc. al comienzo mismo de la nota también podría ser importante. Luego, haga un análisis de decisión para asegurarse de que sus elecciones tengan sentido (por ejemplo, un clarinete no se transforma repentinamente en una trompeta tocando otra nota y viceversa 80 ms más tarde), para minimizar la probabilidad de error.

Si puede restringir sus elecciones (por ejemplo, solo 2 flautas que tocan solo negras, etc.), especialmente en instrumentos con energía de armónicos muy limitada, hace que el problema sea mucho más fácil.

+0

Muchas gracias. Es una gran respuesta, y realmente me hizo pensar. Muestra algo de luz sobre cosas que aún no he pensado sobre eso. – Nemeth

5

Véase mi respuesta a esta pregunta: How can I do real-time pitch detection in .Net?

La referencia a este documento IEEE es sobre todo lo que está buscando: http://ieeexplore.ieee.org/Xplore/login.jsp?reload=true&url=/iel5/89/18967/00876309.pdf?arnumber=876309

Los armónicos que están tirando fuera. Además, los humanos pueden encontrar fundamentos en el sonido incluso cuando el fundamental no está presente. Piense en leer, pero cubriendo la mitad de las letras. El cerebro llena los huecos.

El contexto de otros sonidos en la mezcla, y lo que vino antes, es muy importante para la forma en que percibimos las notas.

+0

Sí, tienes razón, muchos problemas en asuntos psicoacústicos ... ¡Gracias por el papel! – Nemeth

7

Existe una superposición significativa entre la detección de acordes y la detección de teclas, por lo que puede resultarle útil algunas de mis preguntas sobre previous answer, ya que tiene algunos enlaces a documentos y tesis. Obtener un buen reconocedor polifónico es increíblemente difícil.

Mi punto de vista sobre esto es que la aplicación de reconocimiento polifónico para extraer las notas y luego tratar de detectar los acordes de las notas es la forma incorrecta de hacerlo. La razón es que es un problema ambiguo. Si tiene dos tonos complejos exactamente separados por una octava, es imposible detectar si hay una o dos notas ejecutándose (a menos que tenga un contexto adicional, como conocer el perfil armónico). Cada armónico de C5 es también un armónico de C4 (y de C3, C2, etc.). Entonces, si prueba un acorde mayor en un reconocedor polifónico, es probable que obtenga una secuencia completa de notas que están relacionadas armónicamente con su acorde, pero no necesariamente con las notas que tocó. Si usa un método de detección de tono basado en la autocorrelación, verá este efecto con bastante claridad.

En su lugar, creo que es mejor buscar los patrones que están hechos por ciertas formas de acordes (mayor, menor, séptimo, etc.).

+0

Intentar reconocer acordes puede ser más fácil en algunos aspectos que el problema general de tratar de reconocer tonos, ya que al menos para tríadas y séptimos acordes no importará demasiado en qué octavas están las distintas notas. En acordes que no están aumentados ni disminuido, si hay un tono que parece tener un tercer armónico mucho más fuerte que cualquier otro, es muy probable que el tono sea la raíz (y una gran parte del "tercer armónico" es el quinto). Si no hay un tono con un tercer armónico fuerte, el quinto del acorde probablemente sea un quinto más arriba o un cuarto debajo de la raíz. – supercat

+0

Acepto que la detección de acordes puede ser más fácil siempre que solo intente detectar el carácter general del acorde (por ejemplo, "Cm7") en lugar de detectar la inversión exacta. El acorde más simple de todos (C + C) es uno de los más difíciles de detectar. –

2

Este post es un poco viejo, pero pensé que me gustaría añadir el siguiente documento para la discusión:

Klapuri, Anssi; Análisis multipunto de música polifónica y señales de voz usando un modelo auditivo; TRANSACCIONES IEEE EN PROCESO DE AUDIO, HABLA Y LENGUAJE, VOL. 16, NO.2, Febrero 2008 255

El papel actúa un poco como un revisión de la literatura de análisis Multipitch y discute un método basado en un modelo auditivo:.

enter image description here

(La imagen es del papel I don 't saber si tengo que obtener permiso para publicarlo.)

+0

Nunca es demasiado tarde para obtener más información. – Danijel

+0

¡Gracias por agregar este artículo! – Nemeth