X-Git-Url: http://git.tremily.us/?a=blobdiff_plain;f=src%2Fcvec.h;h=0e344e4076ba541ba2d71ac5080fc98c6fea2980;hb=HEAD;hp=9ff948bcf117d51c7c6f053d95747bfc6c14d175;hpb=012466b44a87cb98da5a4352afbffad746e290fa;p=aubio.git diff --git a/src/cvec.h b/src/cvec.h index 9ff948bc..0e344e40 100644 --- a/src/cvec.h +++ b/src/cvec.h @@ -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