Detectando bpm de tambor em um arquivo .wav barulhento

12

Estou procurando algoritmos para resolver o seguinte problema: Dada uma captura de som .wav barulhenta (algum vento + ruído de atrito no microfone), como detectar o BPM de uma batida de tambor suave?

Eu tentei pesquisar no assunto, mas os resultados são bastante ruins, devido à grande quantidade de software relacionado ao mp3 para análise e geração de identificação de impressões digitais. Nenhum deles fornece informações sobre como realmente fazer isso.

Estou ciente de algoritmos para remover o ruído, mas isso ainda me deixa com o problema de detectar o BPM. E, dependendo de como o problema do BPM for resolvido, é possível que eu nem precise denoise (já que o tambor tende a estar nas frequências mais baixas e o ruído mais alto, uma simples passagem baixa pode ser pré-processamento suficiente).

Alex K
fonte
1
Isso soa semelhante ao meu problema de detecção de ronco .
Daniel R Hicks

Respostas:

13

Um método que funciona se houver uma batida de tambor relativamente forte é obter a magnitude do STFT da forma de onda e correlacioná-la automaticamente apenas na dimensão do tempo. O pico da função de correlação automática será a batida, ou um submúltiplo dela.

Isso é equivalente a dividir o sinal em várias faixas de frequência diferentes, localizando o envelope de amplitude de cada um, correlacionando automaticamente cada envelope e depois somando-os. O ruído e outras partes da música são calculados pela operação de correlação cruzada.

Isso ocorre porque as batidas de bateria produzem som de curta duração em muitas frequências (linhas verticais), enquanto outras partes da música são de longa duração em apenas algumas frequências (linhas horizontais) e o ruído é de longa duração, mas aleatório em todas as frequências. Você pode ver a repetição da batida se observar um STFT:

insira a descrição da imagem aqui

Eu vim com isso para um projeto da escola encontrar um único valor de BPM para arquivos de música inteiros, mas ele também poderia ser adaptado a um fluxo de áudio com a alteração do BPM. Você precisaria processar pedaços que sejam pelo menos duas vezes o período do BPM que você está procurando.

endólito
fonte
A FFT é uma técnica geralmente útil para encontrar sinais periódicos. Pode haver um pouco de dificuldade se o sinal não for tão regular quanto você gostaria: um baterista pode acelerar ou desacelerar ao longo de uma música - deliberadamente ou não - e isso pode interferir nos resultados da FFT no domínio da frequência.
Rethunk
1
@Rethunk: Se o BPM mudar ao longo do tempo, você precisará fazer isso em partes e encontrar o BPM para cada um.
endolith 16/01/12
Observe que as batidas são comumente associadas à música, e você também vê outra parte da música nesta imagem: linhas horizontais, que mudam de altura na batida. Portanto, existem basicamente três contribuições de energia: batidas (verticais), notas (horizontais) e ruído (restante).
MSalters
@MSalters: As notas podem correlacionar, também, embora
endolith
4

A correlação automática é certamente um bom método básico para isso. Existem algumas coisas que você pode fazer para melhorar ainda mais isso:

  1. Se você conhece o espectro de frequências do seu tambor, passe o filtro de sinal para que apenas as frequências relevantes para o tambor permaneçam. Dependendo do tambor, isso pode ser bastante estreito e deve se livrar da grande maioria do ruído.
  2. Em seguida, calcule o envelope no domínio do tempo do sinal ("pico com perdas" é a maneira mais fácil de fazer isso) com uma constante de tempo que corresponde aproximadamente à duração das batidas do tambor.
  3. Então faça a correlação automática
Hilmar
fonte