Mercurial > hg > svcore
diff base/FFTFileCache.h @ 88:024d4a71f5bf
* Just skeleton bits of file-based FFT cache
author | Chris Cannam |
---|---|
date | Tue, 02 May 2006 19:44:14 +0000 |
parents | |
children | c4e163f911dd |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/base/FFTFileCache.h Tue May 02 19:44:14 2006 +0000 @@ -0,0 +1,69 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Visualiser + An audio file viewer and annotation editor. + Centre for Digital Music, Queen Mary, University of London. + This file copyright 2006 Chris Cannam. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#ifndef _FFT_FILE_CACHE_H_ +#define _FFT_FILE_CACHE_H_ + +#include "FFTCache.h" + +class MatrixFileCache; + +class FFTFileCache : public FFTCacheBase +{ +public: + //!!! + // Initially, make this take a string for the filename, + // and make the spectrogram layer have two, one for the main + // thread and one for the fill thread, one RO and one RW, both + // using the same string based off spectrogram layer address + // or export ID. + // Subsequently factor out into reader and writer classes? + // Make take arguments to ctor describing FFT parameters and + // calculate its own string and eventually do its own FFT as + // well. Intention is to make it able ultimately to write + // its own cache so it can do it in the background while e.g. + // plugins read from it -- need the reader thread to be able + // to block waiting for the writer thread as appropriate. + + FFTFileCache(); + virtual ~FFTFileCache(); + + virtual size_t getWidth() const; + virtual size_t getHeight() const; + + virtual void resize(size_t width, size_t height); + virtual void reset(); // zero-fill or 1-fill as appropriate without changing size + + virtual float getMagnitudeAt(size_t x, size_t y) const; + virtual float getNormalizedMagnitudeAt(size_t x, size_t y) const; + virtual float getPhaseAt(size_t x, size_t y) const; + + virtual bool isLocalPeak(size_t x, size_t y) const; + virtual bool isOverThreshold(size_t x, size_t y, float threshold) const; + + virtual void setNormalizationFactor(size_t x, float factor); + virtual void setMagnitudeAt(size_t x, size_t y, float mag); + virtual void setNormalizedMagnitudeAt(size_t x, size_t y, float norm); + virtual void setPhaseAt(size_t x, size_t y, float phase); + + virtual QColor getColour(unsigned char index) const; + virtual void setColour(unsigned char index, QColor colour); + +protected: + size_t m_height; + MatrixFileCache *m_mfc; +}; + +#endif