2 Copyright (C) 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/>.
30 Matrix of real valued data
32 This file specifies the fmat_t type, which is used in aubio to store arrays
33 of floating point values.
39 /** Buffer for real data */
41 uint_t length; /**< length of matrix */
42 uint_t height; /**< height of matrix */
43 smpl_t **data; /**< data array of size [length] * [height] */
46 /** fmat_t buffer creation function
48 \param length the length of the matrix to create
49 \param height the height of the matrix to create
52 fmat_t * new_fmat(uint_t length, uint_t height);
53 /** fmat_t buffer deletion function
55 \param s buffer to delete as returned by new_fmat()
58 void del_fmat(fmat_t *s);
59 /** read sample value in a buffer
61 Note that this function is not used in the aubio library, since the same
62 result can be obtained using vec->data[channel][position]. Its purpose is to
63 access these values from wrappers, as created by swig.
65 \param s vector to read from
66 \param channel channel to read from
67 \param position sample position to read from
70 smpl_t fmat_read_sample(fmat_t *s, uint_t channel, uint_t position);
71 /** write sample value in a buffer
73 Note that this function is not used in the aubio library, since the same
74 result can be obtained by assigning vec->data[channel][position]. Its purpose
75 is to access these values from wrappers, as created by swig.
77 \param s vector to write to
78 \param data value to write in s->data[channel][position]
79 \param channel channel to write to
80 \param position sample position to write to
83 void fmat_write_sample(fmat_t *s, smpl_t data, uint_t channel, uint_t position);
84 /** read channel vector from a buffer
86 Note that this function is not used in the aubio library, since the same
87 result can be obtained with vec->data[channel]. Its purpose is to access
88 these values from wrappers, as created by swig.
90 \param s vector to read from
91 \param channel channel to read from
94 void fmat_get_channel (fmat_t *s, uint_t channel, fvec_t *output);
95 /** write channel vector into a buffer
97 Note that this function is not used in the aubio library, since the same
98 result can be obtained by assigning vec->data[channel]. Its purpose is to
99 access these values from wrappers, as created by swig.
101 \param s vector to write to
102 \param data vector of [length] values to write
103 \param channel channel to write to
106 void fmat_put_channel(fmat_t *s, smpl_t * data, uint_t channel);
107 /** read data from a buffer
109 Note that this function is not used in the aubio library, since the same
110 result can be obtained with vec->data. Its purpose is to access these values
111 from wrappers, as created by swig.
113 \param s vector to read from
116 smpl_t ** fmat_get_data(fmat_t *s);
118 /** print out fmat data
120 \param s vector to print out
123 void fmat_print(fmat_t *s);
125 /** set all elements to a given value
127 \param s vector to modify
128 \param val value to set elements to
131 void fmat_set(fmat_t *s, smpl_t val);
133 /** set all elements to zero
135 \param s vector to modify
138 void fmat_zeros(fmat_t *s);
140 /** set all elements to ones
142 \param s vector to modify
145 void fmat_ones(fmat_t *s);
147 /** revert order of vector elements
149 \param s vector to revert
152 void fmat_rev(fmat_t *s);
154 /** apply weight to vector
156 If the weight vector is longer than s, only the first elements are used. If
157 the weight vector is shorter than s, the last elements of s are not weighted.
159 \param s vector to weight
160 \param weight weighting coefficients
163 void fmat_weight(fmat_t *s, fmat_t *weight);
165 /** make a copy of a matrix
167 \param s source vector
168 \param t vector to copy to
171 void fmat_copy(fmat_t *s, fmat_t *t);