annotate data/model/WritableWaveFileModel.h @ 299:576be0d0d218

* Merge transform directory from sv-match-alignment branch (the previous comment included notes for this stuff, but I missed it in the actual merge) * Fix crash when a transform fails to create an output model and the thread that created the transform then deletes its input model thinking it's no longer needed, even though the transform run thread is still using it -- fix is to wait() on the transform before returning the null output model
author Chris Cannam
date Fri, 28 Sep 2007 16:15:06 +0000
parents 7b96b3bd4bae
children 5877d68815c7
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@202 7 This file copyright 2006 QMUL.
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@188 32 /**
Chris@188 33 * Call addSamples to append a block of samples to the end of the
Chris@188 34 * file. Caller should also call setCompletion to update the
Chris@188 35 * progress of this file, if it has a known end point, and should
Chris@188 36 * call setCompletion(100) when the file has been written.
Chris@188 37 */
Chris@175 38 virtual bool addSamples(float **samples, size_t count);
Chris@175 39
Chris@175 40 bool isOK() const;
Chris@175 41 bool isReady(int *) const;
Chris@175 42
Chris@188 43 virtual void setCompletion(int completion); // percentage
Chris@188 44 virtual int getCompletion() const { return m_completion; }
Chris@188 45
Chris@179 46 const ZoomConstraint *getZoomConstraint() const {
Chris@179 47 static PowerOfSqrtTwoZoomConstraint zc;
Chris@179 48 return &zc;
Chris@179 49 }
Chris@179 50
Chris@175 51 size_t getFrameCount() const;
Chris@175 52 size_t getChannelCount() const { return m_channels; }
Chris@175 53 size_t getSampleRate() const { return m_sampleRate; }
Chris@175 54
Chris@175 55 virtual Model *clone() const;
Chris@175 56
Chris@175 57 float getValueMinimum() const { return -1.0f; }
Chris@175 58 float getValueMaximum() const { return 1.0f; }
Chris@175 59
Chris@175 60 virtual size_t getStartFrame() const { return 0; }
Chris@175 61 virtual size_t getEndFrame() const { return getFrameCount(); }
Chris@175 62
Chris@175 63 virtual size_t getValues(int channel, size_t start, size_t end,
Chris@175 64 float *buffer) const;
Chris@175 65
Chris@175 66 virtual size_t getValues(int channel, size_t start, size_t end,
Chris@175 67 double *buffer) const;
Chris@175 68
Chris@225 69 virtual void getRanges(size_t channel, size_t start, size_t end,
Chris@225 70 RangeBlock &ranges, size_t &blockSize) const;
Chris@175 71
Chris@175 72 virtual Range getRange(size_t channel, size_t start, size_t end) const;
Chris@175 73
Chris@175 74 virtual void toXml(QTextStream &out,
Chris@175 75 QString indent = "",
Chris@175 76 QString extraAttributes = "") const;
Chris@175 77
Chris@175 78 protected:
Chris@175 79 WaveFileModel *m_model;
Chris@175 80 WavFileWriter *m_writer;
Chris@175 81 WavFileReader *m_reader;
Chris@175 82 size_t m_sampleRate;
Chris@175 83 size_t m_channels;
Chris@175 84 size_t m_frameCount;
Chris@188 85 int m_completion;
Chris@175 86 };
Chris@175 87
Chris@175 88 #endif
Chris@175 89