Chris@26: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@26: Chris@42: /* Chris@42: Tipic Chris@42: Chris@42: Centre for Digital Music, Queen Mary, University of London. Chris@42: Chris@42: This program is free software; you can redistribute it and/or Chris@42: modify it under the terms of the GNU General Public License as Chris@42: published by the Free Software Foundation; either version 2 of the Chris@42: License, or (at your option) any later version. See the file Chris@42: COPYING included with this distribution for more information. Chris@42: */ Chris@42: Chris@26: #include "Chroma.h" Chris@26: Chris@42: #include "maths/MathUtilities.h" Chris@26: #include "LogCompress.h" Chris@26: #include "OctaveFold.h" Chris@26: #include "Resize.h" Chris@26: Chris@26: #include Chris@26: #include Chris@26: Chris@26: using namespace std; Chris@26: Chris@35: Chroma::Chroma(Parameters params) : Chris@35: m_params(params) Chris@35: { Chris@35: } Chris@35: Chris@26: Chroma::~Chroma() Chris@26: { Chris@26: } Chris@26: Chris@26: RealBlock Chris@26: Chroma::process(const RealBlock &in) Chris@26: { Chris@26: if (in.empty()) { Chris@26: return in; Chris@26: } Chris@26: Chris@26: RealBlock out; Chris@26: Chris@26: for (RealColumn col: in) { Chris@26: Chris@26: if (m_params.applyLogCompression) { Chris@26: col = LogCompress::process(col, m_params.logFactor, m_params.logAddTerm); Chris@26: } Chris@26: Chris@42: out.push_back(MathUtilities::normaliseLp Chris@26: (OctaveFold::process Chris@26: (Resize::process(col)), Chris@26: m_params.normP, m_params.normThresh)); Chris@26: } Chris@26: Chris@26: return out; Chris@26: } Chris@26: