Mercurial > hg > svcore
comparison data/model/ReadOnlyWaveFileModel.h @ 1527:710e6250a401 zoom
Merge from default branch
author | Chris Cannam |
---|---|
date | Mon, 17 Sep 2018 13:51:14 +0100 |
parents | b7042aaecebe |
children | d93e34684da7 |
comparison
equal
deleted
inserted
replaced
1324:d4a28d1479a8 | 1527:710e6250a401 |
---|---|
34 class ReadOnlyWaveFileModel : public WaveFileModel | 34 class ReadOnlyWaveFileModel : public WaveFileModel |
35 { | 35 { |
36 Q_OBJECT | 36 Q_OBJECT |
37 | 37 |
38 public: | 38 public: |
39 /** | |
40 * Construct a WaveFileModel from a source path and optional | |
41 * resampling target rate | |
42 */ | |
39 ReadOnlyWaveFileModel(FileSource source, sv_samplerate_t targetRate = 0); | 43 ReadOnlyWaveFileModel(FileSource source, sv_samplerate_t targetRate = 0); |
44 | |
45 /** | |
46 * Construct a WaveFileModel from a source path using an existing | |
47 * AudioFileReader. The model does not take ownership of the | |
48 * AudioFileReader, which remains managed by the caller and must | |
49 * outlive the model. | |
50 */ | |
40 ReadOnlyWaveFileModel(FileSource source, AudioFileReader *reader); | 51 ReadOnlyWaveFileModel(FileSource source, AudioFileReader *reader); |
52 | |
41 ~ReadOnlyWaveFileModel(); | 53 ~ReadOnlyWaveFileModel(); |
42 | 54 |
43 bool isOK() const; | 55 bool isOK() const; |
44 bool isReady(int *) const; | 56 bool isReady(int *) const; |
45 | 57 |
62 virtual sv_frame_t getStartFrame() const { return m_startFrame; } | 74 virtual sv_frame_t getStartFrame() const { return m_startFrame; } |
63 virtual sv_frame_t getEndFrame() const { return m_startFrame + getFrameCount(); } | 75 virtual sv_frame_t getEndFrame() const { return m_startFrame + getFrameCount(); } |
64 | 76 |
65 void setStartFrame(sv_frame_t startFrame) { m_startFrame = startFrame; } | 77 void setStartFrame(sv_frame_t startFrame) { m_startFrame = startFrame; } |
66 | 78 |
67 virtual std::vector<float> getData(int channel, sv_frame_t start, sv_frame_t count) const; | 79 virtual floatvec_t getData(int channel, sv_frame_t start, sv_frame_t count) const; |
68 | 80 |
69 virtual std::vector<std::vector<float>> getMultiChannelData(int fromchannel, int tochannel, sv_frame_t start, sv_frame_t count) const; | 81 virtual std::vector<floatvec_t> getMultiChannelData(int fromchannel, int tochannel, sv_frame_t start, sv_frame_t count) const; |
70 | 82 |
71 virtual int getSummaryBlockSize(int desired) const; | 83 virtual int getSummaryBlockSize(int desired) const; |
72 | 84 |
73 virtual void getSummaries(int channel, sv_frame_t start, sv_frame_t count, | 85 virtual void getSummaries(int channel, sv_frame_t start, sv_frame_t count, |
74 RangeBlock &ranges, | 86 RangeBlock &ranges, |
91 | 103 |
92 class RangeCacheFillThread : public Thread | 104 class RangeCacheFillThread : public Thread |
93 { | 105 { |
94 public: | 106 public: |
95 RangeCacheFillThread(ReadOnlyWaveFileModel &model) : | 107 RangeCacheFillThread(ReadOnlyWaveFileModel &model) : |
96 m_model(model), m_fillExtent(0), | 108 m_model(model), m_fillExtent(0), |
97 m_frameCount(model.getFrameCount()) { } | 109 m_frameCount(model.getFrameCount()) { } |
98 | 110 |
99 sv_frame_t getFillExtent() const { return m_fillExtent; } | 111 sv_frame_t getFillExtent() const { return m_fillExtent; } |
100 virtual void run(); | 112 virtual void run(); |
101 | 113 |
102 protected: | 114 protected: |
103 ReadOnlyWaveFileModel &m_model; | 115 ReadOnlyWaveFileModel &m_model; |
104 sv_frame_t m_fillExtent; | 116 sv_frame_t m_fillExtent; |
105 sv_frame_t m_frameCount; | 117 sv_frame_t m_frameCount; |
106 }; | 118 }; |
107 | 119 |
108 void fillCache(); | 120 void fillCache(); |
109 | 121 |
120 QTimer *m_updateTimer; | 132 QTimer *m_updateTimer; |
121 sv_frame_t m_lastFillExtent; | 133 sv_frame_t m_lastFillExtent; |
122 bool m_exiting; | 134 bool m_exiting; |
123 static PowerOfSqrtTwoZoomConstraint m_zoomConstraint; | 135 static PowerOfSqrtTwoZoomConstraint m_zoomConstraint; |
124 | 136 |
125 mutable std::vector<float> m_directRead; | 137 mutable floatvec_t m_directRead; |
126 mutable sv_frame_t m_lastDirectReadStart; | 138 mutable sv_frame_t m_lastDirectReadStart; |
127 mutable sv_frame_t m_lastDirectReadCount; | 139 mutable sv_frame_t m_lastDirectReadCount; |
128 mutable QMutex m_directReadMutex; | 140 mutable QMutex m_directReadMutex; |
129 }; | 141 }; |
130 | 142 |