audio - Algoritmo de reconocimiento de acordes de guitarra
signal-processing pitch-tracking (5)
¿Cuál es un buen algoritmo de procesamiento de señal digital que es bueno para los acordes de guitarra? Desde Fast Fourier Transform creo que solo es preciso en notas individuales tocadas en la guitarra pero no en notas que se tocan simultáneamente (es decir, acordes).
¡Gracias!
Bueno, puedes probar otro conjunto de algoritmos para dominio de frecuencia, como wavelets. Pero no estoy seguro si eso servirá para su problema de precisión. En realidad, no entendí de qué manera estás teniendo problemas con la FFT. Siempre será una aproximación del acorde, no hay una manera perfecta de recuperar ese tipo de información sobre el sonido.
Entonces, depende del análisis que haga en ese espectro, con notas individuales, en realidad hay muchos algoritmos mejores que la FFT, pero con acordes probablemente deba trabajar con FFT.
El problema que tendrá que tratar es dividir los armónicos fundamentales de los armónicos superiores, una cosa que puede ayudar es considerar las frecuencias que están en el rango de la guitarra. Si solo tiene que trabajar con sonidos de guitarra, debe dedicar un tiempo a estudiar el gráfico de dominio de frecuencia normal de la guitarra e intentar usarlo para mejorar su precisión.
Existen algunas herramientas razonablemente exitosas que usan DFT (FFT), pero procesan mucho después de calcular el DFT.
Pruebe este enlace para obtener un resumen del estado actual de la técnica, o google "Chordino" o "Chordata" para los algoritmos de extracción de acordes de código abierto.
Hay un contest entre científicos en el que las personas intentan analizar diferentes parámetros de la música. Una de las secciones de este concurso es el reconocimiento de acordes. Este concurso es público, por lo que cualquier persona puede participar y mostrar los resultados en este ámbito. Los resultados del año 2011 se publican here .
Un amigo mío ha logrado buenos resultados en esta esfera (y también en este concurso). Puedes leer sobre su enfoque en su webpage .
La FFT puede y le dará todos los tonos individuales si configura el software correctamente. El objetivo de la FFT es discriminar los tonos, o si eres un astrofísico, quieres conocer los elementos individuales (sulpher, hidrógeno ...) que están en la luz que sale de la estrella.
Los armónicos no son un problema porque tienen menos ''potencia'' que la frecuencia fundamental, por ejemplo, C = 440 Hz, pero C = 880 Hz también, pero 880 será el pico más pequeño en los resultados de FFT.
La respuesta corta es que necesitas mucho más que un algoritmo. Los buenos métodos de reconocimiento de acordes podrían describirse mejor como "sistemas", pero normalmente se basan en una transformación inicial al dominio de la frecuencia (más a menudo DFT).
Si quieres un acorde de acorde de la canción similar a este
C G Am F7 F6 C ...
entonces esto es en realidad un problema que se elimina un poco del reconocimiento de las notas en una pieza de audio. De hecho, hay dos problemas (más o menos):
- encontrar qué lanzamientos están presentes en cualquier momento
- agrupando estos tonos a lo largo del tiempo para poder asignar una etiqueta de acorde a un intervalo de tiempo.
Resulta que la forma en que se transforma desde el dominio del tiempo (audio normal) al dominio de la frecuencia (representación espectral) es solo de importancia limitada. Es muy importante lo que haces después, y con frecuencia se usan modelos probabilísticos sofisticados (similares a los que se usan en reconocimiento de voz: HMM, DBN, ...) para abordar este problema.
Pruebe la "transcripción de acordes" de google scholar, o "detección de acordes", o "etiquetado de acordes" para realizar investigaciones avanzadas en esta área.
La mayoría de estos enfoques utilizan una transformada discreta de Fourier (DFT) para crear el espectrograma inicial. Durante el procesamiento posterior, también tienden a diferir solo ligeramente, aunque se han utilizado diferentes técnicas de suavizado de series de tiempo: modelos de Markov ocultos, redes bayesianas dinámicas, máquinas de vectores de soporte (SVMstruct) y campos aleatorios condicionales, entre otros. Los transcriptores más avanzados usan sintonización automática, información clave, información de notas graves e información de la posición métrica para mejorar los resultados. Mi thesis (Capítulo 2) ofrece una buena visión general.
Algoritmos de detección de acordes de código abierto:
- Chordino en http://isophonics.net/nnls-chroma
- Chordata en http://clam-project.org/
- Reconocimiento de acordes LabROSA http://labrosa.ee.columbia.edu/projects/chords/
Espero que esto ayude.