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 <cassert>
Chris@148: 
Chris@148: FFTFuzzyAdapter::FFTFuzzyAdapter(const DenseTimeValueModel *model,
Chris@148: 				 int channel,
Chris@148: 				 WindowType windowType,
Chris@929: 				 int windowSize,
Chris@929: 				 int windowIncrement,
Chris@929: 				 int fftSize,
Chris@148: 				 bool polar,
Chris@929: 				 int 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@929:     int xratio = windowIncrement / m_server->getWindowIncrement();
Chris@929:     int yratio = m_server->getFFTSize() / fftSize;
Chris@148: 
Chris@148:     while (xratio > 1) {
Chris@148:         if (xratio & 0x1) {
Chris@843:             cerr << "ERROR: FFTFuzzyAdapter: Window increment ratio "
Chris@148:                       << windowIncrement << " / "
Chris@148:                       << m_server->getWindowIncrement()
Chris@843:                       << " must be a power of two" << 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@843:             cerr << "ERROR: FFTFuzzyAdapter: FFT size ratio "
Chris@148:                       << m_server->getFFTSize() << " / " << fftSize
Chris@843:                       << " must be a power of two" << 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: