From 70a7b6d6883b7d83806d988888c271e8c3c87c1c Mon Sep 17 00:00:00 2001 From: Chris Cannam Date: Thu, 9 Jun 2022 14:16:49 +0100 Subject: [PATCH] Some (temporary) debug etc --- src/finer/BinSegmenter.h | 16 ++++++++++++++-- src/finer/R3StretcherImpl.cpp | 24 ++++++++++++++++++++++++ src/finer/R3StretcherImpl.h | 10 ++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/finer/BinSegmenter.h b/src/finer/BinSegmenter.h index cc86343..dc4dee0 100644 --- a/src/finer/BinSegmenter.h +++ b/src/finer/BinSegmenter.h @@ -54,7 +54,7 @@ public: BinSegmenter(Parameters parameters) : m_parameters(parameters), m_numeric(m_parameters.binCount, 0), - m_classFilter(16) + m_classFilter(15) { } @@ -70,7 +70,19 @@ public: m_numeric[i] = 2; break; } } - MovingMedian::filter(m_classFilter, m_numeric.data(), m_numeric.size()); + MovingMedian::filter(m_classFilter, m_numeric); +/* + std::cout << "c:"; + for (int i = 0; i < n; ++i) { + if (i > 0) std::cout << ","; + if (m_numeric[i] == 1) { + std::cout << "1"; + } else { + std::cout << "0"; + } + } + std::cout << std::endl; +*/ double f0 = 0.0; for (int i = 1; i < n; ++i) { if (m_numeric[i] != 1) { diff --git a/src/finer/R3StretcherImpl.cpp b/src/finer/R3StretcherImpl.cpp index d2b078b..2742425 100644 --- a/src/finer/R3StretcherImpl.cpp +++ b/src/finer/R3StretcherImpl.cpp @@ -653,6 +653,30 @@ R3StretcherImpl::analyseChannel(int c, int inhop, int prevInhop, int prevOuthop) cd->segmentation = cd->nextSegmentation; cd->nextSegmentation = cd->segmenter->segment(cd->nextClassification.data()); +/* + if (c == 0) { + double pb = cd->nextSegmentation.percussiveBelow; + double pa = cd->nextSegmentation.percussiveAbove; + double ra = cd->nextSegmentation.residualAbove; + int pbb = binForFrequency(pb, classify); + int pab = binForFrequency(pa, classify); + int rab = binForFrequency(ra, classify); + std::cout << "pb = " << pb << ", pbb = " << pbb << std::endl; + std::cout << "pa = " << pa << ", pab = " << pab << std::endl; + std::cout << "ra = " << ra << ", rab = " << rab << std::endl; + std::cout << "s:"; + for (int i = 0; i <= classify/2; ++i) { + if (i > 0) std::cout << ","; + if (i < pbb || (i >= pab && i <= rab)) { + std::cout << "1"; + } else { + std::cout << "0"; + } + } + std::cout << std::endl; + } +*/ + m_troughPicker.findNearestAndNextPeaks (classifyScale->mag.data(), 3, nullptr, classifyScale->troughs.data()); diff --git a/src/finer/R3StretcherImpl.h b/src/finer/R3StretcherImpl.h index 3213d7e..fdcec77 100644 --- a/src/finer/R3StretcherImpl.h +++ b/src/finer/R3StretcherImpl.h @@ -283,6 +283,16 @@ protected: static void logCout(const std::string &message) { std::cout << "RubberBandStretcher: " << message << std::endl; } + + //!!! dupes + int binForFrequency(double f, int fftSize) const { + return int(round(f * double(fftSize) / + m_parameters.sampleRate)); + } + double frequencyForBin(int b, int fftSize) const { + return (double(b) * m_parameters.sampleRate) + / double(fftSize); + } }; }