summaryrefslogtreecommitdiff
path: root/src/onset/onset.h
blob: e7886037e32ddf2d2191fdd36bfae5db715cee9f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
/*
  Copyright (C) 2006-2013 Paul Brossier <piem@aubio.org>

  This file is part of aubio.

  aubio is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  aubio is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with aubio.  If not, see <http://www.gnu.org/licenses/>.

*/

/** \file

  Onset detection object

  The following routines compute the onset detection function and detect peaks
  in these functions. When onsets are found above a given silence threshold,
  and after a minimum inter-onset interval, the output vector returned by
  aubio_onset_do() is filled with `1`. Otherwise, the output vector remains
  `0`.

  The peak-picking threshold, the silence threshold, and the minimum
  inter-onset interval can be adjusted during the execution of the
  aubio_onset_do routine using the corresponding functions.

  \example onset/test-onset.c
  \example examples/aubioonset.c
  \example examples/aubionotes.c

*/


#ifndef AUBIO_ONSET_H
#define AUBIO_ONSET_H

#ifdef __cplusplus
extern "C" {
#endif

/** onset detection object */
typedef struct _aubio_onset_t aubio_onset_t;

/** create onset detection object

  \param method onset detection type as specified in specdesc.h
  \param buf_size buffer size for phase vocoder
  \param hop_size hop size for phase vocoder
  \param samplerate sampling rate of the input signal

  \return newly created ::aubio_onset_t

*/
aubio_onset_t * new_aubio_onset (const char_t * method,
    uint_t buf_size, uint_t hop_size, uint_t samplerate);

/** execute onset detection

  \param o onset detection object as returned by new_aubio_onset()
  \param input new audio vector of length hop_size
  \param onset output vector of length 1, containing 0 if no onset was found,
  and a value equal or greater than 1 otherwise

  When no onset was detected, the first element of the output vector `onset`
  is set to 0.

  When an onset is found, the first element of the output vector `onset` is set
  to `offset = 1 + a` where `a` is a number in the range`[0, 1]`.

  The final onset detection time, in samples, can be obtained with
  aubio_onset_get_last(). It can also be derived from `offset` as
  follows:

  \code
    t = total_frames + offset * hop_size - delay
  \endcode

  where `total_frames` is the total number of frames processed so far, and
  `delay` is the current delay of the onset object, as returned by
  aubio_onset_get_delay().

*/
void aubio_onset_do (aubio_onset_t *o, const fvec_t * input, fvec_t * onset);

/** get the time of the latest onset detected, in samples

  \param o onset detection object as returned by new_aubio_onset()

  \return onset detection timestamps (in samples)

*/
uint_t aubio_onset_get_last (const aubio_onset_t *o);

/** get the time of the latest onset detected, in seconds

  \param o onset detection object as returned by new_aubio_onset()

  \return onset detection timestamps (in seconds)

*/
smpl_t aubio_onset_get_last_s (const aubio_onset_t *o);

/** get the time of the latest onset detected, in milliseconds

  \param o onset detection object as returned by new_aubio_onset()

  \return onset detection timestamps (in milliseconds)

*/
smpl_t aubio_onset_get_last_ms (const aubio_onset_t *o);

/** set onset detection silence threshold

  \param o onset detection object as returned by new_aubio_onset()
  \param silence new silence detection threshold

*/
uint_t aubio_onset_set_silence(aubio_onset_t * o, smpl_t silence);

/** get onset detection silence threshold

  \param o onset detection object as returned by new_aubio_onset()

  \return current silence threshold

*/
smpl_t aubio_onset_get_silence(const aubio_onset_t * o);

/** get onset detection function

  \param o onset detection object as returned by new_aubio_onset()
  \return the current value of the descriptor

*/
smpl_t aubio_onset_get_descriptor (const aubio_onset_t *o);

/** get thresholded onset detection function

  \param o onset detection object as returned by new_aubio_onset()
  \return the value of the thresholded descriptor

*/
smpl_t aubio_onset_get_thresholded_descriptor (const aubio_onset_t *o);

/** set onset detection peak picking threshold

  \param o onset detection object as returned by new_aubio_onset()
  \param threshold new peak-picking threshold

*/
uint_t aubio_onset_set_threshold(aubio_onset_t * o, smpl_t threshold);

/** set minimum inter onset interval in samples

  \param o onset detection object as returned by new_aubio_onset()
  \param minioi minimum interval between two consecutive onsets (in
  samples)

*/
uint_t aubio_onset_set_minioi(aubio_onset_t * o, uint_t minioi);

/** set minimum inter onset interval in seconds

  \param o onset detection object as returned by new_aubio_onset()
  \param minioi minimum interval between two consecutive onsets (in
  seconds)

*/
uint_t aubio_onset_set_minioi_s(aubio_onset_t * o, smpl_t minioi);

/** set minimum inter onset interval in milliseconds

  \param o onset detection object as returned by new_aubio_onset()
  \param minioi minimum interval between two consecutive onsets (in
  milliseconds)

*/
uint_t aubio_onset_set_minioi_ms(aubio_onset_t * o, smpl_t minioi);

/** set delay in samples

  \param o onset detection object as returned by new_aubio_onset()
  \param delay constant system delay to take back from detection time
  (in samples)

*/
uint_t aubio_onset_set_delay(aubio_onset_t * o, uint_t delay);

/** set delay in seconds

  \param o onset detection object as returned by new_aubio_onset()
  \param delay constant system delay to take back from detection time
  (in seconds)

*/
uint_t aubio_onset_set_delay_s(aubio_onset_t * o, smpl_t delay);

/** set delay in milliseconds

  \param o onset detection object as returned by new_aubio_onset()
  \param delay constant system delay to take back from detection time
  (in milliseconds)

*/
uint_t aubio_onset_set_delay_ms(aubio_onset_t * o, smpl_t delay);

/** get minimum inter onset interval in samples

  \param o onset detection object as returned by new_aubio_onset()
  \return minimum interval between two consecutive onsets (in
  samples)

*/
uint_t aubio_onset_get_minioi(const aubio_onset_t * o);

/** get minimum inter onset interval in seconds

  \param o onset detection object as returned by new_aubio_onset()
  \return minimum interval between two consecutive onsets (in
  seconds)

*/
smpl_t aubio_onset_get_minioi_s(const aubio_onset_t * o);

/** get minimum inter onset interval in milliseconds

  \param o onset detection object as returned by new_aubio_onset()
  \return minimum interval between two consecutive onsets (in
  milliseconds)

*/
smpl_t aubio_onset_get_minioi_ms(const aubio_onset_t * o);

/** get delay in samples

  \param o onset detection object as returned by new_aubio_onset()
  \return constant system delay to take back from detection time
  (in samples)

*/
uint_t aubio_onset_get_delay(const aubio_onset_t * o);

/** get delay in seconds

  \param o onset detection object as returned by new_aubio_onset()
  \return constant system delay to take back from detection time
  (in seconds)

*/
smpl_t aubio_onset_get_delay_s(const aubio_onset_t * o);

/** get delay in milliseconds

  \param o onset detection object as returned by new_aubio_onset()
  \return constant system delay to take back from detection time
  (in milliseconds)

*/
smpl_t aubio_onset_get_delay_ms(const aubio_onset_t * o);

/** get onset peak picking threshold

  \param o onset detection object as returned by new_aubio_onset()
  \return current onset detection threshold

*/
smpl_t aubio_onset_get_threshold(const aubio_onset_t * o);

/** delete onset detection object

  \param o onset detection object to delete

*/
void del_aubio_onset(aubio_onset_t * o);

#ifdef __cplusplus
}
#endif

#endif /* AUBIO_ONSET_H */