Chris@1086: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
Chris@1086: 
Chris@1086: /*
Chris@1086:     Sonic Visualiser
Chris@1086:     An audio file viewer and annotation editor.
Chris@1086:     Centre for Digital Music, Queen Mary, University of London.
Chris@1086:     This file copyright 2006 Chris Cannam.
Chris@1086:     
Chris@1086:     This program is free software; you can redistribute it and/or
Chris@1086:     modify it under the terms of the GNU General Public License as
Chris@1086:     published by the Free Software Foundation; either version 2 of the
Chris@1086:     License, or (at your option) any later version.  See the file
Chris@1086:     COPYING included with this distribution for more information.
Chris@1086: */
Chris@1086: 
Chris@1086: #ifndef MOCK_WAVE_MODEL_H
Chris@1086: #define MOCK_WAVE_MODEL_H
Chris@1086: 
Chris@1086: #include "../DenseTimeValueModel.h"
Chris@1086: 
Chris@1086: #include <vector>
Chris@1086: 
Chris@1086: enum Sort {
Chris@1086:     DC,
Chris@1086:     Sine,
Chris@1086:     Cosine,
Chris@1086:     Nyquist,
Chris@1086:     Dirac
Chris@1086: };
Chris@1086: 
Chris@1086: class MockWaveModel : public DenseTimeValueModel
Chris@1086: {
Chris@1086:     Q_OBJECT
Chris@1086: 
Chris@1086: public:
Chris@1088:     /** One Sort per channel! Length is in samples, and is in addition
Chris@1088:      * to "pad" number of zero samples at the start and end */
Chris@1088:     MockWaveModel(std::vector<Sort> sorts, int length, int pad);
Chris@1086: 
Chris@1086:     virtual float getValueMinimum() const { return -1.f; }
Chris@1086:     virtual float getValueMaximum() const { return  1.f; }
Chris@1086:     virtual int getChannelCount() const { return int(m_data.size()); }
Chris@1086:     
Chris@1096:     virtual std::vector<float> getData(int channel, sv_frame_t start, sv_frame_t count) const;
Chris@1096:     virtual std::vector<std::vector<float>> getMultiChannelData(int fromchannel, int tochannel, sv_frame_t start, sv_frame_t count) const;
Chris@1086: 
Chris@1086:     virtual bool canPlay() const { return true; }
Chris@1086:     virtual QString getDefaultPlayClipId() const { return ""; }
Chris@1086: 
Chris@1086:     virtual sv_frame_t getStartFrame() const { return 0; }
Chris@1086:     virtual sv_frame_t getEndFrame() const { return m_data[0].size(); }
Chris@1086:     virtual sv_samplerate_t getSampleRate() const { return 44100; }
Chris@1086:     virtual bool isOK() const { return true; }
Chris@1086:     
Chris@1086:     QString getTypeName() const { return tr("Mock Wave"); }
Chris@1086: 
Chris@1086: private:
Chris@1086:     std::vector<std::vector<float> > m_data;
Chris@1088:     std::vector<float> generate(Sort sort, int length, int pad) const;
Chris@1086: };
Chris@1086: 
Chris@1086: #endif