aboutsummaryrefslogtreecommitdiff
path: root/src/vector.c
diff options
context:
space:
mode:
authorJamie Bullock <jamie@postlude.co.uk>2008-02-15 15:49:49 +0000
committerJamie Bullock <jamie@postlude.co.uk>2008-02-15 15:49:49 +0000
commit26fa6beab516a699ead017f4a2d68b1d861b9561 (patch)
treec8d8c17053b55a7a8aa0c5a91e5a6a7190073bca /src/vector.c
parente876da1b38221d8020d81b72926d2dee5c2bdc55 (diff)
downloadLibXtract-26fa6beab516a699ead017f4a2d68b1d861b9561.tar.gz
LibXtract-26fa6beab516a699ead017f4a2d68b1d861b9561.tar.bz2
LibXtract-26fa6beab516a699ead017f4a2d68b1d861b9561.zip
Added new extraction function: xtract_subbands()
Diffstat (limited to 'src/vector.c')
-rw-r--r--src/vector.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/vector.c b/src/vector.c
index ce74630..97a876b 100644
--- a/src/vector.c
+++ b/src/vector.c
@@ -573,4 +573,52 @@ int xtract_lpcc(const float *data, const int N, const void *argv, float *result)
// return XTRACT_SUCCESS;
//}
+int xtract_subbands(const float *data, const int N, const void *argv, float *result){
+
+ int n, bw, xtract_func, nbands, scale, start, lower, *argi, rv;
+
+ argi = (int *)argv;
+
+ xtract_func = argi[0];
+ nbands = argi[1];
+ scale = argi[2];
+ start = argi[3];
+
+
+ if(scale == XTRACT_LINEAR_SUBBANDS)
+ bw = floorf((N - start) / nbands);
+ else
+ bw = start;
+
+ lower = start;
+
+ for(n = 0; n < nbands; n++){
+
+ /* Bounds sanity check */
+ if(lower + bw >= N)
+ result[n] = 0.f
+ continue;
+
+ rv = xtract[xtract_func](data+lower, bw, NULL, &result[n]);
+
+ if(rv != XTRACT_SUCCESS)
+ return rv;
+
+ switch(scale){
+ case XTRACT_OCTAVE_SUBBANDS:
+ lower += bw;
+ bw = lower;
+ break;
+ case XTRACT_LINEAR_SUBBANDS:
+ lower += bw;
+ break;
+ }
+
+ }
+
+ return rv;
+
+}
+
+