2 Copyright (C) 2003-2013 Paul Brossier <piem@aubio.org>
4 This file is part of aubio.
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.
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.
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/>.
21 #ifndef AUBIO_WAVETABLE_H
22 #define AUBIO_WAVETABLE_H
28 This file creates a wavetable and plays it at different frequency.
30 The `_do` function adds the new samples to the input, and write the result as
33 \example synth/test-wavetable.c
41 /** wavetable object */
42 typedef struct _aubio_wavetable_t aubio_wavetable_t;
44 /** create new wavetable object
46 \param samplerate the sampling rate of the new wavetable
47 \param hop_size the block size of the new wavetable
49 \return the newly created aubio_wavetable_t
52 aubio_wavetable_t * new_aubio_wavetable(uint_t samplerate, uint_t hop_size);
54 /** load source in wavetable
56 \TODO This function is not implemented yet. See new_aubio_sampler() instead.
58 \param o wavetable, created by new_aubio_wavetable()
59 \param uri the uri of the source to load
61 \return 0 if successful, non-zero otherwise
64 uint_t aubio_wavetable_load( aubio_wavetable_t * o, const char_t * uri );
66 /** process wavetable function
68 \param o wavetable, created by new_aubio_wavetable()
69 \param input input of the wavetable, to be added to the output
70 \param output output of the wavetable
72 This function adds the new samples from the playing wavetable to the output.
74 If `input` is not NULL and different from `output`, then the samples from `input`
75 are added to the output.
78 void aubio_wavetable_do ( aubio_wavetable_t * o, const fvec_t * input, fvec_t * output);
80 /** process wavetable function, multiple channels
82 \param o wavetable, created by new_aubio_wavetable()
83 \param input input of the wavetable, to be added to the output
84 \param output output of the wavetable
86 This function adds the new samples from the playing wavetable to the output.
88 If `input` is not NULL and different from `output`, then the samples from `input`
89 are added to the output.
92 void aubio_wavetable_do_multi ( aubio_wavetable_t * o, const fmat_t * input, fmat_t * output);
94 /** get current playing state
96 \param o wavetable, created by new_aubio_wavetable()
98 \return 0 if not playing, 1 if playing
101 uint_t aubio_wavetable_get_playing ( const aubio_wavetable_t * o );
103 /** set current playing state
105 \param o wavetable, created by new_aubio_wavetable()
106 \param playing 0 for not playing, 1 for playing
108 \return 0 if successful, 1 otherwise
111 uint_t aubio_wavetable_set_playing ( aubio_wavetable_t * o, uint_t playing );
113 /** play sample from start
115 \param o wavetable, created by new_aubio_wavetable()
117 \return 0 if successful, 1 otherwise
120 uint_t aubio_wavetable_play ( aubio_wavetable_t * o );
124 \param o wavetable, created by new_aubio_wavetable()
126 \return 0 if successful, 1 otherwise
129 uint_t aubio_wavetable_stop ( aubio_wavetable_t * o );
131 /** set wavetable frequency
133 \param o wavetable, created by new_aubio_wavetable()
134 \param freq new frequency value for the wavetable
136 \return 0 if successful, 1 otherwise
139 uint_t aubio_wavetable_set_freq ( aubio_wavetable_t * o, smpl_t freq );
141 /** get wavetable frequency
143 \param o wavetable, created by new_aubio_wavetable()
145 \return current frequency, in Hz
148 smpl_t aubio_wavetable_get_freq ( const aubio_wavetable_t * o);
150 /** set wavetable amplitude
152 \param o wavetable, created by new_aubio_wavetable()
153 \param amp new amplitude value for the wavetable
155 \return 0 if successful, 1 otherwise
158 uint_t aubio_wavetable_set_amp ( aubio_wavetable_t * o, smpl_t amp );
160 /** get wavetable amplitude
162 \param o wavetable, created by new_aubio_wavetable()
164 \return current amplitude
167 smpl_t aubio_wavetable_get_amp ( const aubio_wavetable_t * o);
169 /** destroy aubio_wavetable_t object
171 \param o wavetable, created by new_aubio_wavetable()
174 void del_aubio_wavetable( aubio_wavetable_t * o );
180 #endif /* AUBIO_WAVETABLE_H */