wscript: With --enable-$x, the existence of $x should be mandatory
[aubio.git] / src / cvec.h
index 9ff948bcf117d51c7c6f053d95747bfc6c14d175..0e344e4076ba541ba2d71ac5080fc98c6fea2980 100644 (file)
@@ -19,7 +19,7 @@
 */
 
 #ifndef _CVEC_H
-#define _CVEC_H_
+#define _CVEC_H
 
 #ifdef __cplusplus
 extern "C" {
@@ -27,37 +27,57 @@ extern "C" {
 
 /** \file
 
-  Complex buffers
+  Vector of complex-valued data
 
-  This file specifies the cvec_t buffer type, which is used throughout aubio to
-  store complex data. Complex values are stored in terms of phase and
-  norm, within size/2+1 long vectors.
+  This file specifies the ::cvec_t buffer type, which is used throughout aubio
+  to store complex data. Complex values are stored in terms of ::cvec_t.phas
+  and norm, within size/2+1 long vectors of ::smpl_t.
+
+  \example test-cvec.c
 
 */
 
-/** Spectrum buffer type */
-typedef struct _cvec_t cvec_t;
-/** Buffer for complex data */
-struct _cvec_t {
-  uint_t length;   /**< length of buffer = (requested length)/2 + 1 */
-  uint_t channels; /**< number of channels */
-  smpl_t **norm;   /**< norm array of size [length] * [channels] */
-  smpl_t **phas;   /**< phase array of size [length] * [channels] */
-};
+/** Buffer for complex data
+
+  \code
+
+  uint_t buffer_size = 1024;
+
+  // create a complex vector of 512 values
+  cvec_t * input = new_cvec (buffer_size);
+
+  // set some values of the vector
+  input->norm[23] = 2.;
+  input->phas[23] = M_PI;
+  // ..
+
+  // compute the mean of the vector
+  mean = cvec_mean(input);
+
+  // destroy the vector
+  del_cvec (input);
+
+  \endcode
+
+ */
+typedef struct {
+  uint_t length;  /**< length of buffer = (requested length)/2 + 1 */
+  smpl_t *norm;   /**< norm array of size ::cvec_t.length */
+  smpl_t *phas;   /**< phase array of size ::cvec_t.length */
+} cvec_t;
 
 /** cvec_t buffer creation function
 
   This function creates a cvec_t structure holding two arrays of size
-  [length/2+1] * channels, corresponding to the norm and phase values of the
+  [length/2+1], corresponding to the norm and phase values of the
   spectral frame. The length stored in the structure is the actual size of both
-  arrays, not the length of the complex and symetrical vector, specified as
+  arrays, not the length of the complex and symmetrical vector, specified as
   creation argument.
 
   \param length the length of the buffer to create
-  \param channels the number of channels in the buffer
 
 */
-cvec_t * new_cvec(uint_t length, uint_t channels);
+cvec_t * new_cvec(uint_t length);
 /** cvec_t buffer deletion function
 
   \param s buffer to delete as returned by new_cvec()
@@ -67,99 +87,49 @@ void del_cvec(cvec_t *s);
 /** write norm value in a complex buffer
 
   Note that this function is not used in the aubio library, since the same
-  result can be obtained by assigning vec->norm[channel][position]. Its purpose
+  result can be obtained by assigning vec->norm[position]. Its purpose
   is to access these values from wrappers, as created by swig.
 
-  \param s vector to write to 
-  \param data norm value to write in s->norm[channel][position]
-  \param channel channel to write to 
+  \param s vector to write to
+  \param data norm value to write in s->norm[position]
   \param position sample position to write to
 
 */
-void cvec_write_norm(cvec_t *s, smpl_t data, uint_t channel, uint_t position);
+void cvec_write_norm(cvec_t *s, smpl_t data, uint_t position);
 /** write phase value in a complex buffer
 
   Note that this function is not used in the aubio library, since the same
-  result can be obtained by assigning vec->phas[channel][position]. Its purpose
+  result can be obtained by assigning vec->phas[position]. Its purpose
   is to access these values from wrappers, as created by swig.
 
   \param s vector to write to
-  \param data phase value to write in s->phas[channel][position]
-  \param channel channel to write to
+  \param data phase value to write in s->phas[position]
   \param position sample position to write to
 
 */
-void cvec_write_phas(cvec_t *s, smpl_t data, uint_t channel, uint_t position);
+void cvec_write_phas(cvec_t *s, smpl_t data, uint_t position);
 /** read norm value from a complex buffer
 
   Note that this function is not used in the aubio library, since the same
-  result can be obtained with vec->norm[channel][position]. Its purpose is to
+  result can be obtained with vec->norm[position]. Its purpose is to
   access these values from wrappers, as created by swig.
 
   \param s vector to read from
-  \param channel channel to read from
   \param position sample position to read from
 
 */
-smpl_t cvec_read_norm(cvec_t *s, uint_t channel, uint_t position);
+smpl_t cvec_read_norm(cvec_t *s, uint_t position);
 /** read phase value from a complex buffer
 
   Note that this function is not used in the aubio library, since the same
-  result can be obtained with vec->phas[channel][position]. Its purpose is to
+  result can be obtained with vec->phas[position]. Its purpose is to
   access these values from wrappers, as created by swig.
 
   \param s vector to read from
-  \param channel channel to read from
   \param position sample position to read from
 
 */
-smpl_t cvec_read_phas(cvec_t *s, uint_t channel, uint_t position);
-/** write norm channel in a complex buffer
-
-  Note that this function is not used in the aubio library, since the same
-  result can be obtained by assigning vec->norm[channel]. Its purpose is to
-  access these values from wrappers, as created by swig.
-
-  \param s vector to write to
-  \param data norm vector of [length] samples to write in s->norm[channel]
-  \param channel channel to write to
-
-*/
-void cvec_put_norm_channel(cvec_t *s, smpl_t * data, uint_t channel);
-/** write phase channel in a complex buffer
-
-  Note that this function is not used in the aubio library, since the same
-  result can be obtained by assigning vec->phas[channel]. Its purpose is to
-  access these values from wrappers, as created by swig.
-
-  \param s vector to write to
-  \param data phase vector of [length] samples to write in s->phas[channel]
-  \param channel channel to write to
-
-*/
-void cvec_put_phas_channel(cvec_t *s, smpl_t * data, uint_t channel);
-/** read norm channel from a complex buffer
-
-  Note that this function is not used in the aubio library, since the same
-  result can be obtained with vec->norm[channel]. Its purpose is to access
-  these values from wrappers, as created by swig.
-
-  \param s vector to read from 
-  \param channel channel to read from
-
-*/
-smpl_t * cvec_get_norm_channel(cvec_t *s, uint_t channel);
-/** write phase channel in a complex buffer
-
-  Note that this function is not used in the aubio library, since the same
-  result can be obtained with vec->phas[channel]. Its purpose is to access
-  these values from wrappers, as created by swig.
-
-  \param s vector to read from 
-  \param channel channel to read from 
-
-*/
-smpl_t * cvec_get_phas_channel(cvec_t *s, uint_t channel);
+smpl_t cvec_read_phas(cvec_t *s, uint_t position);
 /** read norm data from a complex buffer
 
   Note that this function is not used in the aubio library, since the same
@@ -169,7 +139,7 @@ smpl_t * cvec_get_phas_channel(cvec_t *s, uint_t channel);
   \param s vector to read from
 
 */
-smpl_t ** cvec_get_norm(cvec_t *s);
+smpl_t * cvec_get_norm(cvec_t *s);
 /** read phase data from a complex buffer
 
   Note that this function is not used in the aubio library, since the same
@@ -179,11 +149,11 @@ smpl_t ** cvec_get_norm(cvec_t *s);
   \param s vector to read from
 
 */
-smpl_t ** cvec_get_phas(cvec_t *s);
+smpl_t * cvec_get_phas(cvec_t *s);
 
-/** print out cvec data 
+/** print out cvec data
 
-  \param s vector to print out 
+  \param s vector to print out
 
 */
 void cvec_print(cvec_t *s);
@@ -196,14 +166,14 @@ void cvec_print(cvec_t *s);
 */
 void cvec_set(cvec_t *s, smpl_t val);
 
-/** set all elements to zero 
+/** set all elements to zero
 
   \param s vector to modify
 
 */
 void cvec_zeros(cvec_t *s);
 
-/** set all elements to ones 
+/** set all elements to ones
 
   \param s vector to modify