2 Copyright (C) 2003-2009 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/>.
32 This file specifies the fvec_t buffer type, which is used throughout aubio to
37 /** Sample buffer type */
38 typedef struct _fvec_t fvec_t;
39 /** Buffer for real values */
41 uint_t length; /**< length of buffer */
42 uint_t channels; /**< number of channels */
43 smpl_t **data; /**< data array of size [length] * [channels] */
45 /** fvec_t buffer creation function
47 \param length the length of the buffer to create
48 \param channels the number of channels in the buffer
51 fvec_t * new_fvec(uint_t length, uint_t channels);
52 /** fvec_t buffer deletion function
54 \param s buffer to delete as returned by new_fvec()
57 void del_fvec(fvec_t *s);
58 /** read sample value in a buffer
60 Note that this function is not used in the aubio library, since the same
61 result can be obtained using vec->data[channel][position]. Its purpose is to
62 access these values from wrappers, as created by swig.
64 \param s vector to read from
65 \param channel channel to read from
66 \param position sample position to read from
69 smpl_t fvec_read_sample(fvec_t *s, uint_t channel, uint_t position);
70 /** write sample value in a buffer
72 Note that this function is not used in the aubio library, since the same
73 result can be obtained by assigning vec->data[channel][position]. Its purpose
74 is to access these values from wrappers, as created by swig.
76 \param s vector to write to
77 \param data value to write in s->data[channel][position]
78 \param channel channel to write to
79 \param position sample position to write to
82 void fvec_write_sample(fvec_t *s, smpl_t data, uint_t channel, uint_t position);
83 /** read channel vector from a buffer
85 Note that this function is not used in the aubio library, since the same
86 result can be obtained with vec->data[channel]. Its purpose is to access
87 these values from wrappers, as created by swig.
89 \param s vector to read from
90 \param channel channel to read from
93 smpl_t * fvec_get_channel(fvec_t *s, uint_t channel);
94 /** write channel vector into a buffer
96 Note that this function is not used in the aubio library, since the same
97 result can be obtained by assigning vec->data[channel]. Its purpose is to
98 access these values from wrappers, as created by swig.
100 \param s vector to write to
101 \param data vector of [length] values to write
102 \param channel channel to write to
105 void fvec_put_channel(fvec_t *s, smpl_t * data, uint_t channel);
106 /** read data from a buffer
108 Note that this function is not used in the aubio library, since the same
109 result can be obtained with vec->data. Its purpose is to access these values
110 from wrappers, as created by swig.
112 \param s vector to read from
115 smpl_t ** fvec_get_data(fvec_t *s);
117 /** print out fvec data
119 \param s vector to print out
122 void fvec_print(fvec_t *s);
124 /** set all elements to a given value
126 \param s vector to modify
127 \param val value to set elements to
130 void fvec_set(fvec_t *s, smpl_t val);
132 /** set all elements to zero
134 \param s vector to modify
137 void fvec_zeros(fvec_t *s);
139 /** set all elements to ones
141 \param s vector to modify
144 void fvec_ones(fvec_t *s);
146 /** revert order of vector elements
148 \param s vector to revert
151 void fvec_rev(fvec_t *s);
153 /** apply weight to vector
155 If the weight vector is longer than s, only the first elements are used. If
156 the weight vector is shorter than s, the last elements of s are not weighted.
158 \param s vector to weight
159 \param weight weighting coefficients
162 void fvec_weight(fvec_t *s, fvec_t *weight);
164 /** make a copy of a vector
166 \param s source vector
167 \param t vector to copy to
170 void fvec_copy(fvec_t *s, fvec_t *t);