diff options
author | Jamie Bullock <jamie@jamiebullock.com> | 2014-06-03 21:17:51 +0100 |
---|---|---|
committer | Jamie Bullock <jamie@jamiebullock.com> | 2014-06-03 21:18:22 +0100 |
commit | 78a4b5718ecfa7cb91457bc9b4deff543ec10373 (patch) | |
tree | 6d2592547c45fbc2027998a564b5b7a1a1c8bd07 /src/scalar.c | |
parent | c866e1676d423ca1c6d4aa859dd54df487ab25d4 (diff) | |
download | LibXtract-78a4b5718ecfa7cb91457bc9b4deff543ec10373.tar.gz LibXtract-78a4b5718ecfa7cb91457bc9b4deff543ec10373.tar.bz2 LibXtract-78a4b5718ecfa7cb91457bc9b4deff543ec10373.zip |
Add xtract_peak() determines whether the 'current' value is a peak
Diffstat (limited to 'src/scalar.c')
-rw-r--r-- | src/scalar.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/scalar.c b/src/scalar.c index e0d2578..54cb459 100644 --- a/src/scalar.c +++ b/src/scalar.c @@ -1002,3 +1002,36 @@ int xtract_midicent(const double *data, const int N, const void *argv, double *r return XTRACT_SUCCESS; } +int xtract_peak_picker(const double *data, const int N, const void *argv, double *result) +{ + double threshold = *(double *)argv; + double current = data[N - 1]; + double average = 0.0; + double maximum = -DBL_MAX; + + for (uint32_t n = 0; n < N; ++n) + { + average += data[n]; + if (data[n] > maximum) + { + maximum = data[n]; + } + } + + average /= (double)N; + + if (current != maximum) + { + return XTRACT_NO_RESULT; + } + + if (current < average + threshold) + { + return XTRACT_NO_RESULT; + } + + return XTRACT_SUCCESS; + +} + + |