Início > DSP, Programação > Audio Beat Track

Audio Beat Track

Oi Pessoal, faz tempo que não olho com carinho para o blog, desculpem pelo “gap” !

Já perceberam que ando trabalhando bastante com análise de sinais e todas as vezes que venho aqui escrever tento abordar o assunto da maneira mais simples possível, a idéia é sempre deixar o leitor curioso de como as coisas funcionam …

Hoje vamos falar de “Beat Track” esta é mais uma das várias caracteristicas de extrações de audio, com ele podemos estimar quantas batidas por minuto um determinado sinal de áudio possui, andei lendo alguns modelos de como extrair esta informação, acabei desenvolvendo um código em matlab para este propósito!

Como chegar lá?

Vamos “Brincar” com este arquivo de áudio

Primeiro precisamos decompor o sinal em várias sub-bandas, escolhi seis sub-bandas descrito por “Scheirer 1998” (200, 400, 800, 1600, 3200, 6400), apliquei filtro de passa altas e passa baixas para extrair as seis sub-bandas !

Vejam as seis sub-bandas extraidas do áudio:

Após este passo segui um modelo descrito por “George Tzanetakis 2001” no artigo “Tempo Extraction using Beat Histograms”, seu documento descreve um modelo bastante robusto utilizando envelope (envoltória) e autocorrelação, a partir de uma forma de onda de áudio o envelope pode ser calculado, a forma de onda nos mostra a variação de amplitude do áudio ao longo do tempo, bastante útil para o uso deste caso na qual nos mostra exatamente onde os picos das batidas do som ocorre!
Aplicando o Envelope em cada sub-banda extraida temos:

Reparem a relação entre as formas de onda de cada sub-banda e seus respectivos envelopes, agora se somarmos todos os envelopes teremos uma informação bastante consistente das batidas que este áudio possui, veja a soma:

Agora ficou relativamente simples ver onde todas as batidas do áudio ocorre, se você escutar o áudio certamente conseguirá acompanhar no gráfico acima onde as batidas da música estão acontecendo…

O Audio que estamos “brincando” possui cerca de 10 segundos, eu o calculei como tendo 128 batidas por minuto utilizando meu código, mas será que está certo ? utilizei 10 segundos de áudio pois é mais fácil ver onde as batidas estão acontecendo, perceba também que preferi pegar um áudio que possui uma batida bastante perceptível, vamos tentar calcular na mão e ver se conseguimos um valor parecido?

Estamos vendo claramente que o gráfico acima possui todas as batidas que ocorrem no arquivo de áudio com cerca de 10 segundos de gravação, o gráfico possui 21 picos, então podemos pressupor que se a evolução deste gráfico nao mudar  durante 60 segundos teremos 126 batidas por minuto, acompanhe:

Temos 10 segundos de áudio, 1 minuto = 60 segundos, 60 segundos dividido por nossos 10 segundos de áudio é igual a 6, 6 vezes 21 picos será igual 126 batidas por minuto, bem proximo do valor correto que é de 128 batidas …

Bom, tornei o código publico aqui, escrevi em matlab parece ser bastante robusto !

Eng Eder de Souza

Categorias:DSP, Programação Tags:,
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: