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@113
|
130 Please ensure that if you are using these libraries that you have secured any required licences for your project. The licence on this library does not cover any third party licences.
|
adamstark@70
|
131
|
adamstark@70
|
132 License
|
adamstark@70
|
133 -------
|
adamstark@70
|
134
|
adamstark@70
|
135 Copyright (c) 2014 Queen Mary University of London
|
adamstark@70
|
136
|
adamstark@70
|
137 This program is free software: you can redistribute it and/or modify
|
adamstark@70
|
138 it under the terms of the GNU General Public License as published by
|
adamstark@70
|
139 the Free Software Foundation, either version 3 of the License, or
|
adamstark@70
|
140 (at your option) any later version.
|
adamstark@70
|
141
|
adamstark@70
|
142 This program is distributed in the hope that it will be useful,
|
adamstark@70
|
143 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
adamstark@70
|
144 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
adamstark@70
|
145 GNU General Public License for more details.
|
adamstark@70
|
146
|
adamstark@70
|
147 You should have received a copy of the GNU General Public License
|
adamstark@70
|
148 along with this program. If not, see <http://www.gnu.org/licenses/>. |