Audio Decomposition - Open source que separa música em notas e instrumentos
(matthew-bird.com)- Audio Decomposition é um programa open source que busca dividir o áudio em suas notas e instrumentos componentes para transcrever música em partitura
- As amostras de instrumentos vêm do University of Iowa Electronic Music Studios instrument database; para cada forma de onda, a transformada de Fourier e o envelope são armazenados e usados como base de comparação
- O arquivo de música é analisado em intervalos de 0,1 segundo para criar um espectrograma, e combinações das transformadas de Fourier armazenadas por instrumento são usadas para estimar a intensidade de cada instrumento naquele trecho
- A análise de envelope separa os trechos de attack·sustain·release e a atenuação estática/dinâmica, depois calcula o custo por instrumento na faixa filtrada da nota
- O resultado opta por exibir algo parecido com uma partitura usando um gráfico de dispersão do matplotlib, em vez de recriar o áudio, facilitando a solução do problema e a visualização de dados esparsos
Decomposição de áudio para conversão em partitura
- Audio Decomposition começou com o objetivo de criar um programa para transformar música em partitura
- A motivação veio do desejo pessoal de transcrever músicas para partitura e da percepção de que faltavam algoritmos open source e simples de separação de fontes de áudio
- Vídeos de demonstração estão disponíveis no YouTube
- O repositório no GitHub é mbird1258/Audio-Decomposition
- As amostras de instrumentos vêm do University of Iowa Electronic Music Studios instrument database
- Para cada arquivo, a transformada de Fourier e o envelope da forma de onda completa são calculados e armazenados
Transformada de Fourier em intervalos de 0,1 segundo
- Partindo da ideia de que sons de instrumentos podem ser caracterizados principalmente pela transformada de Fourier e pelo envelope, essas duas informações são usadas para estimar qual instrumento toca qual nota
- O arquivo de música passa por uma transformada de Fourier a cada 0,1 segundo e é processado como um espectrograma
- Para reproduzir a transformada de Fourier de cada trecho de 0,1 segundo, somam-se as transformadas de Fourier armazenadas por instrumento
- A intensidade de cada instrumento é calculada resolvendo uma matriz obtida das derivadas parciais por frequência de uma função de custo MSE
- Cada linha da matriz corresponde à derivada parcial de cada instrumento, como cello, piano etc.
- O exemplo é o cálculo de custo para valores por frequência, como o valor da transformada de Fourier em 5 Hz
Envelope e separação dos trechos da nota
- O envelope é o limite superior da forma de onda; como funções existentes podem não funcionar bem com ruído ou certas formas de onda, é usado um método próprio
- O processo de cálculo divide a forma de onda em chunks e pega o valor máximo de cada chunk
- Depois, o resultado é refinado encontrando pontos em que o envelope fica abaixo da forma de onda original e adicionando novos pontos
- O envelope é dividido em attack, sustain e release
- attack: som inicial da nota
- sustain: trecho em que a nota é mantida
- release: trecho em que a nota cessa
- Nas amostras de instrumentos, o primeiro valor diferente de zero é usado como ponto inicial do attack
- A fronteira entre attack e sustain é definida como o primeiro ponto em que a função se torna côncava para baixo ou começa a diminuir
- A fronteira entre sustain e release é definida olhando a partir do fim e escolhendo o primeiro ponto em que a função aumenta ou fica côncava para baixo
- O fim do release é encontrado olhando a partir do fim e procurando o primeiro ponto diferente de zero
Tipos de atenuação e correspondência de instrumentos
- Para distinguir a forma principal da onda, são consideradas atenuação estática e atenuação dinâmica
- Alguns instrumentos, como piano, em geral têm atenuação estáática, que segue uma forma de decaimento exponencial
- Alguns instrumentos, como violin, podem aumentar ou diminuir o volume mesmo durante o sustain
- Entre as amostras de instrumentos, há arquivos mantidos até o som desaparecer naturalmente e arquivos em que o release ocorre cedo
- Se a atenuação é estática ou dinâmica é determinado verificando se o coeficiente de atenuação é maior que 1 ou se há desvio excessivo da curva de atenuação
- Se o envelope tem release, ou seja, se é AS ou ASR, é determinado comparando a taxa média de variação do sustain e do release
- Se a taxa de variação do release for menor, considera-se que não há release
- No processamento do arquivo de música, aplica-se um filtro passa-faixa para cada frequência de nota
- Para a forma de onda filtrada, percorre-se cada instrumento e calcula-se a correlação cruzada do attack e do release normalizados para encontrar o início e o fim da nota
- Em seguida, calcula-se o MSE entre a forma de onda do instrumento e o áudio filtrado, usando-o como custo do instrumento naquele momento
- A intensidade final é calculada multiplicando a intensidade da etapa da transformada de Fourier pelo
1 / custoda etapa de envelope
Exibição do resultado baseada em gráfico de dispersão
- O resultado é exibido como uma partitura usando um scatter plot do matplotlib com pontos em formato de
- - A ideia original era recriar o áudio a partir das intensidades calculadas, mas isso gerou muitos problemas, consumiu tempo e dificultou a depuração
- O imshow do matplotlib também foi testado, mas era muito ineficiente quando a maioria dos valores era 0
- Isso porque, ao mover a tela ou dar zoom, todos os pontos precisavam ser redesenhados, estivessem visíveis na tela ou não
- Como resultado, ele pode ser usado para melhorar a reprodução de partituras, especialmente quando é difícil encontrar o pitch ou os acordes corretos
- Como exemplo, foi usado para reproduzir uma partitura no Noteflight com base em um vídeo do YouTube
- O tempo de execução também não chega a ser longo demais
1 comentários
Comentários do Hacker News
O título é um pouco confuso. Se escrever open-source separation, isso pode ser lido como separação de fontes (source separation), mas na prática não é isso, e sim um algoritmo de detecção de pitch que depois classifica de qual instrumento veio o pitch detectado
É bem legal, mas, se você precisar de um resultado realmente preciso, parece que corrigir a saída pode acabar levando mais tempo do que fazer manualmente
Para algo feito nessa idade, é impressionante
Quando músicos tentam restaurar, a partir de um único arquivo de áudio, algo próximo das faixas originais antes da mixagem — isto é, os stems —, parece que ouço mais o segundo termo
Não vi isso ser mencionado diretamente no post, mas, para quem se interessa, transcrição automática de música, ou seja, converter áudio em MIDI, é uma subárea bem grande de deep learning e recuperação de informação musical
Também houve vários modelos bem-sucedidos em transcrição musical multifaixa, e existe o projeto MT3 do Google: https://research.google/pubs/mt3-multi-task-multitrack-music...
No caso de transcrição de piano, a precisão já está chegando perto de ser quase perfeita, mesmo com áudio de qualidade muito baixa: https://github.com/EleutherAI/aria-amt
Aliás, sou o autor do repositório acima
Transcritores de áudio para MIDI acertam bem o pitch e o instante de início, mas duração e intensidade são bem menos estáveis
Portei o Colab deles para rodar mais facilmente como runtime, mas a saída MIDI ficou bem estranha
Mesmo colocando stems simples, em algumas faixas a saída MIDI não batia bem com o áudio e tinha problemas de timing a ponto de ficar inutilizável, embora com outros áudios funcionasse razoavelmente bem
Se você se interessa por separação de áudio ou separação de stems, vale dar uma olhada no RipX: https://hitnmix.com/ripx-daw-pro/
Ele também pode exportar as faixas separadas como arquivos MIDI. Ainda tem alguns problemas, mas funciona bem
A separação de stems está virando um recurso padrão em software musical, e quase toda DAW já oferece isso
Para o que eu faço, o moises foi mais fácil de usar: https://moises.ai/
Ele oferece suporte a transposição da música inteira ou time-stretching, além de uma interface simples para separação de stems e controle de mute/volume por faixa. Detecta automaticamente o tempo e os acordes
Não tenho qualquer relação com a empresa; sou apenas um usuário satisfeito que usa quase todos os dias para aprender e praticar músicas. Normalmente aumento a parte do baixo e abaixo o resto para menos de 10% do volume, para ouvir o baixo com clareza, o que mostra bem com que frequência as partituras online — inclusive as pagas — estão erradas. Depois de aprender a parte, eu silencio o baixo e toco junto com a música original como se fosse o baixista
0: https://www.stemroller.com/
Ableton Live - não
Bitwig - não
Cubase - não
FL - sim
Logic - sim
Pro Tools - não
Reason - não
Reaper - não
Studio One - sim
O Polymath é eficaz para separar e extrair faixas de instrumentos individuais de MP3 e funciona muito bem
Isso é realmente muito legal, mas há física real de instrumentos que um simples template de transformada de Fourier não capta. Por exemplo, um trompete pode ter um espectro harmônico muito diferente ao tocar fraco ou forte, mesmo na mesma nota
O trompete produz uma série harmônica rica, com harmônicos fortes, então a transformada de Fourier mostra picos marcantes em múltiplos inteiros da frequência fundamental. Instrumentos como a flauta produzem um timbre mais puro, mas metais em geral tendem a ter harmônicos mais altos mais fortes, o que tornaria mais complexas também as derivadas parciais da equação matricial mencionada no texto
Este script identifica o timing das notas usando filtragem passa-banda e correlação cruzada dos envelopes de ataque e release. Como instrumentos de metal podem exibir comportamento não linear, com a composição harmônica variando bastante conforme a intensidade da execução, não sei bem como esse algoritmo lidaria com casos em que o brilho muda entre pp e ff. Para melhorar a precisão, eu consideraria adicionar templates de Fourier dependentes da intensidade para cada instrumento
Quando os instrumentos não soam de forma típica, ou quando uma banda não é tocada/mixada para maximizar a separação entre os instrumentos, todos esses modelos deixam de funcionar bem. Por exemplo, uma guitarra elétrica com harmônicos distorcidos pode tocar as mesmas notas que o vocal, o baterista pode estar produzindo apenas ruído agudo nos pratos, e o baixista pode imitar sons percussivos parecidos com bumbo no instrumento
Nesse tipo de música experimental, os resultados da separação de fontes se tornam completamente imprevisíveis, podendo ou não servir para rebalanceamento musical
Parece ser um trabalho feito pelo irmão do Joshua Bird. O Joshua Bird também já fez alguns projetos impressionantes que apareceram no HN antes: https://www.youtube.com/@joshuabird333
Isso me lembrou de quando eu jogava Audiosurf há uns 15 anos. Como o tempo voa
https://en.wikipedia.org/wiki/Audiosurf
Posso ter entendido errado, mas não parece que nenhum dos demos no YouTube esteja mostrando separação de fontes
Só para acrescentar, em pesquisa de áudio, separação de fontes significa separar o áudio em clipes distintos
Sou fã de longa data do Ultrastar Deluxe. É um clone open source do Singstar, um jogo de karaokê em que as pessoas cantam acompanhando músicas e competem entre si
Ele reconhece as notas cantadas e as compara com um arquivo de mapeamento de timing vocal da música; quanto mais perto você canta da melodia, maior a pontuação. Acertar exatamente a letra não importa
Existem muitas bibliotecas de músicas mapeadas feitas por fãs, mas nunca são suficientes, e há pouquíssimas músicas mapeadas em idiomas que não sejam inglês e espanhol. Mapear tudo manualmente leva muito tempo, e eu mesmo sou quase sem afinação, então fica ainda mais difícil
Há muito tempo eu me pergunto que tipo de software poderia automatizar esse processo com mais facilidade, e esta ferramenta parece muito boa para capturar o timing vocal e as notas da gravação original
Um item da minha lista de desejos é um dia montar uma playlist estilo Singstar na minha língua nativa e fazer uma festa de karaokê com os amigos. Se alguém tiver recomendações de ferramentas parecidas, tenho interesse
Parece que o arquivo de texto precisa de voz e pitch com timestamps, e a IA está chegando perto de conseguir automatizar essa geração
Vou deixar um link que acabei de encontrar para ler mais: https://www.reddit.com/r/karaoke/comments/x61kzy/modern_equi...
Pelo que vejo, alguns vídeos parecem estar sem áudio