diff src/BulkTuningDifference.h @ 50:69ab9a6e7aee

Make BulkTuningDifference much faster when working with more than two files in fine-tuning mode, by storing the reference signal and calculating the fine-tuned features from that (shifted the opposite way) while leaving the other features alone at their coarse rotations. Slightly changes the results but not by a significant amount, I think.
author Chris Cannam
date Wed, 10 Jul 2019 18:52:36 +0100
parents f28b34e7ce8d
children
line wrap: on
line diff
--- a/src/BulkTuningDifference.h	Wed Jul 10 14:00:51 2019 +0100
+++ b/src/BulkTuningDifference.h	Wed Jul 10 18:52:36 2019 +0100
@@ -65,23 +65,28 @@
 
     int m_channelCount;
     int m_bpo;
-    std::unique_ptr<Chromagram> m_refChroma;
-    TFeature m_refTotals;
-    TFeature m_refFeature;
-    std::vector<Signal> m_others;
     int m_blockSize;
     int m_frameCount;
     float m_maxDuration;
     int m_maxSemis;
     bool m_fineTuning;
 
+    std::unique_ptr<Chromagram> m_refChroma;
+    TFeature m_refTotals;
+    std::map<int, TFeature> m_refFeatures; // map from cents-offset to feature
+    Signal m_reference; // we have to retain this when fine-tuning is enabled
+    std::vector<std::shared_ptr<Chromagram>> m_otherChroma;
+    std::vector<TFeature> m_otherTotals;
+
     Chromagram::Parameters paramsForTuningFrequency(double hz) const;
     TFeature computeFeatureFromTotals(const TFeature &totals) const;
     TFeature computeFeatureFromSignal(const Signal &signal, double hz) const;
     void rotateFeature(TFeature &feature, int rotation) const;
-    double featureDistance(const TFeature &other, int rotation = 0) const;
-    int findBestRotation(const TFeature &other) const;
-    std::pair<int, double> findFineFrequency(int channel, int coarseCents);
+    double featureDistance(const TFeature &ref, const TFeature &other,
+                           int rotation) const;
+    int findBestRotation(const TFeature &ref, const TFeature &other) const;
+    std::pair<int, double> findFineFrequency(const TFeature &rotated,
+                                             int coarseCents);
     void getRemainingFeaturesForChannel(int channel, FeatureSet &fs);
 
     mutable std::map<string, int> m_outputs;