aubio  0.4.9
fmat.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2009-2015 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 AUBIO_FMAT_H
22 #define AUBIO_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 height, uint_t length);
53 
54 /** fmat_t buffer deletion function
55 
56  \param s buffer to delete as returned by new_fmat()
57 
58 */
59 void del_fmat(fmat_t *s);
60 
61 /** read sample value in a buffer
62 
63  \param s vector to read from
64  \param channel channel to read from
65  \param position sample position to read from
66 
67 */
68 smpl_t fmat_get_sample(const fmat_t *s, uint_t channel, uint_t position);
69 
70 /** write sample value in a buffer
71 
72  \param s vector to write to
73  \param data value to write in s->data[channel][position]
74  \param channel channel to write to
75  \param position sample position to write to
76 
77 */
78 void fmat_set_sample(fmat_t *s, smpl_t data, uint_t channel, uint_t position);
79 
80 /** read channel vector from a buffer
81 
82  \param s vector to read from
83  \param channel channel to read from
84  \param output ::fvec_t to output to
85 
86 */
87 void fmat_get_channel (const fmat_t *s, uint_t channel, fvec_t *output);
88 
89 /** get vector buffer from an fmat data
90 
91  \param s vector to read from
92  \param channel channel to read from
93 
94 */
95 smpl_t * fmat_get_channel_data (const fmat_t *s, uint_t channel);
96 
97 /** read data from a buffer
98 
99  \param s vector to read from
100 
101 */
102 smpl_t ** fmat_get_data(const fmat_t *s);
103 
104 /** print out fmat data
105 
106  \param s vector to print out
107 
108 */
109 void fmat_print(const fmat_t *s);
110 
111 /** set all elements to a given value
112 
113  \param s vector to modify
114  \param val value to set elements to
115 
116 */
117 void fmat_set(fmat_t *s, smpl_t val);
118 
119 /** set all elements to zero
120 
121  \param s vector to modify
122 
123 */
124 void fmat_zeros(fmat_t *s);
125 
126 /** set all elements to ones
127 
128  \param s vector to modify
129 
130 */
131 void fmat_ones(fmat_t *s);
132 
133 /** revert order of vector elements
134 
135  \param s vector to revert
136 
137 */
138 void fmat_rev(fmat_t *s);
139 
140 /** apply weight to vector
141 
142  If the weight vector is longer than s, only the first elements are used. If
143  the weight vector is shorter than s, the last elements of s are not weighted.
144 
145  \param s vector to weight
146  \param weight weighting coefficients
147 
148 */
149 void fmat_weight(fmat_t *s, const fmat_t *weight);
150 
151 /** make a copy of a matrix
152 
153  \param s source vector
154  \param t vector to copy to
155 
156 */
157 void fmat_copy(const fmat_t *s, fmat_t *t);
158 
159 /** compute the product of a matrix by a vector
160 
161  \param s matrix to compute product with
162  \param scale vector to compute product with
163  \param output vector to store restults in
164 
165 */
166 void fmat_vecmul(const fmat_t *s, const fvec_t *scale, fvec_t *output);
167 
168 #ifdef __cplusplus
169 }
170 #endif
171 
172 #endif /* AUBIO_FMAT_H */
void fmat_set_sample(fmat_t *s, smpl_t data, uint_t channel, uint_t position)
write sample value in a buffer
void fmat_vecmul(const fmat_t *s, const fvec_t *scale, fvec_t *output)
compute the product of a matrix by a vector
void fmat_rev(fmat_t *s)
revert order of vector elements
smpl_t ** fmat_get_data(const fmat_t *s)
read data from a buffer
float smpl_t
short sample format (32 or 64 bits)
Definition: types.h:41
smpl_t fmat_get_sample(const fmat_t *s, uint_t channel, uint_t position)
read sample value in a buffer
void del_fmat(fmat_t *s)
fmat_t buffer deletion function
uint_t height
height of matrix
Definition: fmat.h:42
void fmat_ones(fmat_t *s)
set all elements to ones
smpl_t * fmat_get_channel_data(const fmat_t *s, uint_t channel)
get vector buffer from an fmat data
Buffer for real data.
Definition: fvec.h:67
void fmat_zeros(fmat_t *s)
set all elements to zero
void fmat_get_channel(const fmat_t *s, uint_t channel, fvec_t *output)
read channel vector from a buffer
fmat_t * new_fmat(uint_t height, uint_t length)
fmat_t buffer creation function
unsigned int uint_t
unsigned integer
Definition: types.h:60
void fmat_print(const fmat_t *s)
print out fmat data
void fmat_set(fmat_t *s, smpl_t val)
set all elements to a given value
smpl_t ** data
data array of size [length] * [height]
Definition: fmat.h:43
Buffer for real data.
Definition: fmat.h:40
void fmat_weight(fmat_t *s, const fmat_t *weight)
apply weight to vector
uint_t length
length of matrix
Definition: fmat.h:41
void fmat_copy(const fmat_t *s, fmat_t *t)
make a copy of a matrix