History

python/demos/demo_bpm_extract.py: add simple demo to get bpm of several files

Paul Brossier committed 12 years ago

Commit c911b121 parent d47a5e11 file · +54 −0Browse files

Showing the changes to python (1 of 1 file). Show all

Unified · Split

python/demos/demo_bpm_extract.py+54−0
@@ -0,0 +1,54 @@
1#! /usr/bin/env python
2
3from aubio import source, tempo
4from numpy import median, diff
5
6def get_file_bpm(path, params = {}):
7 """ Calculate the beats per minute (bpm) of a given file.
8 path: path to the file
9 param: dictionary of parameters
10 """
11 try:
12 win_s = params['win_s']
13 samplerate = params['samplerate']
14 hop_s = params['hop_s']
15 except:
16 """
17 # super fast
18 samplerate, win_s, hop_s = 4000, 128, 64
19 # fast
20 samplerate, win_s, hop_s = 8000, 512, 128
21 """
22 # default:
23 samplerate, win_s, hop_s = 44100, 1024, 512
24
25 s = source(path, samplerate, hop_s)
26 samplerate = s.samplerate
27 o = tempo("specdiff", win_s, hop_s, samplerate)
28 # List of beats, in samples
29 beats = []
30 # Total number of frames read
31 total_frames = 0
32
33 while True:
34 samples, read = s()
35 is_beat = o(samples)
36 if is_beat:
37 this_beat = o.get_last_s()
38 beats.append(this_beat)
39 #if o.get_confidence() > .2 and len(beats) > 2.:
40 # break
41 total_frames += read
42 if read < hop_s:
43 break
44
45 # Convert to periods and to bpm
46 bpms = 60./diff(beats)
47 b = median(bpms)
48 return b
49
50if __name__ == '__main__':
51 import sys
52 for f in sys.argv[1:]:
53 bpm = get_file_bpm(f)
54 print "%6s" % ("%.2f" % bpm), f

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t