2 puntos por GN⁺ 2024-11-11 | 1 comentarios | Compartir por WhatsApp
  • Audio Decomposition es un programa de código abierto que busca dividir el audio en las notas e instrumentos que lo componen para pasar la música a partitura
  • Las muestras de instrumentos se toman de la University of Iowa Electronic Music Studios instrument database, y se guarda la transformada de Fourier y la envolvente de cada forma de onda para usarlas como referencia de comparación
  • El archivo musical se analiza en intervalos de 0.1 segundos para crear un espectrograma, y se combinan las transformadas de Fourier guardadas de cada instrumento para estimar la magnitud de cada uno en ese segmento
  • El análisis de la envolvente divide las secciones de attack·sustain·release y la atenuación estática/dinámica, y luego calcula el costo por instrumento en las bandas de notas filtradas
  • En lugar de recrear el audio, el resultado se muestra como una gráfica de dispersión de matplotlib similar a una partitura, lo que facilita resolver problemas y visualizar datos dispersos

Descomposición de audio para conversión a partitura

Transformada de Fourier en intervalos de 0.1 segundos

  • Se parte de la idea de que el sonido de los instrumentos puede caracterizarse principalmente con la transformada de Fourier y la envolvente, y con esa información se estima qué instrumento toca qué nota
  • El archivo musical se procesa realizando una transformada de Fourier cada 0.1 segundos en forma de espectrograma
  • Para reproducir la transformada de Fourier de cada segmento de 0.1 segundos, se suman las transformadas de Fourier guardadas de cada instrumento
  • La magnitud por instrumento se calcula resolviendo la matriz obtenida de las derivadas parciales por frecuencia de la función de costo MSE
    • Cada fila de la matriz corresponde a la derivada parcial de cada instrumento, como cello, piano, etc.
    • El ejemplo corresponde al cálculo del costo para valores por frecuencia, como un valor de transformada de Fourier a 5Hz

Envolvente y separación de segmentos de nota

  • La envolvente es la línea superior de la forma de onda, y como las funciones existentes a veces no funcionan bien con ruido o ciertas formas de onda, se usa un método aparte
  • El cálculo divide la forma de onda en fragmentos y toma el valor máximo de cada fragmento
  • Después, se refinan los resultados agregando nuevos puntos donde la envolvente queda por debajo de la forma de onda original
  • La envolvente se divide en attack, sustain y release
    • attack: el sonido inicial de la nota
    • sustain: la sección en la que la nota se mantiene
    • release: la sección en la que la nota se apaga
  • En las muestras de instrumentos, el primer valor distinto de cero se usa como punto de inicio del attack
  • El límite entre attack y sustain se define como el primer punto donde la función se vuelve cóncava hacia abajo o decrece
  • El límite entre sustain y release se define recorriendo desde el final y encontrando el primer punto donde la función aumenta o es cóncava hacia abajo
  • El final del release se encuentra recorriendo desde el final hasta el primer punto distinto de cero

Tipos de atenuación y emparejamiento de instrumentos

  • Para distinguir las formas principales de la onda, se consideran la atenuación estática y la atenuación dinámica
  • Algunos instrumentos, como el piano, tienen una atenuación estática que suele seguir una forma de decaimiento exponencial
  • Algunos instrumentos, como el violin, pueden aumentar o disminuir su volumen incluso durante el sustain
  • Entre las muestras de instrumentos hay archivos que se mantienen hasta que el sonido desaparece naturalmente y otros que pasan a release antes de tiempo
  • Se distingue si la atenuación es estática o dinámica según si el coeficiente de atenuación es mayor que 1 o si se desvía demasiado de la curva de atenuación
  • Se determina si la envolvente tiene release, es decir, si es AS o ASR, comparando la tasa media de cambio de sustain y release
    • Si la tasa de cambio de release es menor, se considera que no hay release
  • Al procesar el archivo musical, se aplica un filtro pasa banda para cada frecuencia de nota
  • Sobre la forma de onda filtrada, se recorren los instrumentos calculando la correlación cruzada del attack y release normalizados para encontrar el inicio y final de la nota
  • Luego se calcula el MSE entre la forma de onda del instrumento y el audio filtrado, y eso se usa como costo del instrumento en ese momento
  • La magnitud final se calcula multiplicando la magnitud de la etapa de transformada de Fourier por 1 / costo de la etapa de envolvente

