lbajardsilogic@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ lbajardsilogic@0: lbajardsilogic@0: /* lbajardsilogic@0: Sonic Visualiser lbajardsilogic@0: An audio file viewer and annotation editor. lbajardsilogic@0: Centre for Digital Music, Queen Mary, University of London. lbajardsilogic@0: This file copyright 2006 QMUL. lbajardsilogic@0: lbajardsilogic@0: This program is free software; you can redistribute it and/or lbajardsilogic@0: modify it under the terms of the GNU General Public License as lbajardsilogic@0: published by the Free Software Foundation; either version 2 of the lbajardsilogic@0: License, or (at your option) any later version. See the file lbajardsilogic@0: COPYING included with this distribution for more information. lbajardsilogic@0: */ lbajardsilogic@0: lbajardsilogic@0: #ifndef _WRITABLE_WAVE_FILE_MODEL_H_ lbajardsilogic@0: #define _WRITABLE_WAVE_FILE_MODEL_H_ lbajardsilogic@0: lbajardsilogic@0: #include "WaveFileModel.h" lbajardsilogic@0: lbajardsilogic@0: class WavFileWriter; lbajardsilogic@0: class WavFileReader; lbajardsilogic@0: lbajardsilogic@0: class WritableWaveFileModel : public RangeSummarisableTimeValueModel lbajardsilogic@0: { lbajardsilogic@0: Q_OBJECT lbajardsilogic@0: lbajardsilogic@0: public: lbajardsilogic@0: WritableWaveFileModel(size_t sampleRate, size_t channels, QString path = ""); lbajardsilogic@0: ~WritableWaveFileModel(); lbajardsilogic@0: lbajardsilogic@0: /** lbajardsilogic@0: * Call addSamples to append a block of samples to the end of the lbajardsilogic@0: * file. Caller should also call setCompletion to update the lbajardsilogic@0: * progress of this file, if it has a known end point, and should lbajardsilogic@0: * call setCompletion(100) when the file has been written. lbajardsilogic@0: */ lbajardsilogic@0: virtual bool addSamples(float **samples, size_t count); lbajardsilogic@0: lbajardsilogic@0: bool isOK() const; lbajardsilogic@0: bool isReady(int *) const; lbajardsilogic@0: lbajardsilogic@0: virtual void setCompletion(int completion); // percentage lbajardsilogic@0: virtual int getCompletion() const { return m_completion; } lbajardsilogic@0: lbajardsilogic@0: const ZoomConstraint *getZoomConstraint() const { lbajardsilogic@0: static PowerOfSqrtTwoZoomConstraint zc; lbajardsilogic@0: return &zc; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: size_t getFrameCount() const; lbajardsilogic@0: size_t getChannelCount() const { return m_channels; } lbajardsilogic@0: size_t getSampleRate() const { return m_sampleRate; } lbajardsilogic@0: lbajardsilogic@0: virtual Model *clone() const; lbajardsilogic@0: lbajardsilogic@0: float getValueMinimum() const { return -1.0f; } lbajardsilogic@0: float getValueMaximum() const { return 1.0f; } lbajardsilogic@0: lbajardsilogic@0: virtual size_t getStartFrame() const { return 0; } lbajardsilogic@0: virtual size_t getEndFrame() const { return getFrameCount(); } lbajardsilogic@0: lbajardsilogic@0: virtual size_t getValues(int channel, size_t start, size_t end, lbajardsilogic@0: float *buffer) const; lbajardsilogic@0: lbajardsilogic@0: virtual size_t getValues(int channel, size_t start, size_t end, lbajardsilogic@0: double *buffer) const; lbajardsilogic@0: lbajardsilogic@0: virtual void getRanges(size_t channel, size_t start, size_t end, lbajardsilogic@0: RangeBlock &ranges, size_t &blockSize) const; lbajardsilogic@0: lbajardsilogic@0: virtual Range getRange(size_t channel, size_t start, size_t end) const; lbajardsilogic@0: lbajardsilogic@0: virtual void toXml(QTextStream &out, lbajardsilogic@0: QString indent = "", lbajardsilogic@0: QString extraAttributes = "") const; lbajardsilogic@0: lbajardsilogic@0: virtual QString toXmlString(QString indent = "", lbajardsilogic@0: QString extraAttributes = "") const; lbajardsilogic@0: lbajardsilogic@0: protected: lbajardsilogic@0: WaveFileModel *m_model; lbajardsilogic@0: WavFileWriter *m_writer; lbajardsilogic@0: WavFileReader *m_reader; lbajardsilogic@0: size_t m_sampleRate; lbajardsilogic@0: size_t m_channels; lbajardsilogic@0: size_t m_frameCount; lbajardsilogic@0: int m_completion; lbajardsilogic@0: }; lbajardsilogic@0: lbajardsilogic@0: #endif lbajardsilogic@0: