2011-11-27 18 views
6

Estoy creando un programa de detección de tono que extrae la frecuencia fundamental del espectro de potencia obtenido de la FFT de un cuadro. Esto es lo que tengo hasta ahora:Detección de tono FFT - Extracción de melodía

  • divide la señal de entrada de audio en marcos.
  • marco se multiplican con una ventana de Hamming
  • calcular la FFT y la magnitud de la raíz cuadrada del marco (real^2 + img^2)
  • encontrar la frecuencia fundamental (pico) por el espectro de productos armónica
  • convertir la frecuencia del pico (frecuencia bin) observar (por ejemplo, ~ 440 Hz es A4)

Ahora el programa produce un número entero con valor de 0 a 87 para cada trama. Cada número entero corresponde a una nota de piano según una fórmula que encontré here. Ahora trato de imitar las melodías en la señal de entrada al sintetizar sonidos basados ​​en las notas calculadas. Intenté simplemente generar una onda senoidal con magnitud y frecuencia correspondientes a la frecuencia fundamental, pero el resultado no sonaba como el sonido original (casi sonaba como un bip aleatorio).

Realmente no entiendo la música, por lo que en función de lo que tengo, ¿puedo generar un sonido con melodías similares a la entrada (instrumento, voz, instrumento + voz) según la información que obtengo de la frecuencia fundamental? Si no, ¿qué otras ideas puedo probar usando el código que tengo actualmente?

Gracias!

+0

Puede que le interese saber que su proceso básico de "encontrar la parte importante del sonido e ignorar las partes que no puede escuchar" (que modela como FFT + detección de picos) es la base de la codificación MP3. Obviamente, su idea de "la parte importante" es mucho más elegante. –

Respuesta

3

Su método podría funcionar para la música sintética utilizando notas sincronizadas para ajustarse a la duración y longitud de su cuadro fft, y utilizando únicamente sonidos de notas cuyo espectro completo sea compatible con su estimador de tono HPS. Nada de eso es cierto para la música común.

Para el caso más general, la transcripción automática de música todavía parece ser un problema de investigación, sin una solución simple de 5 pasos. El tono es un fenómeno psicoacústico humano. La gente escuchará notas que pueden estar o no presentes en el espectro local. El algoritmo de estimación de tono de HPS es mucho más confiable que usar el pico de FFT, pero aún puede fallar para muchos tipos de sonidos musicales. Además, la FFT de cualquier cuadro que atraviesa límites de nota o transitorios puede no contener un solo tono claro para estimar.

3

Probablemente no querrá estar seleccionando picos de una FFT para calcular el tono. Probablemente quiera usar la autocorrelación. Escribí una respuesta larga a una pregunta muy similar aquí: Cepstral Analysis for pitch detection

4

Depende en gran medida del contenido musical con el que desee trabajar: extraer el tono de una grabación monofónica (es decir, un solo instrumento o voz) no es lo mismo que extraer el tono de un solo instrumento de una mezcla polifónica (por ejemplo, extraer el tono de la melodía de una grabación polifónica).

Para la extracción de tono monofónico, hay varios algoritmos que podría intentar implementar tanto en el dominio de tiempo como en el dominio de frecuencia. Un par de ejemplos incluyen Yin (dominio del tiempo) y el SPH (dominio de frecuencia), enlace a más detalles sobre ambos se proporcionan en Wikipedia:

Sin embargo, ni va a funcionar bien si quieres para extraer la melodía del material polifónico.La extracción de melodía de la música polifónica sigue siendo un problema de investigación, y no hay un simple conjunto de pasos que pueda seguir. Hay algunas herramientas que hay proporcionadas por la comunidad de investigación que se puede probar (para uso no comercial sin embargo), a saber:

