splitted sample.c into fvec.c and cvec.c, kept sample.h for convenience
authorPaul Brossier <piem@piem.org>
Thu, 1 Nov 2007 13:29:08 +0000 (14:29 +0100)
committerPaul Brossier <piem@piem.org>
Thu, 1 Nov 2007 13:29:08 +0000 (14:29 +0100)
src/Makefile.am
src/cvec.c [moved from src/sample.c with 69% similarity]
src/cvec.h [new file with mode: 0644]
src/fvec.c [new file with mode: 0644]
src/fvec.h [new file with mode: 0644]
src/sample.h

index 1ca5d68f16a2d62d84ea3605033103e3c9646af3..c57d72d3de7a243ced4110239671924d91f4708a 100644 (file)
@@ -5,6 +5,8 @@ pkginclude_HEADERS = aubio.h \
        mathutils.h \
        fft.h \
        sample.h \
+       fvec.h \
+       cvec.h \
        hist.h \
        scale.h \
        resample.h \
@@ -33,8 +35,10 @@ libaubio_la_SOURCES = aubio.h \
        mathutils.h \
        fft.c \
        fft.h \
-       sample.c \
-       sample.h \
+       fvec.c \
+       fvec.h \
+       cvec.c \
+       cvec.h \
        hist.c \
        hist.h \
        scale.c \
similarity index 69%
rename from src/sample.c
rename to src/cvec.c
index c85694a30863da53aa3b9c3f72b5bb734f9b1d34..74840dbbd4ec3441fcb91d5a0c17cb1d8c472933 100644 (file)
@@ -1,5 +1,5 @@
 /*
-   Copyright (C) 2003 Paul Brossier
+   Copyright (C) 2003-2007 Paul Brossier <piem@piem.org>
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 */
 
 #include "aubio_priv.h"
