Mercurial > hg > svcore
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 |