# HG changeset patch # User Chris Cannam # Date 1746520963 -3600 # Tue May 06 09:42:43 2025 +0100 # Branch higher-precision # Node ID 6315e71af3b4c0555f9b7e66c5b30ff5795809d4 # Parent f53b05968cdd465ce0af8a64eda7553e39e47b34 Reduce incidences of very near duplicates in candidates list diff --git a/src/MiniBpm.cpp b/src/MiniBpm.cpp --- a/src/MiniBpm.cpp +++ b/src/MiniBpm.cpp @@ -63,6 +63,7 @@ #include #include +#include #include #include #include @@ -572,12 +573,18 @@ return 0.0; } + std::set grossCandidatesSeen; + std::multimap::const_iterator ci(candidateMap.end()); while (ci != candidateMap.begin()) { --ci; int lag = ci->second + minlag; double bpm = filter.refine(lag, acf, acfLength); - m_candidates.push_back(bpm); + int gross = int(round(bpm * 2.0)); // treat within 0.5 as duplicate + if (grossCandidatesSeen.find(gross) == grossCandidatesSeen.end()) { + m_candidates.push_back(bpm); + grossCandidatesSeen.insert(gross); + } } delete[] cf;