Chris@297: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@297: Chris@297: /* Chris@297: Sonic Visualiser Chris@297: An audio file viewer and annotation editor. Chris@297: Centre for Digital Music, Queen Mary, University of London. Chris@297: This file copyright 2007 QMUL. Chris@297: Chris@297: This program is free software; you can redistribute it and/or Chris@297: modify it under the terms of the GNU General Public License as Chris@297: published by the Free Software Foundation; either version 2 of the Chris@297: License, or (at your option) any later version. See the file Chris@297: COPYING included with this distribution for more information. Chris@297: */ Chris@297: Chris@297: #ifndef _AGGREGATE_WAVE_MODEL_H_ Chris@297: #define _AGGREGATE_WAVE_MODEL_H_ Chris@297: Chris@297: #include "RangeSummarisableTimeValueModel.h" Chris@297: #include "PowerOfSqrtTwoZoomConstraint.h" Chris@297: Chris@297: #include Chris@297: Chris@297: class AggregateWaveModel : public RangeSummarisableTimeValueModel Chris@297: { Chris@297: Q_OBJECT Chris@297: Chris@297: public: Chris@297: struct ModelChannelSpec Chris@297: { Chris@297: ModelChannelSpec(RangeSummarisableTimeValueModel *m, int c) : Chris@297: model(m), channel(c) { } Chris@297: RangeSummarisableTimeValueModel *model; Chris@297: int channel; Chris@297: }; Chris@297: Chris@297: typedef std::vector ChannelSpecList; Chris@297: Chris@297: AggregateWaveModel(ChannelSpecList channelSpecs); Chris@297: ~AggregateWaveModel(); Chris@297: Chris@297: bool isOK() const; Chris@297: bool isReady(int *) const; Chris@297: Chris@345: QString getTypeName() const { return tr("Aggregate Wave"); } Chris@345: Chris@929: int getComponentCount() const; Chris@929: ModelChannelSpec getComponent(int c) const; Chris@297: Chris@297: const ZoomConstraint *getZoomConstraint() const { return &m_zoomConstraint; } Chris@297: Chris@929: int getFrameCount() const; Chris@929: int getChannelCount() const; Chris@929: int getSampleRate() const; Chris@297: Chris@297: virtual Model *clone() const; Chris@297: Chris@297: float getValueMinimum() const { return -1.0f; } Chris@297: float getValueMaximum() const { return 1.0f; } Chris@297: Chris@929: virtual int getStartFrame() const { return 0; } Chris@929: virtual int getEndFrame() const { return getFrameCount(); } Chris@297: Chris@929: virtual int getData(int channel, int start, int count, Chris@300: float *buffer) const; Chris@297: Chris@929: virtual int getData(int channel, int start, int count, Chris@300: double *buffer) const; Chris@297: Chris@929: virtual int getData(int fromchannel, int tochannel, Chris@929: int start, int count, Chris@363: float **buffer) const; Chris@363: Chris@929: virtual int getSummaryBlockSize(int desired) const; Chris@377: Chris@929: virtual void getSummaries(int channel, int start, int count, Chris@300: RangeBlock &ranges, Chris@929: int &blockSize) const; Chris@297: Chris@929: virtual Range getSummary(int channel, int start, int count) const; Chris@297: Chris@297: virtual void toXml(QTextStream &out, Chris@297: QString indent = "", Chris@297: QString extraAttributes = "") const; Chris@297: Chris@297: signals: Chris@297: void modelChanged(); Chris@947: void modelChangedWithin(int, int); Chris@297: void completionChanged(); Chris@297: Chris@297: protected slots: Chris@297: void componentModelChanged(); Chris@947: void componentModelChangedWithin(int, int); Chris@297: void componentModelCompletionChanged(); Chris@297: Chris@297: protected: Chris@297: ChannelSpecList m_components; Chris@297: static PowerOfSqrtTwoZoomConstraint m_zoomConstraint; Chris@297: }; Chris@297: Chris@297: #endif Chris@297: