@@ -664,9 +664,15 @@ BpmFilterNode::BpmFilterNode(
664664 std::tie (m_rangeLower, m_rangeUpper) = rangeFromTrailingDecimal (bpm);
665665 break ;
666666 }
667- case MatchMode::Fuzzy: {
668- m_rangeLower = floor ((1 - s_relativeRange) * bpm);
669- m_rangeUpper = ceil ((1 + s_relativeRange) * bpm);
667+ case MatchMode::Fuzzy: { // 100
668+ m_rangeLower = floor ((1 - s_relativeRange) * bpm); // 94
669+ m_rangeUpper = ceil ((1 + s_relativeRange) * bpm); // 106
670+ // Also add fuzzy half/double ranges
671+ m_bpmHalfLower = floor ((1 - s_relativeRange) * bpm / 2 ); // 47
672+ m_bpmHalfUpper = ceil ((1 + s_relativeRange) * bpm / 2 ); // 53
673+ m_bpmDoubleLower = floor ((1 - s_relativeRange) * bpm * 2 ); // 188
674+ m_bpmDoubleUpper = ceil ((1 + s_relativeRange) * bpm * 2 ); // 212
675+ qWarning () << toSql ();
670676 break ;
671677 }
672678 case MatchMode::HalveDouble: {
@@ -732,10 +738,10 @@ bool BpmFilterNode::match(const TrackPointer& pTrack) const {
732738 return value >= m_rangeLower && value < m_rangeUpper;
733739 }
734740 case MatchMode::ExplicitStrict:
735- case MatchMode::Fuzzy:
736741 case MatchMode::Range: {
737742 return value >= m_rangeLower && value <= m_rangeUpper;
738743 }
744+ case MatchMode::Fuzzy:
739745 case MatchMode::HalveDouble: {
740746 return (value >= m_rangeLower && value <= m_rangeUpper) ||
741747 (value >= m_bpmHalfLower && value <= m_bpmHalfUpper) ||
@@ -783,10 +789,10 @@ QString BpmFilterNode::toSql() const {
783789 QString::number (m_rangeUpper));
784790 }
785791 case MatchMode::ExplicitStrict:
786- case MatchMode::Fuzzy:
787792 case MatchMode::Range: {
788793 return rangeSqlString (m_rangeLower, m_rangeUpper);
789794 }
795+ case MatchMode::Fuzzy:
790796 case MatchMode::HalveDouble: {
791797 QStringList searchClauses;
792798 searchClauses << rangeUpperExclusiveSqlString (m_rangeLower, m_rangeUpper);
@@ -799,6 +805,7 @@ QString BpmFilterNode::toSql() const {
799805 searchClauses << rangeSqlString (m_rangeLower, m_rangeUpper);
800806 searchClauses << rangeSqlString (m_bpmHalfLower, m_bpmHalfUpper);
801807 searchClauses << rangeSqlString (m_bpmDoubleLower, m_bpmDoubleUpper);
808+ qWarning () << " BpmFilterNode:" << concatSqlClauses (searchClauses, " OR" );
802809 return concatSqlClauses (searchClauses, " OR" );
803810 }
804811 case MatchMode::Operator: {
0 commit comments