adamstark@40
|
1 BTrack - A Real-Time Beat Tracker
|
adamstark@40
|
2 =================================
|
adamstark@40
|
3
|
adamstark@94
|
4 ** Version 1.0.4 **
|
adamstark@48
|
5
|
adamstark@48
|
6 *by Adam Stark, Matthew Davies and Mark Plumbley.*
|
adamstark@48
|
7
|
adamstark@48
|
8
|
adamstark@48
|
9 About BTrack
|
adamstark@48
|
10 ------------
|
adamstark@48
|
11
|
adamstark@67
|
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@48
|
13
|
adamstark@48
|
14 Full details of the working of the algorithm can be found in:
|
adamstark@48
|
15
|
adamstark@48
|
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@48
|
17
|
adamstark@48
|
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@48
|
19
|
adamstark@81
|
20 BTrack is made available under the GNU General Public License, version 3. Please see the included LICENSE.txt for more details.
|
adamstark@48
|
21
|
adamstark@49
|
22 Versions
|
adamstark@49
|
23 --------
|
adamstark@49
|
24
|
adamstark@94
|
25 ==== 1.0.4 ==== (18th June 2016)
|
adamstark@94
|
26
|
adamstark@94
|
27 * Added option of using Kiss FFT
|
adamstark@94
|
28 * Implementation changes to improve efficiency
|
adamstark@94
|
29
|
adamstark@86
|
30 ==== 1.0.3 ==== (10th January 2016)
|
adamstark@86
|
31
|
adamstark@86
|
32 * Fixed implementation error in complex spectral difference (thanks to @zbanks for pointing it out)
|
adamstark@86
|
33 * Small change to python module build script
|
adamstark@86
|
34
|
adamstark@82
|
35 ==== 1.0.2 ==== (25th November 2014)
|
adamstark@82
|
36
|
adamstark@82
|
37 * Added updated Max external project and associated files
|
adamstark@82
|
38 * Fixed a couple of bugs
|
adamstark@82
|
39
|
adamstark@82
|
40 ==== 1.0.1 ==== (21st November 2014)
|
adamstark@75
|
41
|
adamstark@75
|
42 * Moved to git & updated README
|
adamstark@75
|
43 * No implementation changes
|
adamstark@75
|
44
|
adamstark@70
|
45 ==== 1.0.0 ==== (8th July 2014)
|
adamstark@70
|
46
|
adamstark@70
|
47 * Many updates to stability and improvements to implementation
|
adamstark@70
|
48
|
adamstark@70
|
49 ==== 0.9.0 ==== (circa 2008/2009)
|
adamstark@49
|
50
|
adamstark@49
|
51 * This is the original version of the BTrack algorithm
|
adamstark@49
|
52
|
adamstark@49
|
53
|
adamstark@49
|
54
|
adamstark@61
|
55 Usage - C++
|
adamstark@61
|
56 -----------
|
adamstark@61
|
57
|
adamstark@61
|
58 **STEP 1**
|
adamstark@61
|
59
|
adamstark@61
|
60 Include the BTrack header file as follows:
|
adamstark@61
|
61
|
adamstark@61
|
62 #include "BTrack.h"
|
adamstark@61
|
63
|
adamstark@61
|
64 **STEP 2**
|
adamstark@61
|
65
|
adamstark@61
|
66 Instantiate the algorithm by one of the following:
|
adamstark@61
|
67
|
adamstark@61
|
68 // to use the default 512 hop size and 1024 frame size
|
adamstark@61
|
69 BTrack b;
|
adamstark@61
|
70
|
adamstark@61
|
71 or:
|
adamstark@61
|
72
|
adamstark@61
|
73 // to specify a hop size (e.g. 512) and have a frame size of 2 x the hop size
|
adamstark@61
|
74 BTrack b(512);
|
adamstark@61
|
75
|
adamstark@61
|
76 or:
|
adamstark@61
|
77
|
adamstark@61
|
78 // to specify both the hop size and frame size
|
adamstark@61
|
79 BTrack b(512,1024);
|
adamstark@61
|
80
|
adamstark@61
|
81 **STEP 3.1 - Audio Input**
|
adamstark@61
|
82
|
adamstark@61
|
83 In the processing loop, fill a double precision array with one frame of audio samples (as determined in step 2):
|
adamstark@61
|
84
|
adamstark@61
|
85 double *frame;
|
adamstark@61
|
86
|
adamstark@61
|
87 // !
|
adamstark@61
|
88 // do something here to fill the frame with audio samples
|
adamstark@61
|
89 // !
|
adamstark@61
|
90
|
adamstark@61
|
91 and then call:
|
adamstark@61
|
92
|
adamstark@61
|
93 b.processAudioFrame(frame);
|
adamstark@61
|
94
|
adamstark@61
|
95 and to check for beats, simply call:
|
adamstark@61
|
96
|
adamstark@61
|
97 if (b.beatDueInCurrentFrame())
|
adamstark@61
|
98 {
|
adamstark@61
|
99 // do something on the beat
|
adamstark@61
|
100 }
|
adamstark@61
|
101
|
adamstark@61
|
102 **STEP 3.2 - Onset Detection Function Input**
|
adamstark@61
|
103
|
adamstark@75
|
104 The algorithm can process onset detection function samples. Given a double precision onset detection function sample called 'newSample', at each step, call:
|
adamstark@61
|
105
|
adamstark@61
|
106 b.processOnsetDetectionFunctionSample(newSample);
|
adamstark@61
|
107
|
adamstark@61
|
108 and then check for beats with:
|
adamstark@61
|
109
|
adamstark@61
|
110 if (b.beatDueInCurrentFrame())
|
adamstark@61
|
111 {
|
adamstark@61
|
112 // do something on the beat
|
adamstark@61
|
113 }
|
adamstark@70
|
114
|
adamstark@81
|
115 Requirements
|
adamstark@81
|
116 ------------
|
adamstark@81
|
117
|
adamstark@81
|
118 To compile BTrack, you will require the following libraries:
|
adamstark@81
|
119
|
adamstark@81
|
120 * libsamplerate
|
adamstark@81
|
121
|
adamstark@95
|
122 And either:
|
adamstark@95
|
123
|
adamstark@95
|
124 * FFTW (add the flag -DUSE_FFTW)
|
adamstark@95
|
125
|
adamstark@95
|
126 or:
|
adamstark@95
|
127
|
adamstark@95
|
128 * Kiss FFT (included with project, use the flag -DUSE_KISS_FFT)
|
adamstark@95
|
129
|
adamstark@70
|
130
|
adamstark@70
|
131 License
|
adamstark@70
|
132 -------
|
adamstark@70
|
133
|
adamstark@70
|
134 Copyright (c) 2014 Queen Mary University of London
|
adamstark@70
|
135
|
adamstark@70
|
136 This program is free software: you can redistribute it and/or modify
|
adamstark@70
|
137 it under the terms of the GNU General Public License as published by
|
adamstark@70
|
138 the Free Software Foundation, either version 3 of the License, or
|
adamstark@70
|
139 (at your option) any later version.
|
adamstark@70
|
140
|
adamstark@70
|
141 This program is distributed in the hope that it will be useful,
|
adamstark@70
|
142 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
adamstark@70
|
143 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
adamstark@70
|
144 GNU General Public License for more details.
|
adamstark@70
|
145
|
adamstark@70
|
146 You should have received a copy of the GNU General Public License
|
adamstark@70
|
147 along with this program. If not, see <http://www.gnu.org/licenses/>. |