# HG changeset patch # User Chris Cannam # Date 1424946503 0 # Node ID a17b22abd55157106da9899b469be1f6c419bd3f # Parent 6c12db195986fe5b6db7ace3a85970ee77f6e53e Code now builds, DistanceMetric tests fail diff -r 6c12db195986 -r a17b22abd551 src/DistanceMetric.cpp --- a/src/DistanceMetric.cpp Thu Feb 26 09:55:28 2015 +0000 +++ b/src/DistanceMetric.cpp Thu Feb 26 10:28:23 2015 +0000 @@ -24,6 +24,24 @@ //#define DEBUG_DISTANCE_METRIC 1 +template <> uint8_t +DistanceMetric::scaleIntoRange(double distance) +{ + return uint8_t(m_params.scale * distance); +} + +template <> float +DistanceMetric::scaleIntoRange(double distance) +{ + return float(distance); +} + +template <> double +DistanceMetric::scaleIntoRange(double distance) +{ + return distance; +} + DistanceMetric::DistanceMetric(Parameters params) : m_params(params) { @@ -61,7 +79,7 @@ } if (d > 1.0) d = 1.0; - return scaleIntoRange(d); // normalisation param ignored + return scaleIntoRange(d); // normalisation param ignored } if (m_params.metric == Manhattan) { @@ -85,7 +103,7 @@ } if (sum == 0) { - return scaleIntoRange(0); + return scaleIntoRange(0); } double distance = 0; @@ -113,15 +131,5 @@ distance = d; } - return scaleIntoRange(distance); + return scaleIntoRange(distance); } - -distance_t -DistanceMetric::scaleIntoRange(double distance) -{ - if (sizeof(distance_t) == sizeof(distance)) { - return distance_t(distance); - } else { - return distance_t(m_params.scale * distance); - } -} diff -r 6c12db195986 -r a17b22abd551 src/DistanceMetric.h --- a/src/DistanceMetric.h Thu Feb 26 09:55:28 2015 +0000 +++ b/src/DistanceMetric.h Thu Feb 26 10:28:23 2015 +0000 @@ -94,7 +94,8 @@ private: Parameters m_params; - distance_t scaleIntoRange(double distance); + + template T scaleIntoRange(double); }; #endif diff -r 6c12db195986 -r a17b22abd551 src/FeatureConditioner.cpp --- a/src/FeatureConditioner.cpp Thu Feb 26 09:55:28 2015 +0000 +++ b/src/FeatureConditioner.cpp Thu Feb 26 10:28:23 2015 +0000 @@ -34,8 +34,8 @@ #endif } -vector -FeatureConditioner::process(const vector &feature) +feature_t +FeatureConditioner::process(const feature_t &feature) { if (m_prev.empty()) { m_prev.resize(feature.size(), 0.0); @@ -49,7 +49,7 @@ int size = static_cast(feature.size()); - vector out(size, 0.0); + feature_t out(size, 0.0); double totalEnergy = 0; @@ -94,11 +94,11 @@ } } else if (m_params.norm == NormaliseToSum1) { for (int i = 0; i < size; i++) { - out[i] /= totalEnergy; + out[i] = featurebin_t(out[i] / totalEnergy); } } else if (m_params.norm == NormaliseToLTAverage) { for (int i = 0; i < size; i++) { - out[i] /= m_ltAverage; + out[i] = featurebin_t(out[i] / m_ltAverage); } } diff -r 6c12db195986 -r a17b22abd551 src/FeatureConditioner.h --- a/src/FeatureConditioner.h Thu Feb 26 09:55:28 2015 +0000 +++ b/src/FeatureConditioner.h Thu Feb 26 10:28:23 2015 +0000 @@ -16,7 +16,7 @@ #ifndef FEATURE_CONDITIONER_H #define FEATURE_CONDITIONER_H -#include +#include "Types.h" /** * Take a series of feature vectors and apply conditioning of some @@ -96,7 +96,7 @@ /** * Process the given feature and return the conditioned feature. */ - std::vector process(const std::vector &feature); + feature_t process(const feature_t &feature); protected: Parameters m_params; @@ -106,7 +106,7 @@ /** The most recent feature, used for calculating the feature to * feature difference. This is therefore not yet normalised. */ - std::vector m_prev; + feature_t m_prev; }; #endif diff -r 6c12db195986 -r a17b22abd551 src/MatchVampPlugin.cpp --- a/src/MatchVampPlugin.cpp Thu Feb 26 09:55:28 2015 +0000 +++ b/src/MatchVampPlugin.cpp Thu Feb 26 10:28:23 2015 +0000 @@ -637,10 +637,10 @@ FeatureSet returnFeatures; - vector f1, f2; + feature_t f1, f2; m_pipeline->extractFeatures(f1, f2); - vector cf1, cf2; + feature_t cf1, cf2; m_pipeline->extractConditionedFeatures(cf1, cf2); Feature f; diff -r 6c12db195986 -r a17b22abd551 test/TestDistanceMetric.cpp --- a/test/TestDistanceMetric.cpp Thu Feb 26 09:55:28 2015 +0000 +++ b/test/TestDistanceMetric.cpp Thu Feb 26 10:28:23 2015 +0000 @@ -12,12 +12,12 @@ #include -static vector getTestFeature(double m) +static feature_t getTestFeature(double m) { - vector f; - double fd[] = { 0, 1, 2, 3 }; + feature_t f; + int fd[] = { 0, 1, 2, 3 }; for (int i = 0; i < 4; ++i) { - f.push_back(fd[i] * m); + f.push_back(featurebin_t(fd[i] * m)); } return f; } @@ -29,7 +29,7 @@ DistanceMetric::Parameters params; params.norm = DistanceMetric::NoDistanceNormalisation; DistanceMetric dm(params); - vector + feature_t e1 = getTestFeature(1), e2 = getTestFeature(2), e0 = getTestFeature(0); @@ -49,7 +49,7 @@ DistanceMetric::Parameters params; params.norm = DistanceMetric::NormaliseDistanceToSum; DistanceMetric dm(params); - vector + feature_t e1 = getTestFeature(1), e2 = getTestFeature(2), e0 = getTestFeature(0); diff -r 6c12db195986 -r a17b22abd551 test/TestFeatureConditioner.cpp --- a/test/TestFeatureConditioner.cpp Thu Feb 26 09:55:28 2015 +0000 +++ b/test/TestFeatureConditioner.cpp Thu Feb 26 10:28:23 2015 +0000 @@ -12,12 +12,12 @@ #include -static vector getTestFeature(double m) +static feature_t getTestFeature(double m) { - vector f; - double fd[] = { 0, 1, 2, 3 }; + feature_t f; + int fd[] = { 0, 1, 2, 3 }; for (int i = 0; i < 4; ++i) { - f.push_back(fd[i] * m); + f.push_back(featurebin_t(fd[i] * m)); } return f; } @@ -29,14 +29,14 @@ FeatureConditioner::Parameters params; params.norm = FeatureConditioner::NoNormalisation; params.order = FeatureConditioner::OutputFeatures; - vector + feature_t e1 = getTestFeature(1), e2 = getTestFeature(2), e0 = getTestFeature(0); params.silenceThreshold = 1.0; FeatureConditioner fc(params); - vector out = fc.process(e1); + feature_t out = fc.process(e1); BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end()); out = fc.process(e2); BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e2.begin(), e2.end()); @@ -54,14 +54,14 @@ FeatureConditioner::Parameters params; params.norm = FeatureConditioner::NoNormalisation; params.order = FeatureConditioner::OutputRectifiedDerivative; - vector + feature_t e1 = getTestFeature(1), e2 = getTestFeature(2), e0 = getTestFeature(0); params.silenceThreshold = 1.0; FeatureConditioner fc(params); - vector out = fc.process(e1); + feature_t out = fc.process(e1); BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end()); out = fc.process(e2); BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end()); @@ -85,7 +85,7 @@ FeatureConditioner::Parameters params; params.norm = FeatureConditioner::NoNormalisation; params.order = FeatureConditioner::OutputDerivative; - vector + feature_t e1 = getTestFeature(1), e2 = getTestFeature(2), e3 = getTestFeature(3), @@ -93,7 +93,7 @@ params.silenceThreshold = 1.0; FeatureConditioner fc(params); - vector out = fc.process(e1); + feature_t out = fc.process(e1); BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end()); out = fc.process(e2); BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end()); @@ -117,7 +117,7 @@ FeatureConditioner::Parameters params; params.norm = FeatureConditioner::NormaliseToSum1; params.order = FeatureConditioner::OutputFeatures; - vector + feature_t e1 = getTestFeature(1), e2 = getTestFeature(2), en = getTestFeature(1.0/6.0), @@ -125,7 +125,7 @@ params.silenceThreshold = 1.0; FeatureConditioner fc(params); - vector out = fc.process(e1); + feature_t out = fc.process(e1); BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en.begin(), en.end()); out = fc.process(e2); BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en.begin(), en.end()); @@ -143,7 +143,7 @@ FeatureConditioner::Parameters params; params.norm = FeatureConditioner::NormaliseToSum1; params.order = FeatureConditioner::OutputRectifiedDerivative; - vector + feature_t e1 = getTestFeature(1), e2 = getTestFeature(2), en = getTestFeature(1.0/6.0), @@ -152,7 +152,7 @@ params.silenceThreshold = 1.0; FeatureConditioner fc(params); - vector out = fc.process(e1); + feature_t out = fc.process(e1); BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en.begin(), en.end()); out = fc.process(e2); BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en2.begin(), en2.end()); diff -r 6c12db195986 -r a17b22abd551 test/TestFeatureExtractor.cpp --- a/test/TestFeatureExtractor.cpp Thu Feb 26 09:55:28 2015 +0000 +++ b/test/TestFeatureExtractor.cpp Thu Feb 26 10:28:23 2015 +0000 @@ -35,7 +35,7 @@ BOOST_AUTO_TEST_SUITE(TestFeatureExtractor) -void checkAlternateProcessType(FeatureExtractor &fe, vector expected, +void checkAlternateProcessType(FeatureExtractor &fe, feature_t expected, vector real, vector imag) { vector in; @@ -43,7 +43,7 @@ in.push_back(float(real[i])); in.push_back(float(imag[i])); } - vector alt = fe.process(&in[0]); + feature_t alt = fe.process(&in[0]); BOOST_CHECK_EQUAL_COLLECTIONS(alt.begin(), alt.end(), expected.begin(), expected.end()); } @@ -83,7 +83,7 @@ real[hs-bin-1] += 5.0; imag[hs-bin-1] += 5.0; - vector out = fe.process(real, imag); + feature_t out = fe.process(real, imag); checkAlternateProcessType(fe, out, real, imag); @@ -107,7 +107,7 @@ double cutoff = (17.0 * rate) / sz; - vector expected(fsz); + feature_t expected(fsz); double infreq1 = (double(bin) * rate) / sz; @@ -159,7 +159,7 @@ real[hs-bin-1] += 5.0; imag[hs-bin-1] += 5.0; - vector out = fe.process(real, imag); + feature_t out = fe.process(real, imag); checkAlternateProcessType(fe, out, real, imag); @@ -187,7 +187,7 @@ // mapped linearly by MIDI pitch into the next 49 bins; // everything above goes into the last bin, for 84 bins total. - vector expected(fsz); + feature_t expected(fsz); if (bin == hs-bin-1) { expected[bin2warped(bin, rate, sz)] += 450;