4c52a844b4c949d55e7c282b4091083ccdf1911f
[aubio.git] / src / fmat.h
1 /*
2   Copyright (C) 2009 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
21 #ifndef _FMAT_H
22 #define _FMAT_H
23
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27
28 /** \file
29
30   Matrix of real valued data
31
32   This file specifies the fmat_t type, which is used in aubio to store arrays
33   of floating point values.
34
35   \example test-fmat.c
36
37 */
38
39 /** Buffer for real data */
40 typedef struct {
41   uint_t length; /**< length of matrix */
42   uint_t height; /**< height of matrix */
43   smpl_t **data; /**< data array of size [length] * [height] */
44 } fmat_t;
45
46 /** fmat_t buffer creation function
47
48   \param length the length of the matrix to create
49   \param height the height of the matrix to create
50
51 */
52 fmat_t * new_fmat(uint_t length, uint_t height);
53 /** fmat_t buffer deletion function
54
55   \param s buffer to delete as returned by new_fmat()
56
57 */
58 void del_fmat(fmat_t *s);
59 /** read sample value in a buffer
60
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.
64
65   \param s vector to read from
66   \param channel channel to read from
67   \param position sample position to read from 
68
69 */
70 smpl_t fmat_read_sample(fmat_t *s, uint_t channel, uint_t position);
71 /** write sample value in a buffer
72
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.
76
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 
81
82 */
83 void  fmat_write_sample(fmat_t *s, smpl_t data, uint_t channel, uint_t position);
84 /** read channel vector from a buffer
85
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.
89
90   \param s vector to read from
91   \param channel channel to read from
92
93 */
94 smpl_t * fmat_get_channel(fmat_t *s, uint_t channel);
95 /** write channel vector into a buffer
96
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.
100
101   \param s vector to write to 
102   \param data vector of [length] values to write
103   \param channel channel to write to 
104
105 */
106 void fmat_put_channel(fmat_t *s, smpl_t * data, uint_t channel);
107 /** read data from a buffer
108
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.
112
113   \param s vector to read from
114
115 */
116 smpl_t ** fmat_get_data(fmat_t *s);
117
118 /** print out fmat data 
119
120   \param s vector to print out 
121
122 */
123 void fmat_print(fmat_t *s);
124
125 /** set all elements to a given value
126
127   \param s vector to modify
128   \param val value to set elements to
129
130 */
131 void fmat_set(fmat_t *s, smpl_t val);
132
133 /** set all elements to zero 
134
135   \param s vector to modify
136
137 */
138 void fmat_zeros(fmat_t *s);
139
140 /** set all elements to ones 
141
142   \param s vector to modify
143
144 */
145 void fmat_ones(fmat_t *s);
146
147 /** revert order of vector elements
148
149   \param s vector to revert
150
151 */
152 void fmat_rev(fmat_t *s);
153
154 /** apply weight to vector
155
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.
158
159   \param s vector to weight
160   \param weight weighting coefficients
161
162 */
163 void fmat_weight(fmat_t *s, fmat_t *weight);
164
165 /** make a copy of a matrix 
166
167   \param s source vector
168   \param t vector to copy to
169
170 */
171 void fmat_copy(fmat_t *s, fmat_t *t);
172
173 #ifdef __cplusplus
174 }
175 #endif
176
177 #endif /* _FMAT_H */