Chris@148: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@148: Chris@148: /* Chris@148: Sonic Visualiser Chris@148: An audio file viewer and annotation editor. Chris@148: Centre for Digital Music, Queen Mary, University of London. Chris@148: This file copyright 2006 Chris Cannam. Chris@148: Chris@148: This program is free software; you can redistribute it and/or Chris@148: modify it under the terms of the GNU General Public License as Chris@148: published by the Free Software Foundation; either version 2 of the Chris@148: License, or (at your option) any later version. See the file Chris@148: COPYING included with this distribution for more information. Chris@148: */ Chris@148: Chris@148: #include "FFTFuzzyAdapter.h" Chris@148: Chris@148: #include Chris@148: Chris@148: FFTFuzzyAdapter::FFTFuzzyAdapter(const DenseTimeValueModel *model, Chris@148: int channel, Chris@148: WindowType windowType, Chris@148: size_t windowSize, Chris@148: size_t windowIncrement, Chris@148: size_t fftSize, Chris@148: bool polar, Chris@148: size_t fillFromColumn) : Chris@148: m_server(0), Chris@148: m_xshift(0), Chris@148: m_yshift(0) Chris@148: { Chris@148: m_server = FFTDataServer::getFuzzyInstance(model, Chris@148: channel, Chris@148: windowType, Chris@148: windowSize, Chris@148: windowIncrement, Chris@148: fftSize, Chris@148: polar, Chris@148: fillFromColumn); Chris@148: Chris@148: size_t xratio = windowIncrement / m_server->getWindowIncrement(); Chris@148: size_t yratio = m_server->getFFTSize() / fftSize; Chris@148: Chris@148: while (xratio > 1) { Chris@148: if (xratio & 0x1) { Chris@148: std::cerr << "ERROR: FFTFuzzyAdapter: Window increment ratio " Chris@148: << windowIncrement << " / " Chris@148: << m_server->getWindowIncrement() Chris@148: << " must be a power of two" << std::endl; Chris@148: assert(!(xratio & 0x1)); Chris@148: } Chris@148: ++m_xshift; Chris@148: xratio >>= 1; Chris@148: } Chris@148: Chris@148: while (yratio > 1) { Chris@148: if (yratio & 0x1) { Chris@148: std::cerr << "ERROR: FFTFuzzyAdapter: FFT size ratio " Chris@148: << m_server->getFFTSize() << " / " << fftSize Chris@148: << " must be a power of two" << std::endl; Chris@148: assert(!(yratio & 0x1)); Chris@148: } Chris@148: ++m_yshift; Chris@148: yratio >>= 1; Chris@148: } Chris@148: } Chris@148: Chris@148: FFTFuzzyAdapter::~FFTFuzzyAdapter() Chris@148: { Chris@148: FFTDataServer::releaseInstance(m_server); Chris@148: } Chris@148: