annotate transform/Transform.h @ 25:e74f508db18c

* Add setRatio method to the time stretcher, and make it possible to change the ratio without having to construct and replace the time stretcher. This means we can do it seamlessly. Add a lot more ratios to the time stretch control in the main window
author Chris Cannam
date Fri, 15 Sep 2006 15:35:06 +0000
parents 40116f709d3b
children dd11619b73ba
rev   line source
Chris@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@0 2
Chris@0 3 /*
Chris@0 4 Sonic Visualiser
Chris@0 5 An audio file viewer and annotation editor.
Chris@0 6 Centre for Digital Music, Queen Mary, University of London.
Chris@0 7 This file copyright 2006 Chris Cannam.
Chris@0 8
Chris@0 9 This program is free software; you can redistribute it and/or
Chris@0 10 modify it under the terms of the GNU General Public License as
Chris@0 11 published by the Free Software Foundation; either version 2 of the
Chris@0 12 License, or (at your option) any later version. See the file
Chris@0 13 COPYING included with this distribution for more information.
Chris@0 14 */
Chris@0 15
Chris@0 16 #ifndef _TRANSFORM_H_
Chris@0 17 #define _TRANSFORM_H_
Chris@0 18
Chris@1 19 #include "base/Thread.h"
Chris@0 20
Chris@1 21 #include "data/model/Model.h"
Chris@0 22
Chris@0 23 typedef QString TransformName;
Chris@0 24
Chris@0 25 /**
Chris@0 26 * A Transform turns one data model into another.
Chris@0 27 *
Chris@0 28 * Typically in this application, a Transform might have a
Chris@0 29 * DenseTimeValueModel as its input (e.g. an audio waveform) and a
Chris@0 30 * SparseOneDimensionalModel (e.g. detected beats) as its output.
Chris@0 31 *
Chris@0 32 * The Transform typically runs in the background, as a separate
Chris@0 33 * thread populating the output model. The model is available to the
Chris@0 34 * user of the Transform immediately, but may be initially empty until
Chris@0 35 * the background thread has populated it.
Chris@0 36 */
Chris@0 37
Chris@0 38 class Transform : public Thread
Chris@0 39 {
Chris@0 40 public:
Chris@0 41 virtual ~Transform();
Chris@0 42
Chris@0 43 Model *getInputModel() { return m_input; }
Chris@0 44 Model *getOutputModel() { return m_output; }
Chris@0 45 Model *detachOutputModel() { m_detached = true; return m_output; }
Chris@0 46
Chris@0 47 protected:
Chris@0 48 Transform(Model *m);
Chris@0 49
Chris@0 50 Model *m_input; // I don't own this
Chris@0 51 Model *m_output; // I own this, unless...
Chris@0 52 bool m_detached; // ... this is true.
Chris@0 53 bool m_deleting;
Chris@0 54 };
Chris@0 55
Chris@0 56 #endif