Visualización de resultados basada en gráfica de dispersión

  • El resultado se representa como una partitura usando una scatter plot de matplotlib con puntos en forma de -
  • Originalmente se intentó recrear el audio a partir de las magnitudes calculadas, pero hubo muchos problemas, llevaba tiempo y dificultaba la depuración
  • También se probó imshow de matplotlib, pero era muy ineficiente en una situación donde la mayoría de los valores eran 0
    • Esto se debía a que, al mover la pantalla o hacer zoom, había que volver a dibujar todos los puntos sin importar si estaban visibles o no
  • Como resultado, puede usarse para lograr una mejor reproducción de partituras, especialmente cuando es difícil encontrar el pitch o los acordes correctos
  • Como ejemplo, se usó para recrear una partitura en Noteflight a partir de un video de YouTube
  • El tiempo de ejecución tampoco es excesivamente largo

1 comentarios

 
GN⁺ 2024-11-11
Comentarios de Hacker News
  • El título es un poco confuso. Si escribes open-source separation, se puede leer como source separation, pero en realidad no es eso sino un algoritmo de detección de pitch, y luego clasifica de qué instrumento proviene el pitch detectado
    Está bastante genial, pero si de verdad necesitas resultados precisos, parece que corregir la salida podría tomar más tiempo que hacerlo a mano

    • Siendo justos con el autor, todavía está en la preparatoria: https://matthew-bird.com/about.html
      Para alguien de esa edad, el resultado es impresionante
    • Me pregunto si source separation normalmente se llama más bien stem separation, o si son conceptos distintos
      Cuando músicos intentan reconstruir desde un solo archivo de audio algo cercano a las pistas originales previas a la mezcla, o sea stems, siento que escucho más este último término
    • Creo que el guion hace que esa ambigüedad desaparezca por completo
  • No vi que lo mencionaran directamente en el artículo, pero para quien le interese, la transcripción automática de música, o sea convertir audio a MIDI, es un subcampo bastante grande dentro del deep learning y de la recuperación de información musical
    También ha habido varios modelos exitosos en transcripción musical multitrack, y está el proyecto MT3 de Google: https://research.google/pubs/mt3-multi-task-multitrack-music...
    En el caso de la transcripción de piano, ya se ha llegado a una precisión casi perfecta incluso con audio de muy baja calidad: https://github.com/EleutherAI/aria-amt
    Como referencia, soy el autor del repositorio de arriba

    • Aquí también están intentando resolver otro problema, igualmente bastante difícil. El problema de derivar una partitura precisa a partir de datos MIDI es del tipo “parece fácil pero en realidad no lo es”
      Los sistemas de transcripción audio-MIDI aciertan bien el pitch y el momento de inicio, pero la duración y la intensidad son mucho menos estables
    • Sé que las métricas reportadas de MT3 son muy buenas, pero me pregunto si al usarlo directamente también te funcionó bien: https://replicate.com/turian/multi-task-music-transcription
      Porté su Colab para usarlo más fácilmente como runtime, pero la salida MIDI era bastante rara
      Incluso metiendo stems simples, en algunas pistas la salida MIDI no coincidía bien con el audio y tenía problemas de timing al punto de ser inutilizable, aunque con otros audios sí funcionaba razonablemente bien
    • Me pregunto cómo se simplifica este problema si se limita solo al piano
  • Si te interesa la separación de audio o la separación de stems, vale la pena ver RipX: https://hitnmix.com/ripx-daw-pro/
    También puede exportar las pistas separadas como archivos MIDI. Todavía tiene algunos problemas, pero funciona bastante bien
    La separación de stems se está volviendo una función estándar en el software musical y casi todos los DAW ya la ofrecen

    • RipX hace separación de stems y te permite volver a ajustar la altura dentro de la mezcla, así que es excelente si ese es tu objetivo
      Para lo que yo hago, moises me resultó fácil de usar: https://moises.ai/
      Soporta transposición de toda la canción o time stretching, y tiene una interfaz simple para separación de stems y muteo/ajuste de volumen por pista. Detecta automáticamente tempo y acordes
      No tengo ninguna relación con ellos; solo soy un usuario satisfecho que lo usa casi todos los días para aprender y practicar canciones. Normalmente subo la parte del bajo y bajo todo lo demás a menos de 10% de volumen para escuchar el bajo con claridad, y eso deja muy en evidencia con qué frecuencia se equivocan las partituras en línea, incluso las de pago. Después de aprender la parte, silencío el bajo y toco sobre la canción original como si fuera el bajista
    • Stemroller[0] también lleva un tiempo por ahí, es gratis y está basado en modelos de Meta
      0: https://www.stemroller.com/
    • Más que “casi todos los DAW la ofrecen”, diría que es una función emergente que casi todos los DAW deberían tener, pero que la mayoría todavía no tiene
      Ableton Live - no
      Bitwig - no
      Cubase - no
      FL - sí
      Logic - sí
      Pro Tools - no
      Reason - no
      Reaper - no
      Studio One - sí
    • Parece relacionado con Polymath: https://github.com/samim23/polymath
      Polymath es efectivo para separar y extraer pistas de instrumentos individuales desde MP3, y funciona muy bien
  • Está realmente genial, pero existe física real de los instrumentos que no se capta con simples plantillas de transformada de Fourier. Por ejemplo, una trompeta puede tener un espectro armónico muy distinto al tocar suave o fuerte aun con el mismo pitch
    La trompeta genera una serie armónica rica con armónicos fuertes, así que en la transformada de Fourier aparecen picos notorios en múltiplos enteros de la frecuencia fundamental. Instrumentos como la flauta producen tonos más puros, pero los metales suelen tener armónicos altos más fuertes, así que las derivadas parciales de la ecuación matricial que aparece en el artículo probablemente también se vuelvan más complejas
    Este script identifica el timing de las notas usando filtrado pasa banda y correlación cruzada de envolventes de ataque y release. Como los metales pueden mostrar un comportamiento no lineal donde la composición armónica cambia mucho según la intensidad de ejecución, no tengo claro cómo manejaría este algoritmo los casos donde el brillo cambia entre pp y ff. Para mejorar la precisión, yo consideraría agregar plantillas de Fourier dependientes de la intensidad para cada instrumento

    • Como alguien que usa source separation dos veces por semana para fines de mezcla, hay muchísimos instrumentos capaces de producir un timbre como “vocal”
      Todos estos modelos fallan cuando el instrumento no produce su sonido típico, o en bandas donde la interpretación y la mezcla no están hechas para maximizar la separación entre instrumentos. Por ejemplo, una guitarra eléctrica con armónicos distorsionados puede tocar las mismas notas que la voz, el baterista puede producir solo ruido agudo en los platillos y el bajista puede imitar con su instrumento sonidos percusivos como un bombo
      En esta música experimental, los resultados de source separation se vuelven totalmente impredecibles, y puede que sirvan o no para reequilibrio musical
  • Parece un trabajo hecho por el hermano de Joshua Bird. Joshua Bird también hizo antes proyectos impresionantes que llegaron a HN: https://www.youtube.com/@joshuabird333

    • Sí, Matt es el hermano de Josh. Sorprende mucho y da gusto que te hayas dado cuenta
  • Me hizo recordar cuando jugaba Audiosurf hace como 15 años. Cómo pasa el tiempo
    https://en.wikipedia.org/wiki/Audiosurf

  • No sé si entendí mal, pero no parece que ninguno de los demos de YouTube esté mostrando separación de fuentes
    Además, en investigación de audio, separación de fuentes significa separar el audio en clips distintos

    • Aquí parece que descomposición es una palabra más adecuada. En este caso, parece que usan source separation para decir que las notas descompuestas pueden dividirse entre distintas fuentes, pero es una expresión que se presta a confusión
    • Aquí “source” parece referirse al source de “open source”
  • Soy fan de Ultrastar Deluxe desde hace mucho. Es un clon de código abierto de Singstar, un juego de karaoke donde la gente compite cantando canciones
    Detecta las notas que cantas y las compara con un archivo de mapeo del tiempo de la voz para esa canción; mientras mejor sigas la melodía, más puntos obtienes. No importa mucho si aciertas exactamente la letra
    Hay muchas bibliotecas de canciones mapeadas hechas por fans, pero nunca alcanzan, y hay muy pocas canciones mapeadas en idiomas aparte del inglés y el español. Mapear todo a mano toma muchísimo tiempo, y en mi caso es aún más difícil porque casi no tengo oído
    Desde hace tiempo me pregunto qué software podría automatizar este proceso de forma más sencilla, y esta herramienta se ve muy buena para detectar el tiempo y las notas de la voz en la canción original
    Uno de mis pendientes de vida es armar algún día una lista de reproducción tipo Singstar en mi lengua materna y hacer una fiesta de karaoke con amigos. Si alguien conoce herramientas parecidas, me interesa

    • Buenísimo. No sabía que existía algo así
      Parece que el archivo de texto necesita voz y tono con marcas de tiempo, y la IA ya se está acercando a un nivel en el que podría automatizar su generación
      Dejo un enlace que acabo de encontrar para leer más: https://www.reddit.com/r/karaoke/comments/x61kzy/modern_equi...
  • Según yo, algunos de los videos parecen estar sin audio

    • En el enlace de YouTube viene la razón. Dice “sin audio por derechos de autor”, y también hay un enlace al audio que se puede reproducir por separado