adamstark@0
|
1 BTrack - A Real-Time Beat Tracker
|
adamstark@0
|
2 =================================
|
adamstark@0
|
3
|
adamstark@7
|
4 ** Version 0.9 **
|
adamstark@7
|
5
|
adamstark@7
|
6 *by Adam Stark, Matthew Davies and Mark Plumbley.*
|
adamstark@7
|
7
|
adamstark@7
|
8
|
adamstark@7
|
9 About BTrack
|
adamstark@7
|
10 ------------
|
adamstark@7
|
11
|
adamstark@30
|
12 BTrack is a causal beat tracking algorithm intended for real-time use. It is implemented in C++ with wrappers for Python and the Vamp plug-in framework.
|
adamstark@7
|
13
|
adamstark@7
|
14 Full details of the working of the algorithm can be found in:
|
adamstark@7
|
15
|
adamstark@7
|
16 * Musicians and Machines: Bridging the Semantic Gap in Live Performance, Chapter 3, A. M. Stark, PhD Thesis, Queen Mary, University of London, 2011.
|
adamstark@7
|
17
|
adamstark@7
|
18 * Real-Time Beat-Synchronous Analysis of Musical Audio, A. M. Stark, M. E. P. Davies and M. D. Plumbley. In Proceedings of the 12th International Conference on Digital Audio Effects (DAFx-09), Como, Italy, September 1-4, 2009.
|
adamstark@7
|
19
|
adamstark@7
|
20
|
adamstark@8
|
21 Versions
|
adamstark@8
|
22 --------
|
adamstark@8
|
23
|
adamstark@8
|
24 ==== 0.9 ====
|
adamstark@8
|
25
|
adamstark@8
|
26 * This is the original version of the BTrack algorithm
|
adamstark@8
|
27
|
adamstark@8
|
28
|
adamstark@8
|
29
|
adamstark@7
|
30 License
|
adamstark@7
|
31 -------
|
adamstark@7
|
32
|
adamstark@24
|
33 BTrack is made available under the GNU General Public License, version 3. Please see the included LICENSE.txt for more details.
|
adamstark@24
|
34
|
adamstark@24
|
35 Usage - C++
|
adamstark@24
|
36 -----------
|
adamstark@24
|
37
|
adamstark@24
|
38 **STEP 1**
|
adamstark@24
|
39
|
adamstark@24
|
40 Include the BTrack header file as follows:
|
adamstark@24
|
41
|
adamstark@24
|
42 #include "BTrack.h"
|
adamstark@24
|
43
|
adamstark@24
|
44 **STEP 2**
|
adamstark@24
|
45
|
adamstark@24
|
46 Instantiate the algorithm by one of the following:
|
adamstark@24
|
47
|
adamstark@24
|
48 // to use the default 512 hop size and 1024 frame size
|
adamstark@24
|
49 BTrack b;
|
adamstark@24
|
50
|
adamstark@24
|
51 or:
|
adamstark@24
|
52
|
adamstark@24
|
53 // to specify a hop size (e.g. 512) and have a frame size of 2 x the hop size
|
adamstark@24
|
54 BTrack b(512);
|
adamstark@24
|
55
|
adamstark@24
|
56 or:
|
adamstark@24
|
57
|
adamstark@24
|
58 // to specify both the hop size and frame size
|
adamstark@24
|
59 BTrack b(512,1024);
|
adamstark@24
|
60
|
adamstark@24
|
61 **STEP 3.1 - Audio Input**
|
adamstark@24
|
62
|
adamstark@24
|
63 In the processing loop, fill a double precision array with one frame of audio samples (as determined in step 2):
|
adamstark@24
|
64
|
adamstark@24
|
65 double *frame;
|
adamstark@24
|
66
|
adamstark@24
|
67 // !
|
adamstark@24
|
68 // do something here to fill the frame with audio samples
|
adamstark@24
|
69 // !
|
adamstark@24
|
70
|
adamstark@24
|
71 and then call:
|
adamstark@24
|
72
|
adamstark@24
|
73 b.processAudioFrame(frame);
|
adamstark@24
|
74
|
adamstark@24
|
75 and to check for beats, simply call:
|
adamstark@24
|
76
|
adamstark@24
|
77 if (b.beatDueInCurrentFrame())
|
adamstark@24
|
78 {
|
adamstark@24
|
79 // do something on the beat
|
adamstark@24
|
80 }
|
adamstark@24
|
81
|
adamstark@24
|
82 **STEP 3.2 - Onset Detection Function Input**
|
adamstark@24
|
83
|
adamstark@24
|
84 The algorithm can process onset detection function samples. Given a double precision onset detection function sample called 'newSamples', at each step, call:
|
adamstark@24
|
85
|
adamstark@24
|
86 b.processOnsetDetectionFunctionSample(newSample);
|
adamstark@24
|
87
|
adamstark@24
|
88 and then check for beats with:
|
adamstark@24
|
89
|
adamstark@24
|
90 if (b.beatDueInCurrentFrame())
|
adamstark@24
|
91 {
|
adamstark@24
|
92 // do something on the beat
|
adamstark@24
|
93 }
|