annotate data/model/WritableWaveFileModel.h @ 1008:d9e0e59a1581

When using an aggregate model to pass data to a transform, zero-pad the shorter input to the duration of the longer rather than truncating the longer. (This is better behaviour for e.g. MATCH, and in any case the code was previously truncating incorrectly and ending up with garbage data at the end.)
author Chris Cannam
date Fri, 14 Nov 2014 13:51:33 +0000
parents 59e7fe1b1003
children cc27f35aa75c
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@929 29 WritableWaveFileModel(int sampleRate, int 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@929 38 virtual bool addSamples(float **samples, int 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@929 51 int getFrameCount() const;
Chris@929 52 int getChannelCount() const { return m_channels; }
Chris@929 53 int 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@929 60 virtual int getStartFrame() const { return m_startFrame; }
Chris@929 61 virtual int getEndFrame() const { return m_startFrame + getFrameCount(); }
Chris@175 62
Chris@929 63 void setStartFrame(int startFrame);
Chris@175 64
Chris@929 65 virtual int getData(int channel, int start, int count,
Chris@300 66 float *buffer) const;
Chris@175 67
Chris@929 68 virtual int getData(int channel, int start, int count,
Chris@300 69 double *buffer) const;
Chris@175 70
Chris@929 71 virtual int getData(int fromchannel, int tochannel,
Chris@929 72 int start, int count,
Chris@363 73 float **buffer) const;
Chris@363 74
Chris@929 75 virtual int getSummaryBlockSize(int desired) const;
Chris@377 76
Chris@929 77 virtual void getSummaries(int channel, int start, int count,
Chris@929 78 RangeBlock &ranges, int &blockSize) const;
Chris@300 79
Chris@929 80 virtual Range getSummary(int channel, int start, int count) const;
Chris@175 81
Chris@345 82 QString getTypeName() const { return tr("Writable Wave File"); }
Chris@345 83
Chris@175 84 virtual void toXml(QTextStream &out,
Chris@175 85 QString indent = "",
Chris@175 86 QString extraAttributes = "") const;
Chris@175 87
Chris@175 88 protected:
Chris@175 89 WaveFileModel *m_model;
Chris@175 90 WavFileWriter *m_writer;
Chris@175 91 WavFileReader *m_reader;
Chris@929 92 int m_sampleRate;
Chris@929 93 int m_channels;
Chris@929 94 int m_frameCount;
Chris@929 95 int m_startFrame;
Chris@188 96 int m_completion;
Chris@175 97 };
Chris@175 98
Chris@175 99 #endif
Chris@175 100