Rilevamento di bpm di batteria in un file .wav rumoroso


12

Sto cercando algoritmi per risolvere il seguente problema: Data una rumorosa acquisizione del suono .wav (un po 'di vento + rumore di attrito sul microfono), come rilevare i BPM di un battito di batteria dolce?

Ho tentato di cercare su Google l'argomento, ma i risultati sono piuttosto scarsi, a causa dell'elevata quantità di software relativo a mp3 sia per l'analisi che per la generazione dell'identificazione delle impronte digitali. Nessuno di loro fornisce informazioni su come farlo effettivamente.

Sono a conoscenza di algoritmi per rimuovere il rumore, ma ciò mi lascia ancora il problema di rilevare i BPM. E a seconda di come viene risolto il problema dei BPM, è possibile che io non abbia nemmeno bisogno di rinunciare (dal momento che il tamburo tende ad essere nelle frequenze più basse e il rumore in maggiore, un semplice passa basso potrebbe essere una pre-elaborazione sufficiente).


Risposte:


13

Un metodo che funziona se c'è un drum beat relativamente forte è quello di prendere la grandezza della STFT della forma d'onda e quindi correlarla automaticamente solo nella dimensione temporale. Il picco della funzione di auto-correlazione sarà il battito, o un sottomultiplo di esso.

Ciò equivale a suddividere il segnale in molte diverse bande di frequenza, trovare l'inviluppo di ampiezza di ciascuno, autocorrelare ciascun inviluppo e quindi sommarli. Il rumore e altre parti della musica sono mediati dall'operazione di correlazione incrociata.

Questo perché i ritmi di batteria producono suoni di breve durata a molte frequenze (linee verticali), mentre altre parti della musica sono di lunga durata a poche frequenze (linee orizzontali) e il rumore è di lunga durata ma casuale a tutte le frequenze. Puoi vedere la ripetizione del battito se guardi una STFT:

inserisci qui la descrizione dell'immagine

Ho pensato a questo per un progetto scolastico di trovare un singolo valore di BPM per interi file musicali, ma potrebbe essere adattato anche a un flusso di audio che cambia BPM. Dovresti elaborare blocchi che durano almeno il doppio del periodo del BPM che stai cercando.


La FFT è una tecnica generalmente utile per trovare segnali periodici. Può esserci un po 'di inganno se il segnale non è abbastanza regolare come vorresti: un batterista potrebbe accelerare o rallentare nel corso di una canzone - deliberatamente o no - e questo potrebbe compromettere i risultati FFT nel dominio della frequenza.
Ripensare il

1
@Rethunk: se il BPM cambia nel tempo, dovrai farlo in blocchi e trovare il BPM per ciascuno.
endolito il

Nota che i battiti sono comunemente associati alla musica e in questa immagine vedi anche un'altra parte della musica: linee orizzontali, che cambiano altezza alla battuta. Quindi ci sono sostanzialmente tre contributi energetici: battiti (verticali), note (orizzontali) e rumore (resto).
Salterio

@MSalters: Anche le note possono essere correlate
endolith

4

L'auto-correlazione è certamente un buon metodo di base per questo. Ci sono alcune cose che puoi fare per potenziarlo ulteriormente:

  1. Se si conosce lo spettro di frequenza del proprio tamburo, il filtro passa-banda filtra il segnale in modo che rimangano solo le frequenze rilevanti per il tamburo. A seconda del tamburo, questo potrebbe essere piuttosto stretto e dovrebbe eliminare la stragrande maggioranza del rumore.
  2. Quindi calcola l'inviluppo del segnale nel dominio del tempo (il "picco con perdita" è il modo più semplice per farlo) con una costante di tempo che corrisponde approssimativamente alla lunghezza dei battiti della batteria.
  3. Quindi eseguire l'auto-correlazione
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.