Audio Decomposition – open source para separar uma música em seus instrumentos componentes
(matthew-bird.com)-
Visão geral do projeto
- Este projeto tem como objetivo criar um programa que converta música em partitura.
- É um projeto open source que separa uma música em seus instrumentos componentes sem usar bibliotecas externas de separação de instrumentos.
- A motivação do projeto veio de uma necessidade pessoal e da ausência de algoritmos open source simples.
-
Processo de preparação
- Os dados dos instrumentos foram obtidos do banco de dados do University of Iowa Electronic Music Studios.
- A partir desses dados, foram obtidas a transformada de Fourier da forma de onda completa e o envelope da forma de onda.
-
Como funciona
- A forma de onda sonora dos instrumentos é caracterizada principalmente pela transformada de Fourier e pelo envelope.
- Com isso, é possível identificar qual instrumento está tocando qual nota.
-
Transformada de Fourier
- A transformada de Fourier do arquivo de música é realizada a cada 0,1 segundo para gerar um espectrograma.
- A transformada de Fourier da janela de 0,1 segundo é reconstruída somando as transformadas de Fourier armazenadas de cada instrumento.
- A magnitude de cada instrumento é obtida por meio da derivada parcial em relação à frequência da função de custo MSE.
-
Envelope
- O envelope é o limite superior da forma de onda, e é necessário um método robusto a ruído e a certos tipos específicos de forma de onda.
- O envelope é obtido dividindo a forma de onda em chunks e tomando o valor máximo de cada chunk.
- O envelope é analisado dividindo-o em ataque, sustentação e liberação.
- A forma de onda dos instrumentos pode ter decaimento estático ou dinâmico, e para diferenciá-los são analisados o fator de decaimento e sua taxa de variação.
-
Diferentes tipos de forma de onda
- Para processar o arquivo de música, é aplicado um filtro passa-banda para a frequência de cada nota.
- Para cada instrumento, o início e o fim de cada nota são encontrados por meio da correlação cruzada do ataque e da liberação, e o custo é obtido calculando o MSE.
- A magnitude final é obtida multiplicando a magnitude encontrada na etapa da transformada de Fourier pelo inverso do custo.
-
Resultados e exibição
- A partitura é exibida usando um gráfico de dispersão do matplotlib.
- Originalmente, tentou-se reconstruir o áudio a partir da magnitude, mas muitos problemas surgiram e a ideia foi abandonada.
- É útil para reconstrução de partitura e especialmente útil para quem tem dificuldade em identificar tons ou acordes.
1 comentários
Comentários do Hacker News