This is not a fancy app, but a well working algorithm, based on autocorellation.
Works as follows:
- Downsample the signal if necessary
- Take samples absolult value
- Run a lowpass filter to extract the envelope
- Run autocorellation
- Find autocorellation max value
- Calculate BPM from max value position