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@1581: #ifndef SV_AGGREGATE_WAVE_MODEL_H Chris@1581: #define SV_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@1580: bool isOK() const override; Chris@1580: bool isReady(int *) const override; Chris@297: Chris@1580: QString getTypeName() const override { return tr("Aggregate Wave"); } Chris@345: Chris@929: int getComponentCount() const; Chris@929: ModelChannelSpec getComponent(int c) const; Chris@297: Chris@1580: const ZoomConstraint *getZoomConstraint() const override { return &m_zoomConstraint; } Chris@297: Chris@1038: sv_frame_t getFrameCount() const; Chris@1580: int getChannelCount() const override; Chris@1580: sv_samplerate_t getSampleRate() const override; Chris@297: Chris@1580: float getValueMinimum() const override { return -1.0f; } Chris@1580: float getValueMaximum() const override { return 1.0f; } Chris@297: Chris@1580: sv_frame_t getStartFrame() const override { return 0; } Chris@1580: sv_frame_t getEndFrame() const override { return getFrameCount(); } Chris@297: Chris@1580: floatvec_t getData(int channel, sv_frame_t start, sv_frame_t count) const override; Chris@297: Chris@1580: std::vector getMultiChannelData(int fromchannel, int tochannel, sv_frame_t start, sv_frame_t count) const override; Chris@363: Chris@1580: int getSummaryBlockSize(int desired) const override; Chris@377: Chris@1580: void getSummaries(int channel, sv_frame_t start, sv_frame_t count, Chris@300: RangeBlock &ranges, Chris@1580: int &blockSize) const override; Chris@297: Chris@1580: Range getSummary(int channel, sv_frame_t start, sv_frame_t count) const override; Chris@297: Chris@1580: void toXml(QTextStream &out, Chris@297: QString indent = "", Chris@1580: QString extraAttributes = "") const override; Chris@297: Chris@297: signals: Chris@297: void modelChanged(); Chris@1038: void modelChangedWithin(sv_frame_t, sv_frame_t); Chris@297: void completionChanged(); Chris@1390: void modelInvalidated(); Chris@297: Chris@297: protected slots: Chris@297: void componentModelChanged(); Chris@1038: void componentModelChangedWithin(sv_frame_t, sv_frame_t); Chris@297: void componentModelCompletionChanged(); Chris@1389: void componentModelAboutToBeDeleted(); Chris@297: Chris@297: protected: Chris@297: ChannelSpecList m_components; Chris@297: static PowerOfSqrtTwoZoomConstraint m_zoomConstraint; Chris@1389: bool m_invalidated; // because one of its component models is aboutToBeDeleted Chris@297: }; Chris@297: Chris@297: #endif Chris@297: