annotate data/model/AggregateWaveModel.h @ 1520:954d0cf29ca7 import-audio-data

Switch the normalisation option in WritableWaveFileModel from normalising on read to normalising on write, so that the saved file is already normalised and therefore can be read again without having to remember to normalise it
author Chris Cannam
date Wed, 12 Sep 2018 13:56:56 +0100
parents 1a572937ed8c
children c01cbe41aeb5
rev   line source
Chris@297 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@297 2
Chris@297 3 /*
Chris@297 4 Sonic Visualiser
Chris@297 5 An audio file viewer and annotation editor.
Chris@297 6 Centre for Digital Music, Queen Mary, University of London.
Chris@297 7 This file copyright 2007 QMUL.
Chris@297 8
Chris@297 9 This program is free software; you can redistribute it and/or
Chris@297 10 modify it under the terms of the GNU General Public License as
Chris@297 11 published by the Free Software Foundation; either version 2 of the
Chris@297 12 License, or (at your option) any later version. See the file
Chris@297 13 COPYING included with this distribution for more information.
Chris@297 14 */
Chris@297 15
Chris@297 16 #ifndef _AGGREGATE_WAVE_MODEL_H_
Chris@297 17 #define _AGGREGATE_WAVE_MODEL_H_
Chris@297 18
Chris@297 19 #include "RangeSummarisableTimeValueModel.h"
Chris@297 20 #include "PowerOfSqrtTwoZoomConstraint.h"
Chris@297 21
Chris@297 22 #include <vector>
Chris@297 23
Chris@297 24 class AggregateWaveModel : public RangeSummarisableTimeValueModel
Chris@297 25 {
Chris@297 26 Q_OBJECT
Chris@297 27
Chris@297 28 public:
Chris@297 29 struct ModelChannelSpec
Chris@297 30 {
Chris@297 31 ModelChannelSpec(RangeSummarisableTimeValueModel *m, int c) :
Chris@297 32 model(m), channel(c) { }
Chris@297 33 RangeSummarisableTimeValueModel *model;
Chris@297 34 int channel;
Chris@297 35 };
Chris@297 36
Chris@297 37 typedef std::vector<ModelChannelSpec> ChannelSpecList;
Chris@297 38
Chris@297 39 AggregateWaveModel(ChannelSpecList channelSpecs);
Chris@297 40 ~AggregateWaveModel();
Chris@297 41
Chris@297 42 bool isOK() const;
Chris@297 43 bool isReady(int *) const;
Chris@297 44
Chris@345 45 QString getTypeName() const { return tr("Aggregate Wave"); }
Chris@345 46
Chris@929 47 int getComponentCount() const;
Chris@929 48 ModelChannelSpec getComponent(int c) const;
Chris@297 49
Chris@297 50 const ZoomConstraint *getZoomConstraint() const { return &m_zoomConstraint; }
Chris@297 51
Chris@1038 52 sv_frame_t getFrameCount() const;
Chris@929 53 int getChannelCount() const;
Chris@1040 54 sv_samplerate_t getSampleRate() const;
Chris@297 55
Chris@297 56 float getValueMinimum() const { return -1.0f; }
Chris@297 57 float getValueMaximum() const { return 1.0f; }
Chris@297 58
Chris@1038 59 virtual sv_frame_t getStartFrame() const { return 0; }
Chris@1038 60 virtual sv_frame_t getEndFrame() const { return getFrameCount(); }
Chris@297 61
Chris@1326 62 virtual floatvec_t getData(int channel, sv_frame_t start, sv_frame_t count) const;
Chris@297 63
Chris@1326 64 virtual std::vector<floatvec_t> getMultiChannelData(int fromchannel, int tochannel, sv_frame_t start, sv_frame_t count) const;
Chris@363 65
Chris@929 66 virtual int getSummaryBlockSize(int desired) const;
Chris@377 67
Chris@1038 68 virtual void getSummaries(int channel, sv_frame_t start, sv_frame_t count,
Chris@300 69 RangeBlock &ranges,
Chris@929 70 int &blockSize) const;
Chris@297 71
Chris@1038 72 virtual Range getSummary(int channel, sv_frame_t start, sv_frame_t count) const;
Chris@297 73
Chris@297 74 virtual void toXml(QTextStream &out,
Chris@297 75 QString indent = "",
Chris@297 76 QString extraAttributes = "") const;
Chris@297 77
Chris@297 78 signals:
Chris@297 79 void modelChanged();
Chris@1038 80 void modelChangedWithin(sv_frame_t, sv_frame_t);
Chris@297 81 void completionChanged();
Chris@1390 82 void modelInvalidated();
Chris@297 83
Chris@297 84 protected slots:
Chris@297 85 void componentModelChanged();
Chris@1038 86 void componentModelChangedWithin(sv_frame_t, sv_frame_t);
Chris@297 87 void componentModelCompletionChanged();
Chris@1389 88 void componentModelAboutToBeDeleted();
Chris@297 89
Chris@297 90 protected:
Chris@297 91 ChannelSpecList m_components;
Chris@297 92 static PowerOfSqrtTwoZoomConstraint m_zoomConstraint;
Chris@1389 93 bool m_invalidated; // because one of its component models is aboutToBeDeleted
Chris@297 94 };
Chris@297 95
Chris@297 96 #endif
Chris@297 97