aubio  0.4.9
fvec.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2003-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_FVEC_H
22 #define AUBIO_FVEC_H
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 /** \file
29 
30  Vector of real-valued data
31 
32  This file specifies the ::fvec_t buffer type, which is used throughout aubio
33  to store vector of real-valued ::smpl_t.
34 
35  \example test-fvec.c
36 
37 */
38 
39 /** Buffer for real data
40 
41  Vector of real-valued data
42 
43  ::fvec_t is is the structure used to store vector of real-valued data, ::smpl_t .
44 
45  \code
46 
47  uint_t buffer_size = 1024;
48 
49  // create a vector of 512 values
50  fvec_t * input = new_fvec (buffer_size);
51 
52  // set some values of the vector
53  input->data[23] = 2.;
54  // ..
55 
56  // compute the mean of the vector
57  mean = fvec_mean(a_vector);
58 
59  // destroy the vector
60  del_fvec(a_vector);
61 
62  \endcode
63 
64  See `examples/` and `tests/src` directories for more examples.
65 
66  */
67 typedef struct {
68  uint_t length; /**< length of buffer */
69  smpl_t *data; /**< data vector of length ::fvec_t.length */
70 } fvec_t;
71 
72 /** fvec_t buffer creation function
73 
74  \param length the length of the buffer to create
75 
76 */
77 fvec_t * new_fvec(uint_t length);
78 
79 /** fvec_t buffer deletion function
80 
81  \param s buffer to delete as returned by new_fvec()
82 
83 */
84 void del_fvec(fvec_t *s);
85 
86 /** read sample value in a buffer
87 
88  \param s vector to read from
89  \param position sample position to read from
90 
91 */
92 smpl_t fvec_get_sample(const fvec_t *s, uint_t position);
93 
94 /** write sample value in a buffer
95 
96  \param s vector to write to
97  \param data value to write in s->data[position]
98  \param position sample position to write to
99 
100 */
101 void fvec_set_sample(fvec_t *s, smpl_t data, uint_t position);
102 
103 /** read data from a buffer
104 
105  \param s vector to read from
106 
107 */
108 smpl_t * fvec_get_data(const fvec_t *s);
109 
110 /** print out fvec data
111 
112  \param s vector to print out
113 
114 */
115 void fvec_print(const fvec_t *s);
116 
117 /** set all elements to a given value
118 
119  \param s vector to modify
120  \param val value to set elements to
121 
122 */
123 void fvec_set_all (fvec_t *s, smpl_t val);
124 
125 /** set all elements to zero
126 
127  \param s vector to modify
128 
129 */
130 void fvec_zeros(fvec_t *s);
131 
132 /** set all elements to ones
133 
134  \param s vector to modify
135 
136 */
137 void fvec_ones(fvec_t *s);
138 
139 /** revert order of vector elements
140 
141  \param s vector to revert
142 
143 */
144 void fvec_rev(fvec_t *s);
145 
146 /** apply weight to vector
147 
148  If the weight vector is longer than s, only the first elements are used. If
149  the weight vector is shorter than s, the last elements of s are not weighted.
150 
151  \param s vector to weight
152  \param weight weighting coefficients
153 
154 */
155 void fvec_weight(fvec_t *s, const fvec_t *weight);
156 
157 /** make a copy of a vector
158 
159  \param s source vector
160  \param t vector to copy to
161 
162 */
163 void fvec_copy(const fvec_t *s, fvec_t *t);
164 
165 /** make a copy of a vector, applying weights to each element
166 
167  \param in input vector
168  \param weight weights vector
169  \param out output vector
170 
171 */
172 void fvec_weighted_copy(const fvec_t *in, const fvec_t *weight, fvec_t *out);
173 
174 #ifdef __cplusplus
175 }
176 #endif
177 
178 #endif /* AUBIO_FVEC_H */
void fvec_print(const fvec_t *s)
print out fvec data
void fvec_zeros(fvec_t *s)
set all elements to zero
float smpl_t
short sample format (32 or 64 bits)
Definition: types.h:41
void fvec_weight(fvec_t *s, const fvec_t *weight)
apply weight to vector
void fvec_rev(fvec_t *s)
revert order of vector elements
void fvec_set_all(fvec_t *s, smpl_t val)
set all elements to a given value
smpl_t * fvec_get_data(const fvec_t *s)
read data from a buffer
void fvec_copy(const fvec_t *s, fvec_t *t)
make a copy of a vector
Buffer for real data.
Definition: fvec.h:67
void fvec_weighted_copy(const fvec_t *in, const fvec_t *weight, fvec_t *out)
make a copy of a vector, applying weights to each element
smpl_t fvec_get_sample(const fvec_t *s, uint_t position)
read sample value in a buffer
void fvec_ones(fvec_t *s)
set all elements to ones
smpl_t * data
data vector of length fvec_t.length
Definition: fvec.h:69
unsigned int uint_t
unsigned integer
Definition: types.h:60
void fvec_set_sample(fvec_t *s, smpl_t data, uint_t position)
write sample value in a buffer
uint_t length
length of buffer
Definition: fvec.h:68
void del_fvec(fvec_t *s)
fvec_t buffer deletion function
fvec_t * new_fvec(uint_t length)
fvec_t buffer creation function