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).
fonte
Respostas:
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:
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.
fonte
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:
fonte