diff options
author | Jamie Bullock <jamie@postlude.co.uk> | 2008-02-15 15:49:49 +0000 |
---|---|---|
committer | Jamie Bullock <jamie@postlude.co.uk> | 2008-02-15 15:49:49 +0000 |
commit | 26fa6beab516a699ead017f4a2d68b1d861b9561 (patch) | |
tree | c8d8c17053b55a7a8aa0c5a91e5a6a7190073bca /src/vector.c | |
parent | e876da1b38221d8020d81b72926d2dee5c2bdc55 (diff) | |
download | LibXtract-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.c | 48 |
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; + +} + + |