Mercurial > hg > silvet
changeset 47:ccb1a437a828 preshift
Merge from default branch
author | Chris Cannam |
---|---|
date | Mon, 07 Apr 2014 14:18:39 +0100 |
parents | e92376d450b0 (current diff) d7f1c10f4e1d (diff) |
children | 1a4cab304d68 |
files | src/Silvet.cpp |
diffstat | 2 files changed, 14 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/src/Silvet.cpp Mon Apr 07 13:01:08 2014 +0100 +++ b/src/Silvet.cpp Mon Apr 07 14:18:39 2014 +0100 @@ -48,10 +48,6 @@ { delete m_resampler; delete m_cq; - for (int i = 0; i < (int)m_filterA.size(); ++i) { - delete m_filterA[i]; - delete m_filterB[i]; - } for (int i = 0; i < (int)m_postFilter.size(); ++i) { delete m_postFilter[i]; } @@ -289,20 +285,10 @@ (processingSampleRate, 27.5, processingSampleRate / 3, processingBPO, CQInterpolated::Linear); - for (int i = 0; i < (int)m_filterA.size(); ++i) { - delete m_filterA[i]; - delete m_filterB[i]; - } for (int i = 0; i < (int)m_postFilter.size(); ++i) { delete m_postFilter[i]; } - m_filterA.clear(); - m_filterB.clear(); m_postFilter.clear(); - for (int i = 0; i < processingHeight; ++i) { - m_filterA.push_back(new MedianFilter<double>(40)); - m_filterB.push_back(new MedianFilter<double>(40)); - } for (int i = 0; i < processingNotes; ++i) { m_postFilter.push_back(new MedianFilter<double>(3)); } @@ -435,21 +421,26 @@ // giving us 545 bins instead of 600 for (int j = 0; j < processingHeight; ++j) { + int ix = inCol.size() - j - 55; + outCol[j] = inCol[ix]; + } - int ix = inCol.size() - j - 55; + vector<double> noiseLevel1 = + MedianFilter<double>::filter(40, outCol); + for (int j = 0; j < processingHeight; ++j) { + noiseLevel1[j] = std::min(outCol[j], noiseLevel1[j]); + } - double val = inCol[ix]; - m_filterA[j]->push(val); - - double a = m_filterA[j]->get(); - m_filterB[j]->push(std::min(a, val)); - - double filtered = m_filterB[j]->get(); - outCol[j] = filtered; + vector<double> noiseLevel2 = + MedianFilter<double>::filter(40, noiseLevel1); + for (int j = 0; j < processingHeight; ++j) { + outCol[j] = std::max(outCol[j] - noiseLevel2[j], 0.0); } // then we only use every fourth filtered column, for 25 // columns per second in the eventual grid + //!!! why, if we're filtering the time columns, don't we just + // reduce to this frame rate before filtering at all? if (m_reducedColumnCount % 4 == 0) { out.push_back(outCol);
--- a/src/Silvet.h Mon Apr 07 13:01:08 2014 +0100 +++ b/src/Silvet.h Mon Apr 07 14:18:39 2014 +0100 @@ -74,8 +74,6 @@ typedef vector<vector<double> > Grid; - vector<MedianFilter<double> *> m_filterA; - vector<MedianFilter<double> *> m_filterB; vector<MedianFilter<double> *> m_postFilter; vector<set<int> > m_pianoRoll;