-#include "sample.h"
-
-fvec_t * new_fvec( uint_t length, uint_t channels) {
-  fvec_t * s = AUBIO_NEW(fvec_t);
-  uint_t i,j;
-  s->channels = channels;
-  s->length = length;
-  s->data = AUBIO_ARRAY(smpl_t*,s->channels);
-  for (i=0; i< s->channels; i++) {
-    s->data[i] = AUBIO_ARRAY(smpl_t, s->length);
-    for (j=0; j< s->length; j++) {
-      s->data[i][j]=0.;
-    }
-  }
-  return s;
-}
-
-void del_fvec(fvec_t *s) {
-  uint_t i;
-  for (i=0; i<s->channels; i++) {
-    AUBIO_FREE(s->data[i]);
-  }
-  AUBIO_FREE(s->data);
-  AUBIO_FREE(s);
-}
-
-void fvec_write_sample(fvec_t *s, smpl_t data, uint_t channel, uint_t position) {
-  s->data[channel][position] = data;
-}
-smpl_t fvec_read_sample(fvec_t *s, uint_t channel, uint_t position) {
-  return s->data[channel][position];
-}
-void fvec_put_channel(fvec_t *s, smpl_t * data, uint_t channel) {
-  s->data[channel] = data;
-}
-smpl_t * fvec_get_channel(fvec_t *s, uint_t channel) {
-  return s->data[channel];
-}
-
-smpl_t ** fvec_get_data(fvec_t *s) {
-  return s->data;
-}
+#include "cvec.h"
 
 cvec_t * new_cvec( uint_t length, uint_t channels) {
   cvec_t * s = AUBIO_NEW(cvec_t);
@@ -120,3 +79,4 @@ smpl_t ** cvec_get_norm(cvec_t *s) {
 smpl_t ** cvec_get_phas(cvec_t *s) {
   return s->phas;
 }
+
diff --git a/src/cvec.h b/src/cvec.h
new file mode 100644 (file)
index 0000000..1029d89
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+   Copyright (C) 2003-2007 Paul Brossier <piem@piem.org>
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef _CVEC_H
+#define _CVEC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \file
+
+  Real and complex buffers
+
+  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.
+
+*/
+
+/** 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] */
+};
+
+/** 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
+  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
+  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 buffer deletion function
+
+  \param s buffer to delete as returned by new_cvec()
+
+*/
+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
+  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 position sample position to write to
+
+*/
+void cvec_write_norm(cvec_t *s, smpl_t data, uint_t channel, 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
+  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 position sample position to write to
+
+*/
+void cvec_write_phas(cvec_t *s, smpl_t data, uint_t channel, 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
+  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);
+/** 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
+  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);
+/** read norm data 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. Its purpose is to access these values
+  from wrappers, as created by swig.
+
+  \param s vector to read from
+
+*/
+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
+  result can be obtained with vec->phas. Its purpose is to access these values
+  from wrappers, as created by swig.
+
+  \param s vector to read from
+
+*/
+smpl_t ** cvec_get_phas(cvec_t *s);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CVEC_H */
+
diff --git a/src/fvec.c b/src/fvec.c
new file mode 100644 (file)
index 0000000..941830b
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+   Copyright (C) 2003-2007 Paul Brossier <piem@piem.org>
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "aubio_priv.h"
+#include "sample.h"
+
+fvec_t * new_fvec( uint_t length, uint_t channels) {
+  fvec_t * s = AUBIO_NEW(fvec_t);
+  uint_t i,j;
+  s->channels = channels;
+  s->length = length;
+  s->data = AUBIO_ARRAY(smpl_t*,s->channels);
+  for (i=0; i< s->channels; i++) {
+    s->data[i] = AUBIO_ARRAY(smpl_t, s->length);
+    for (j=0; j< s->length; j++) {
+      s->data[i][j]=0.;
+    }
+  }
+  return s;
+}
+
+void del_fvec(fvec_t *s) {
+  uint_t i;
+  for (i=0; i<s->channels; i++) {
+    AUBIO_FREE(s->data[i]);
+  }
+  AUBIO_FREE(s->data);
+  AUBIO_FREE(s);
+}
+
+void fvec_write_sample(fvec_t *s, smpl_t data, uint_t channel, uint_t position) {
+  s->data[channel][position] = data;
+}
+smpl_t fvec_read_sample(fvec_t *s, uint_t channel, uint_t position) {
+  return s->data[channel][position];
+}
+void fvec_put_channel(fvec_t *s, smpl_t * data, uint_t channel) {
+  s->data[channel] = data;
+}
+smpl_t * fvec_get_channel(fvec_t *s, uint_t channel) {
+  return s->data[channel];
+}
+
+smpl_t ** fvec_get_data(fvec_t *s) {
+  return s->data;
+}
+
diff --git a/src/fvec.h b/src/fvec.h
new file mode 100644 (file)
index 0000000..1d78852
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+   Copyright (C) 2003-2007 Paul Brossier <piem@piem.org>
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef _FVEC_H
+#define _FVEC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \file
+
+  Real buffers
+
+  This file specifies the fvec_t buffer type, which is used throughout aubio to
+  store real data.
+
+*/
+
+/** Sample buffer type */
+typedef struct _fvec_t fvec_t;
+/** Buffer for real values */
+struct _fvec_t {
+  uint_t length;   /**< length of buffer */
+  uint_t channels; /**< number of channels */
+  smpl_t **data;   /**< data array of size [length] * [channels] */
+};
+/** fvec_t buffer creation function
+
+  \param length the length of the buffer to create
+  \param channels the number of channels in the buffer
+
+*/
+fvec_t * new_fvec(uint_t length, uint_t channels);
+/** fvec_t buffer deletion function
+
+  \param s buffer to delete as returned by new_fvec()
+
+*/
+void del_fvec(fvec_t *s);
+/** read sample value in a buffer
+
+  Note that this function is not used in the aubio library, since the same
+  result can be obtained using vec->data[channel][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 fvec_read_sample(fvec_t *s, uint_t channel, uint_t position);
+/** write sample value in a buffer
+
+  Note that this function is not used in the aubio library, since the same
+  result can be obtained by assigning vec->data[channel][position]. Its purpose
+  is to access these values from wrappers, as created by swig.
+
+  \param s vector to write to 
+  \param data value to write in s->data[channel][position]
+  \param channel channel to write to 
+  \param position sample position to write to 
+
+*/
+void  fvec_write_sample(fvec_t *s, smpl_t data, uint_t channel, uint_t position);
+/** read channel vector from a buffer
+
+  Note that this function is not used in the aubio library, since the same
+  result can be obtained with vec->data[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 * fvec_get_channel(fvec_t *s, uint_t channel);
+/** write channel vector into a buffer
+
+  Note that this function is not used in the aubio library, since the same
+  result can be obtained by assigning vec->data[channel]. Its purpose is to
+  access these values from wrappers, as created by swig.
+
+  \param s vector to write to 
+  \param data vector of [length] values to write
+  \param channel channel to write to 
+
+*/
+void fvec_put_channel(fvec_t *s, smpl_t * data, uint_t channel);
+/** read data from a buffer
+
+  Note that this function is not used in the aubio library, since the same
+  result can be obtained with vec->data. Its purpose is to access these values
+  from wrappers, as created by swig.
+
+  \param s vector to read from
+
+*/
+smpl_t ** fvec_get_data(fvec_t *s);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FVEC_H */
index 13ac31d0d816840068c6a38ea7613af0af674591..c8b03fb2f0b545e027b4a863ab42c3269d64ea3b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-   Copyright (C) 2003 Paul Brossier
+   Copyright (C) 2003-2007 Paul Brossier <piem@piem.org>
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #ifndef _SAMPLE_H
 #define _SAMPLE_H
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** \file
-
-  Real and complex buffers
-
-  This file specifies fvec_t and cvec_t buffers types, which are used
-  throughout aubio to store real and complex data. Complex values are stored in
-  terms of phase and norm.
-
-*/
-
-/** Sample buffer type */
-typedef struct _fvec_t fvec_t;
-/** Spectrum buffer type */
-typedef struct _cvec_t cvec_t;
-/** Buffer for real values */
-struct _fvec_t {
-  uint_t length;   /**< length of buffer */
-  uint_t channels; /**< number of channels */
-  smpl_t **data;   /**< data array of size [length] * [channels] */
-};
-/** 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] */
-};
-/** fvec_t buffer creation function
-
-  \param length the length of the buffer to create
-  \param channels the number of channels in the buffer
-
-*/
-fvec_t * new_fvec(uint_t length, uint_t channels);
-/** fvec_t buffer deletion function
-
-  \param s buffer to delete as returned by new_fvec()
-
-*/
-void del_fvec(fvec_t *s);
-/** read sample value in a buffer
-
-  Note that this function is not used in the aubio library, since the same
-  result can be obtained using vec->data[channel][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 fvec_read_sample(fvec_t *s, uint_t channel, uint_t position);
-/** write sample value in a buffer
-
-  Note that this function is not used in the aubio library, since the same
-  result can be obtained by assigning vec->data[channel][position]. Its purpose
-  is to access these values from wrappers, as created by swig.
-
-  \param s vector to write to 
-  \param data value to write in s->data[channel][position]
-  \param channel channel to write to 
-  \param position sample position to write to 
-
-*/
-void  fvec_write_sample(fvec_t *s, smpl_t data, uint_t channel, uint_t position);
-/** read channel vector from a buffer
-
-  Note that this function is not used in the aubio library, since the same
-  result can be obtained with vec->data[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 * fvec_get_channel(fvec_t *s, uint_t channel);
-/** write channel vector into a buffer
-
-  Note that this function is not used in the aubio library, since the same
-  result can be obtained by assigning vec->data[channel]. Its purpose is to
-  access these values from wrappers, as created by swig.
-
-  \param s vector to write to 
-  \param data vector of [length] values to write
-  \param channel channel to write to 
-
-*/
-void fvec_put_channel(fvec_t *s, smpl_t * data, uint_t channel);
-/** read data from a buffer
-
-  Note that this function is not used in the aubio library, since the same
-  result can be obtained with vec->data. Its purpose is to access these values
-  from wrappers, as created by swig.
-
-  \param s vector to read from
-
-*/
-smpl_t ** fvec_get_data(fvec_t *s);
-
-/** 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
-  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
-  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 buffer deletion function
-
-  \param s buffer to delete as returned by new_cvec()
-
-*/
-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
-  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 position sample position to write to
-
-*/
-void cvec_write_norm(cvec_t *s, smpl_t data, uint_t channel, 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
-  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 position sample position to write to
-
-*/
-void cvec_write_phas(cvec_t *s, smpl_t data, uint_t channel, 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
-  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);
-/** 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
-  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);
-/** read norm data 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. Its purpose is to access these values
-  from wrappers, as created by swig.
-
-  \param s vector to read from
-
-*/
-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
-  result can be obtained with vec->phas. Its purpose is to access these values
-  from wrappers, as created by swig.
-
-  \param s vector to read from
-
-*/
-smpl_t ** cvec_get_phas(cvec_t *s);
-
-#ifdef __cplusplus
-}
-#endif
+#include "fvec.h"
+#include "cvec.h"
 
 #endif /* _SAMPLE_H */