comparison data/model/AggregateWaveModel.cpp @ 1069:32ab6c48efaa

Merge from branch tonioni
author Chris Cannam
date Mon, 20 Apr 2015 09:11:34 +0100
parents 0fd3661bcfff
children 9f4505ac9072
comparison
equal deleted inserted replaced
1036:682d64f05e72 1069:32ab6c48efaa
63 } 63 }
64 } 64 }
65 return ready; 65 return ready;
66 } 66 }
67 67
68 int 68 sv_frame_t
69 AggregateWaveModel::getFrameCount() const 69 AggregateWaveModel::getFrameCount() const
70 { 70 {
71 int count = 0; 71 sv_frame_t count = 0;
72 72
73 for (ChannelSpecList::const_iterator i = m_components.begin(); 73 for (ChannelSpecList::const_iterator i = m_components.begin();
74 i != m_components.end(); ++i) { 74 i != m_components.end(); ++i) {
75 int thisCount = i->model->getEndFrame() - i->model->getStartFrame(); 75 sv_frame_t thisCount = i->model->getEndFrame() - i->model->getStartFrame();
76 if (thisCount > count) count = thisCount; 76 if (thisCount > count) count = thisCount;
77 } 77 }
78 78
79 return count; 79 return count;
80 } 80 }
81 81
82 int 82 int
83 AggregateWaveModel::getChannelCount() const 83 AggregateWaveModel::getChannelCount() const
84 { 84 {
85 return m_components.size(); 85 return int(m_components.size());
86 } 86 }
87 87
88 int 88 sv_samplerate_t
89 AggregateWaveModel::getSampleRate() const 89 AggregateWaveModel::getSampleRate() const
90 { 90 {
91 if (m_components.empty()) return 0; 91 if (m_components.empty()) return 0;
92 return m_components.begin()->model->getSampleRate(); 92 return m_components.begin()->model->getSampleRate();
93 } 93 }
94 94
95 Model * 95 sv_frame_t
96 AggregateWaveModel::clone() const 96 AggregateWaveModel::getData(int channel, sv_frame_t start, sv_frame_t count,
97 {
98 return new AggregateWaveModel(m_components);
99 }
100
101 int
102 AggregateWaveModel::getData(int channel, int start, int count,
103 float *buffer) const 97 float *buffer) const
104 { 98 {
105 int ch0 = channel, ch1 = channel; 99 int ch0 = channel, ch1 = channel;
106 bool mixing = false; 100 bool mixing = false;
107 if (channel == -1) { 101 if (channel == -1) {
111 } 105 }
112 106
113 float *readbuf = buffer; 107 float *readbuf = buffer;
114 if (mixing) { 108 if (mixing) {
115 readbuf = new float[count]; 109 readbuf = new float[count];
116 for (int i = 0; i < count; ++i) { 110 for (sv_frame_t i = 0; i < count; ++i) {
117 buffer[i] = 0.f; 111 buffer[i] = 0.f;
118 } 112 }
119 } 113 }
120 114
121 int longest = 0; 115 sv_frame_t longest = 0;
122 116
123 for (int c = ch0; c <= ch1; ++c) { 117 for (int c = ch0; c <= ch1; ++c) {
124 int here = 118 sv_frame_t here =
125 m_components[c].model->getData(m_components[c].channel, 119 m_components[c].model->getData(m_components[c].channel,
126 start, count, 120 start, count,
127 readbuf); 121 readbuf);
128 if (here > longest) { 122 if (here > longest) {
129 longest = here; 123 longest = here;
130 } 124 }
131 if (here < count) { 125 if (here < count) {
132 for (int i = here; i < count; ++i) { 126 for (sv_frame_t i = here; i < count; ++i) {
133 readbuf[i] = 0.f; 127 readbuf[i] = 0.f;
134 } 128 }
135 } 129 }
136 if (mixing) { 130 if (mixing) {
137 for (int i = 0; i < count; ++i) { 131 for (sv_frame_t i = 0; i < count; ++i) {
138 buffer[i] += readbuf[i]; 132 buffer[i] += readbuf[i];
139 } 133 }
140 } 134 }
141 } 135 }
142 136
143 if (mixing) delete[] readbuf; 137 if (mixing) delete[] readbuf;
144 return longest; 138 return longest;
145 } 139 }
146 140
147 int 141 sv_frame_t
148 AggregateWaveModel::getData(int channel, int start, int count, 142 AggregateWaveModel::getData(int channel, sv_frame_t start, sv_frame_t count,
149 double *buffer) const 143 double *buffer) const
150 { 144 {
151 int ch0 = channel, ch1 = channel; 145 int ch0 = channel, ch1 = channel;
152 bool mixing = false; 146 bool mixing = false;
153 if (channel == -1) { 147 if (channel == -1) {
157 } 151 }
158 152
159 double *readbuf = buffer; 153 double *readbuf = buffer;
160 if (mixing) { 154 if (mixing) {
161 readbuf = new double[count]; 155 readbuf = new double[count];
162 for (int i = 0; i < count; ++i) { 156 for (sv_frame_t i = 0; i < count; ++i) {
163 buffer[i] = 0.0; 157 buffer[i] = 0.0;
164 } 158 }
165 } 159 }
166 160
167 int longest = 0; 161 sv_frame_t longest = 0;
168 162
169 for (int c = ch0; c <= ch1; ++c) { 163 for (int c = ch0; c <= ch1; ++c) {
170 int here = 164 sv_frame_t here =
171 m_components[c].model->getData(m_components[c].channel, 165 m_components[c].model->getData(m_components[c].channel,
172 start, count, 166 start, count,
173 readbuf); 167 readbuf);
174 if (here > longest) { 168 if (here > longest) {
175 longest = here; 169 longest = here;
176 } 170 }
177 if (here < count) { 171 if (here < count) {
178 for (int i = here; i < count; ++i) { 172 for (sv_frame_t i = here; i < count; ++i) {
179 readbuf[i] = 0.; 173 readbuf[i] = 0.;
180 } 174 }
181 } 175 }
182 if (mixing) { 176 if (mixing) {
183 for (int i = 0; i < count; ++i) { 177 for (sv_frame_t i = 0; i < count; ++i) {
184 buffer[i] += readbuf[i]; 178 buffer[i] += readbuf[i];
185 } 179 }
186 } 180 }
187 } 181 }
188 182
189 if (mixing) delete[] readbuf; 183 if (mixing) delete[] readbuf;
190 return longest; 184 return longest;
191 } 185 }
192 186
193 int 187 sv_frame_t
194 AggregateWaveModel::getData(int fromchannel, int tochannel, 188 AggregateWaveModel::getData(int fromchannel, int tochannel,
195 int start, int count, 189 sv_frame_t start, sv_frame_t count,
196 float **buffer) const 190 float **buffer) const
197 { 191 {
198 int min = count; 192 sv_frame_t min = count;
199 193
200 for (int c = fromchannel; c <= tochannel; ++c) { 194 for (int c = fromchannel; c <= tochannel; ++c) {
201 int here = getData(c, start, count, buffer[c - fromchannel]); 195 sv_frame_t here = getData(c, start, count, buffer[c - fromchannel]);
202 if (here < min) min = here; 196 if (here < min) min = here;
203 } 197 }
204 198
205 return min; 199 return min;
206 } 200 }
211 //!!! complete 205 //!!! complete
212 return desired; 206 return desired;
213 } 207 }
214 208
215 void 209 void
216 AggregateWaveModel::getSummaries(int, int, int, 210 AggregateWaveModel::getSummaries(int, sv_frame_t, sv_frame_t,
217 RangeBlock &, int &) const 211 RangeBlock &, int &) const
218 { 212 {
219 //!!! complete 213 //!!! complete
220 } 214 }
221 215
222 AggregateWaveModel::Range 216 AggregateWaveModel::Range
223 AggregateWaveModel::getSummary(int, int, int) const 217 AggregateWaveModel::getSummary(int, sv_frame_t, sv_frame_t) const
224 { 218 {
225 //!!! complete 219 //!!! complete
226 return Range(); 220 return Range();
227 } 221 }
228 222
229 int 223 int
230 AggregateWaveModel::getComponentCount() const 224 AggregateWaveModel::getComponentCount() const
231 { 225 {
232 return m_components.size(); 226 return int(m_components.size());
233 } 227 }
234 228
235 AggregateWaveModel::ModelChannelSpec 229 AggregateWaveModel::ModelChannelSpec
236 AggregateWaveModel::getComponent(int c) const 230 AggregateWaveModel::getComponent(int c) const
237 { 231 {
243 { 237 {
244 emit modelChanged(); 238 emit modelChanged();
245 } 239 }
246 240
247 void 241 void
248 AggregateWaveModel::componentModelChangedWithin(int start, int end) 242 AggregateWaveModel::componentModelChangedWithin(sv_frame_t start, sv_frame_t end)
249 { 243 {
250 emit modelChangedWithin(start, end); 244 emit modelChangedWithin(start, end);
251 } 245 }
252 246
253 void 247 void