Mercurial > hg > tuning-difference
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;