annotate data/model/WritableWaveFileModel.h @ 184:5a916fee6d2d

* Handle generator transforms (plugins whose channel count isn't dependent on number of audio inputs, as they have none) * Be less keen to suspend writing FFT data in spectrogram repaint -- only do it if we find we actually need to query the FFT data (i.e. we aren't repainting an area that hasn't been generated at all yet)
author Chris Cannam
date Tue, 10 Oct 2006 19:04:57 +0000
parents 0ed2b2e26b44
children f86b74d1b143
rev   line source
Chris@175 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@175 2
Chris@175 3 /*
Chris@175 4 Sonic Visualiser
Chris@175 5 An audio file viewer and annotation editor.
Chris@175 6 Centre for Digital Music, Queen Mary, University of London.
Chris@175 7 This file copyright 2006 Chris Cannam.
Chris@175 8
Chris@175 9 This program is free software; you can redistribute it and/or
Chris@175 10 modify it under the terms of the GNU General Public License as
Chris@175 11 published by the Free Software Foundation; either version 2 of the
Chris@175 12 License, or (at your option) any later version. See the file
Chris@175 13 COPYING included with this distribution for more information.
Chris@175 14 */
Chris@175 15
Chris@175 16 #ifndef _WRITABLE_WAVE_FILE_MODEL_H_
Chris@175 17 #define _WRITABLE_WAVE_FILE_MODEL_H_
Chris@175 18
Chris@175 19 #include "WaveFileModel.h"
Chris@175 20
Chris@175 21 class WavFileWriter;
Chris@175 22 class WavFileReader;
Chris@175 23
Chris@179 24 class WritableWaveFileModel : public RangeSummarisableTimeValueModel
Chris@175 25 {
Chris@175 26 Q_OBJECT
Chris@175 27
Chris@175 28 public:
Chris@175 29 WritableWaveFileModel(size_t sampleRate, size_t channels, QString path = "");
Chris@175 30 ~WritableWaveFileModel();
Chris@175 31
Chris@175 32 virtual bool addSamples(float **samples, size_t count);
Chris@175 33 virtual void sync();
Chris@175 34
Chris@175 35 bool isOK() const;
Chris@175 36 bool isReady(int *) const;
Chris@175 37
Chris@179 38 const ZoomConstraint *getZoomConstraint() const {
Chris@179 39 static PowerOfSqrtTwoZoomConstraint zc;
Chris@179 40 return &zc;
Chris@179 41 }
Chris@179 42
Chris@175 43 size_t getFrameCount() const;
Chris@175 44 size_t getChannelCount() const { return m_channels; }
Chris@175 45 size_t getSampleRate() const { return m_sampleRate; }
Chris@175 46
Chris@175 47 virtual Model *clone() const;
Chris@175 48
Chris@175 49 float getValueMinimum() const { return -1.0f; }
Chris@175 50 float getValueMaximum() const { return 1.0f; }
Chris@175 51
Chris@175 52 virtual size_t getStartFrame() const { return 0; }
Chris@175 53 virtual size_t getEndFrame() const { return getFrameCount(); }
Chris@175 54
Chris@175 55 virtual size_t getValues(int channel, size_t start, size_t end,
Chris@175 56 float *buffer) const;
Chris@175 57
Chris@175 58 virtual size_t getValues(int channel, size_t start, size_t end,
Chris@175 59 double *buffer) const;
Chris@175 60
Chris@175 61 virtual RangeBlock getRanges(size_t channel, size_t start, size_t end,
Chris@175 62 size_t &blockSize) const;
Chris@175 63
Chris@175 64 virtual Range getRange(size_t channel, size_t start, size_t end) const;
Chris@175 65
Chris@175 66 virtual void toXml(QTextStream &out,
Chris@175 67 QString indent = "",
Chris@175 68 QString extraAttributes = "") const;
Chris@175 69
Chris@175 70 virtual QString toXmlString(QString indent = "",
Chris@175 71 QString extraAttributes = "") const;
Chris@175 72
Chris@175 73 protected:
Chris@175 74 WaveFileModel *m_model;
Chris@175 75 WavFileWriter *m_writer;
Chris@175 76 WavFileReader *m_reader;
Chris@175 77 size_t m_sampleRate;
Chris@175 78 size_t m_channels;
Chris@175 79 size_t m_frameCount;
Chris@175 80 };
Chris@175 81
Chris@175 82 #endif
Chris@175 83