source: src/synth/sampler.h @ 1686fcf

sampler
Last change on this file since 1686fcf was 1686fcf, checked in by Paul Brossier <piem@piem.org>, 7 years ago

src/synth/sampler.h: add aubio_sampler_get_duration

  • Property mode set to 100644
File size: 7.7 KB
RevLine 
[04c8346]1/*
2  Copyright (C) 2003-2013 Paul Brossier <piem@aubio.org>
3
4  This file is part of aubio.
5
6  aubio is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10
11  aubio is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  GNU General Public License for more details.
15
16  You should have received a copy of the GNU General Public License
17  along with aubio.  If not, see <http://www.gnu.org/licenses/>.
18
19*/
20
[6f42c16]21#ifndef AUBIO_SAMPLER_H
22#define AUBIO_SAMPLER_H
[04c8346]23
24/** \file
25
[88042ef]26  Load and play a sound file.
[04c8346]27
28  This file loads a sample and gets ready to play it.
29
30  The `_do` function adds the new samples to the input, and write the result as
31  the output.
32
[88042ef]33TODO:
34  - add _preset_threaded(level)
[f651625]35  - rename _set_loop/_get_loop to _set_looping/_get_looping
36  - add option to pass a callback to signal eof
[88042ef]37
[04c8346]38  \example synth/test-sampler.c
39
40*/
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46/** sampler object */
47typedef struct _aubio_sampler_t aubio_sampler_t;
48
49/** create new sampler object
50
51  \param samplerate the sampling rate of the new sampler
[2b6139e7]52  \param hop_size the block size of the new sampler
[04c8346]53
54  \return the newly created ::aubio_sampler_t
55
56*/
[88042ef]57aubio_sampler_t * new_aubio_sampler(uint_t hop_size, uint_t samplerate);
[04c8346]58
59/** load source in sampler
60
[2b6139e7]61  \param o sampler, created by new_aubio_sampler()
[04c8346]62  \param uri the uri of the source to load
63
64  \return 0 if successful, non-zero otherwise
65
[6cc2d9d]66  This function attempts to load a new source, swaps the current one with the
67  newly loaded one (or NULL if loading failed), then delete the old one.
68
[04c8346]69*/
[ce3ff2b]70uint_t aubio_sampler_load( aubio_sampler_t * o, const char_t * uri );
[04c8346]71
[88042ef]72/** queue source in sampler
73
74  \param o sampler, created by new_aubio_sampler()
75  \param uri the uri of the source to load
76
77  \return 0 if successfully queued, non-zero otherwise
78
[6cc2d9d]79  This function is identical to aubio_sampler_load(), except it will be called
80  in its own thread to avoid blocking calls to aubio_sampler_do().
81
[88042ef]82*/
83uint_t aubio_sampler_queue(aubio_sampler_t * o, const char_t * uri );
84
[2ca4b59]85/** set array to read from
86
87  \param o sampler, created by new_aubio_sampler()
88  \param samples the vector to set the table to
89
90  \return 0 if successfully set, non-zero otherwise
91
92*/
93uint_t aubio_sampler_set_table(aubio_sampler_t *o, fvec_t *samples);
94
[04c8346]95/** process sampler function
96
[2b6139e7]97  \param o sampler, created by new_aubio_sampler()
[04c8346]98  \param output output of the sampler
[98861c6]99  \param read will be set to then number of samples actually read
[6cc2d9d]100
101  This function get new samples from the sampler and store them into output.
[04c8346]102
[6cc2d9d]103  The output vector will be completed with 0 if too few samples are available.
[04c8346]104
105*/
[88042ef]106void aubio_sampler_do ( aubio_sampler_t * o, fvec_t * output, uint_t *read);
[04c8346]107
108/** process sampler function, multiple channels
109
[2b6139e7]110  \param o sampler, created by new_aubio_sampler()
[04c8346]111  \param output output of the sampler
[98861c6]112  \param read will be set to the number of samples actually read
[04c8346]113
[8b07fa9]114  This function is identical to aubio_sampler_do(), but for a multi-channel source.
[04c8346]115
116*/
[88042ef]117void aubio_sampler_do_multi ( aubio_sampler_t * o, fmat_t * output, uint_t *read);
[04c8346]118
119/** get current playing state
120
[2b6139e7]121  \param o sampler, created by new_aubio_sampler()
[04c8346]122
123  \return 0 if not playing, 1 if playing
124
125*/
[ce3ff2b]126uint_t aubio_sampler_get_playing ( const aubio_sampler_t * o );
[04c8346]127
128/** set current playing state
129
[2b6139e7]130  \param o sampler, created by new_aubio_sampler()
[04c8346]131  \param playing 0 for not playing, 1 for playing
132
133  \return 0 if successful, 1 otherwise
134
135*/
136uint_t aubio_sampler_set_playing ( aubio_sampler_t * o, uint_t playing );
137
[98861c6]138/** get current looping state
139
140  \param o sampler, created by new_aubio_sampler()
141
142  \return 0 if not looping , 1 if looping
143
144*/
[88042ef]145uint_t aubio_sampler_get_loop(aubio_sampler_t * o);
146
147/** set current looping state
148
149  \param o sampler, created by new_aubio_sampler()
[98861c6]150  \param loop 0 for not looping, 1 for looping
[88042ef]151
152  \return 0 if successful, 1 otherwise
153
154*/
155uint_t aubio_sampler_set_loop(aubio_sampler_t * o, uint_t loop);
156
[f651625]157/** play sample
[04c8346]158
[2b6139e7]159  \param o sampler, created by new_aubio_sampler()
[04c8346]160
161  \return 0 if successful, 1 otherwise
162
163*/
164uint_t aubio_sampler_play ( aubio_sampler_t * o );
165
[88042ef]166/** play sample from start, looping it
167
168  \param o sampler, created by new_aubio_sampler()
169
170  \return 0 if successful, 1 otherwise
171
172*/
173uint_t aubio_sampler_loop ( aubio_sampler_t * o );
174
175/** play sample from start, once
176
177  \param o sampler, created by new_aubio_sampler()
178
179  \return 0 if successful, 1 otherwise
180
181*/
182uint_t aubio_sampler_trigger ( aubio_sampler_t * o );
183
[2b6139e7]184/** stop sample
[04c8346]185
[2b6139e7]186  \param o sampler, created by new_aubio_sampler()
[04c8346]187
188  \return 0 if successful, 1 otherwise
189
190*/
191uint_t aubio_sampler_stop ( aubio_sampler_t * o );
192
[88042ef]193/** get end-of-file status
194
195  \param o sampler, created by new_aubio_sampler()
196
197  \return 1 when the eof is being reached, 0 otherwise
198
199*/
200uint_t aubio_sampler_get_eof(aubio_sampler_t * o);
201
202/** get end-of-file status
203
204  \param o sampler, created by new_aubio_sampler()
205
[f651625]206  \return 1 when end of file has been reached, 0 otherwise
[88042ef]207
208*/
209uint_t aubio_sampler_get_finished (aubio_sampler_t * o);
210
211/** get samplerate
212
213  \param o sampler, created by new_aubio_sampler()
214
215  \return samplerate of the sampler
216
217*/
218uint_t aubio_sampler_get_samplerate(aubio_sampler_t * o);
219
[1686fcf]220/** get duration
221
222  \param o sampler, created by new_aubio_sampler()
223
224  \return duration of the opened uri, in samples
225
226*/
227uint_t aubio_sampler_get_duration(aubio_sampler_t * o);
228
[88042ef]229/** get the number of samples that were set to zero while opening a file
230
231  \param o sampler, created by new_aubio_sampler()
[0a756ea]232  \param waited the number of frames processed during this block
[88042ef]233
[0a756ea]234  \return the total delay in samples when the file was successfuly opened, 0
235  otherwise
[88042ef]236
237*/
238uint_t aubio_sampler_get_waited_opening(aubio_sampler_t * o, uint_t waited);
239
[82ad1ed]240/** get current time stretching factor
241
242  \param o sampler, created by new_aubio_sampler()
243
244  \return the current time stretch factor
245
246 */
247smpl_t aubio_sampler_get_stretch (aubio_sampler_t *o);
248
249/** set current time stretching factor
250
251  \param o sampler, created by new_aubio_sampler()
252  \param stretch new time stretching factor
253
254  \return AUBIO_OK on success, AUBIO_FAIL otherwise
255
256 */
257uint_t aubio_sampler_set_stretch (aubio_sampler_t *o, smpl_t stretch);
258
259/** get current pitch shifting factor
260
261  \param o sampler, created by new_aubio_sampler()
262
263  \return the current pitch transposition factor
264
265 */
266smpl_t aubio_sampler_get_transpose (aubio_sampler_t *o);
267
268/** set current pitch shifting factor
269
270  \param o sampler, created by new_aubio_sampler()
271  \param transpose new pitch shifting (transposition) factor
272
273  \return AUBIO_OK on success, AUBIO_FAIL otherwise
274
275 */
276uint_t aubio_sampler_set_transpose (aubio_sampler_t *o, smpl_t transpose);
277
[943ef49]278/** get the current perfect loop mode
279
280  \param o sampler, created by new_aubio_sampler()
281
282  \return the total delay in samples when the file was successfuly opened, 0
283  otherwise
284
285*/
286uint_t aubio_sampler_get_perfectloop (aubio_sampler_t *o);
287
288/** set the perfect loop mode
289
290  \param o sampler, created by new_aubio_sampler()
291  \param perfectloop 1 to set perfect loop mode, 0 to turn it of
292
293  \return AUBIO_OK on success, AUBIO_FAIL otherwise
294
295 */
296uint_t aubio_sampler_set_perfectloop (aubio_sampler_t *o, uint_t perfectloop);
297
[88042ef]298/** seek to position
299
300  \param o sampler, created by new_aubio_sampler()
301  \param pos position to seek to, in samples
302
303  \return 0 if successful, 1 otherwise
304
305*/
306uint_t aubio_sampler_seek(aubio_sampler_t * o, uint_t pos);
307
[04c8346]308/** destroy ::aubio_sampler_t object
309
[2b6139e7]310  \param o sampler, created by new_aubio_sampler()
[04c8346]311
312*/
313void del_aubio_sampler( aubio_sampler_t * o );
314
315#ifdef __cplusplus
316}
317#endif
318
[6f42c16]319#endif /* AUBIO_SAMPLER_H */
Note: See TracBrowser for help on using the repository browser.