Como nota final, cuando se sintetizan su salida recomendaría sintetizar la curva de tono continuo que extrae (la manera más fácil de hacerlo es estimar el tono cada X ms (por ejemplo, 10) y sintetizar una onda sinusoidal que cambia de frecuencia cada 10 ms, asegurando la fase continua). Esto hará que su resultado suene mucho más natural, y evitará el error adicional que implica cuantificar una curva de tono continuo en notas discretas (que es otro problema en sí mismo).

1

Su enfoque no funcionará para cualquier ejemplo musical en general, por las siguientes razones:

  1. Música por su propia naturaleza es dinámica. Lo que significa que cada sonido presente en la música está modulado por distintos períodos de silencio, ataque, sostenimiento, decadencia y nuevamente silencio, también conocidos como la envolvente del sonido.

  2. Las notas de instrumentos musicales y las notas vocales humanas no se pueden sintetizar correctamente con un solo tono. Estas notas deben ser sintetizadas por un tono fundamental y muchos armónicos.

  3. Sin embargo, no es suficiente sintetizar el tono fundamental y los armónicos de una nota de instrumento musical o nota vocal, también se debe sintetizar la envolvente de la nota, como se describe en 1 arriba.

  4. Además, para sintetizar un pasaje melódico en la música, ya sea instrumental o vocal, uno debe sintetizar los elementos 1-3 anteriores, para cada nota del pasaje, y también se debe sintetizar el tiempo de cada nota relativa al comienzo del pasaje

  5. Extraer analíticamente instrumentos individuales o voces humanas de una grabación de mezcla final es un problema muy difícil, y su enfoque no aborda ese problema, por lo que su enfoque no puede abordar correctamente los problemas 1-4.

En definitiva, cualquier enfoque que intenta extraer una cerca de la transcripción musical perfecta de la mezcla final de una grabación musical, mediante el uso de métodos analíticos rigurosos, es en el peor, casi con toda seguridad destinada al fracaso, y en el mejor cae en el reino de la investigación avanzada.

Cómo proceder de este callejón sin salida depende de cuál es el propósito del trabajo, algo que el OP no mencionó.

¿Este trabajo se utilizará en un producto comercial, o es un proyecto de pasatiempo?

Si se trata de un trabajo comercial, se justifican varios enfoques adicionales (costosos o muy costosos), pero los detalles de esos enfoques dependen de cuáles sean los objetivos del trabajo.

Como nota de cierre, su síntesis suena como pitidos al azar debido a lo siguiente:

  1. Su detector de tono fundamental está ligada a la sincronización de los marcos de FFT rodadura, que en efecto genera un probablemente falsa fundamental tono al inicio de cada fotograma FFT rodante.

  2. ¿Por qué los tonos fundamentales detectados son probablemente falsos? Debido a que está recortando arbitrariamente la muestra musical en marcos (FFT), y por lo tanto, probablemente esté truncando muchas notas que suenan simultáneamente en algún punto medio, distorsionando así las firmas espectrales de las notas.

  3. No está tratando de sintetizar los sobres de las notas detectadas, ni puede hacerlo, porque no hay forma de obtener información de envolvente según su análisis.

  4. Por lo tanto, el resultado sintetizado es probablemente una serie de chirridos sinusoidales puros, espaciados en el tiempo por el delta-t del marco FFT rodante. Cada chirrido puede ser de una frecuencia diferente, con una magnitud de envolvente diferente, y con envolventes que son probablemente de forma rectangular.

Para ver la naturaleza compleja de las notas musicales, echar un vistazo a estas referencias:

Musical instrument spectra to 102.4 KHz

Musical instrument note spectra and their time-domain envelopes

En particular, señalan los muchos tonos puros que componen cada nota, y la forma compleja del sobre del dominio del tiempo de cada nota. El tiempo variable de notas múltiples entre sí es un aspecto esencial adicional de la música, como lo es la polifonía (voces múltiples que suenan simultáneamente) en la música típica.

Todos estos elementos de la música conspiran para hacer que el estricto enfoque analítico de la transcripción musical autónoma sea extremadamente desafiante.