Mercurial > hg > svcore
comparison data/model/TimeFrequencyBoxModel.h @ 1786:a72921e2194f time-frequency-boxes
Ensure CSV-style export from time-freq box model is in the expected format
author | Chris Cannam |
---|---|
date | Fri, 20 Sep 2019 11:24:47 +0100 |
parents | 894c2a780444 |
children | baafe1bb7e51 |
comparison
equal
deleted
inserted
replaced
1785:894c2a780444 | 1786:a72921e2194f |
---|---|
206 int getRowCount() const override { | 206 int getRowCount() const override { |
207 return m_events.count(); | 207 return m_events.count(); |
208 } | 208 } |
209 | 209 |
210 int getColumnCount() const override { | 210 int getColumnCount() const override { |
211 return 5; | 211 return 6; |
212 } | 212 } |
213 | 213 |
214 bool isColumnTimeValue(int column) const override { | 214 bool isColumnTimeValue(int column) const override { |
215 // NB duration is not a "time value" -- that's for columns | 215 // NB duration is not a "time value" -- that's for columns |
216 // whose sort ordering is exactly that of the frame time | 216 // whose sort ordering is exactly that of the frame time |
232 QString getHeading(int column) const override { | 232 QString getHeading(int column) const override { |
233 switch (column) { | 233 switch (column) { |
234 case 0: return tr("Time"); | 234 case 0: return tr("Time"); |
235 case 1: return tr("Frame"); | 235 case 1: return tr("Frame"); |
236 case 2: return tr("Duration"); | 236 case 2: return tr("Duration"); |
237 case 3: return tr("Minimum Frequency"); | 237 case 3: return tr("Min Freq"); |
238 case 4: return tr("Maximum Frequency"); | 238 case 4: return tr("Max Freq"); |
239 case 5: return tr("Label"); | 239 case 5: return tr("Label"); |
240 default: return tr("Unknown"); | 240 default: return tr("Unknown"); |
241 } | 241 } |
242 } | 242 } |
243 | 243 |
321 | 321 |
322 QString toDelimitedDataString(QString delimiter, | 322 QString toDelimitedDataString(QString delimiter, |
323 DataExportOptions options, | 323 DataExportOptions options, |
324 sv_frame_t startFrame, | 324 sv_frame_t startFrame, |
325 sv_frame_t duration) const override { | 325 sv_frame_t duration) const override { |
326 return m_events.toDelimitedDataString | 326 |
327 (delimiter, | 327 // We need a custom format here |
328 options, | 328 |
329 startFrame, | 329 EventVector ee = m_events.getEventsSpanning(startFrame, duration); |
330 duration, | 330 |
331 m_sampleRate, | 331 QString s; |
332 m_resolution, | 332 |
333 Event().withValue(0.f).withDuration(m_resolution)); | 333 for (auto e: ee) { |
334 | |
335 QStringList list; | |
336 | |
337 list << RealTime::frame2RealTime | |
338 (e.getFrame(), getSampleRate()) | |
339 .toString().c_str() | |
340 << RealTime::frame2RealTime | |
341 (e.getFrame() + e.getDuration(), getSampleRate()) | |
342 .toString().c_str() | |
343 << QString("%1").arg(e.getValue()) | |
344 << QString("%1").arg(e.getValue() + fabsf(e.getLevel())); | |
345 | |
346 if (e.getLabel() != "") { | |
347 list << e.getLabel(); | |
348 } | |
349 | |
350 s += list.join(delimiter) + "\n"; | |
351 } | |
352 | |
353 return s; | |
334 } | 354 } |
335 | 355 |
336 protected: | 356 protected: |
337 sv_samplerate_t m_sampleRate; | 357 sv_samplerate_t m_sampleRate; |
338 int m_resolution; | 358 int m_resolution; |