changeset 838:33fca917c800

Add toDelimitedDataString alternative with frame extents
author Chris Cannam
date Wed, 09 Oct 2013 14:47:19 +0100
parents 1de00ee53be1
children 38bb7c8e415d
files data/model/DenseTimeValueModel.cpp data/model/DenseTimeValueModel.h data/model/EditableDenseThreeDimensionalModel.cpp data/model/EditableDenseThreeDimensionalModel.h data/model/Model.h data/model/SparseModel.h data/model/WaveFileModel.cpp
diffstat 7 files changed, 74 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/data/model/DenseTimeValueModel.cpp	Wed Oct 09 14:45:21 2013 +0100
+++ b/data/model/DenseTimeValueModel.cpp	Wed Oct 09 14:47:19 2013 +0100
@@ -16,6 +16,8 @@
 #include "DenseTimeValueModel.h"
 #include "base/PlayParameterRepository.h"
 
+#include <QStringList>
+
 DenseTimeValueModel::DenseTimeValueModel()
 {
     PlayParameterRepository::getInstance()->addPlayable(this);
@@ -26,3 +28,36 @@
     PlayParameterRepository::getInstance()->removePlayable(this);
 }
 	
+QString
+DenseTimeValueModel::toDelimitedDataString(QString delimiter, size_t f0, size_t f1) const
+{
+    size_t ch = getChannelCount();
+
+    std::cerr << "f0 = " << f0 << ", f1 = " << f1 << std::endl;
+
+    if (f1 <= f0) return "";
+
+    float **all = new float *[ch];
+    for (size_t c = 0; c < ch; ++c) {
+        all[c] = new float[f1 - f0];
+    }
+
+    size_t n = getData(0, ch - 1, f0, f1 - f0, all);
+
+    QStringList list;
+    for (size_t i = 0; i < n; ++i) {
+        QStringList parts;
+        parts << QString("%1").arg(f0 + i);
+        for (size_t c = 0; c < ch; ++c) {
+            parts << QString("%1").arg(all[c][i]);
+        }
+        list << parts.join(delimiter);
+    }
+
+    for (size_t c = 0; c < ch; ++c) {
+        delete[] all[c];
+    }
+    delete[] all;
+
+    return list.join("\n");
+}
--- a/data/model/DenseTimeValueModel.h	Wed Oct 09 14:45:21 2013 +0100
+++ b/data/model/DenseTimeValueModel.h	Wed Oct 09 14:47:19 2013 +0100
@@ -86,6 +86,8 @@
     virtual QString getDefaultPlayPluginId() const { return ""; }
     virtual QString getDefaultPlayPluginConfiguration() const { return ""; }
 
+    virtual QString toDelimitedDataString(QString delimiter, size_t f0, size_t f1) const;
+
     QString getTypeName() const { return tr("Dense Time-Value"); }
 };
 
--- a/data/model/EditableDenseThreeDimensionalModel.cpp	Wed Oct 09 14:45:21 2013 +0100
+++ b/data/model/EditableDenseThreeDimensionalModel.cpp	Wed Oct 09 14:47:19 2013 +0100
@@ -483,6 +483,24 @@
     return s;
 }
 
+QString
+EditableDenseThreeDimensionalModel::toDelimitedDataString(QString delimiter, size_t f0, size_t f1) const
+{
+    QReadLocker locker(&m_lock);
+    QString s;
+    for (size_t i = 0; i < m_data.size(); ++i) {
+        size_t fr = m_startFrame + i * m_resolution;
+        if (fr >= f0 && fr < f1) {
+            QStringList list;
+            for (size_t j = 0; j < m_data.at(i).size(); ++j) {
+                list << QString("%1").arg(m_data.at(i).at(j));
+            }
+            s += list.join(delimiter) + "\n";
+        }
+    }
+    return s;
+}
+
 void
 EditableDenseThreeDimensionalModel::toXml(QTextStream &out,
                                           QString indent,
--- a/data/model/EditableDenseThreeDimensionalModel.h	Wed Oct 09 14:45:21 2013 +0100
+++ b/data/model/EditableDenseThreeDimensionalModel.h	Wed Oct 09 14:47:19 2013 +0100
@@ -139,6 +139,7 @@
     QString getTypeName() const { return tr("Editable Dense 3-D"); }
 
     virtual QString toDelimitedDataString(QString delimiter) const;
+    virtual QString toDelimitedDataString(QString delimiter, size_t f0, size_t f1) const;
 
     virtual void toXml(QTextStream &out,
                        QString indent = "",
--- a/data/model/Model.h	Wed Oct 09 14:45:21 2013 +0100
+++ b/data/model/Model.h	Wed Oct 09 14:47:19 2013 +0100
@@ -213,7 +213,12 @@
                        QString indent = "",
                        QString extraAttributes = "") const;
 
-    virtual QString toDelimitedDataString(QString) const { return ""; }
+    virtual QString toDelimitedDataString(QString delimiter) const {
+        return toDelimitedDataString(delimiter, getStartFrame(), getEndFrame());
+    }
+    virtual QString toDelimitedDataString(QString, size_t f0, size_t f1) const {
+        return "";
+    }
 
 public slots:
     void aboutToDelete();
--- a/data/model/SparseModel.h	Wed Oct 09 14:45:21 2013 +0100
+++ b/data/model/SparseModel.h	Wed Oct 09 14:47:19 2013 +0100
@@ -157,6 +157,17 @@
         return s;
     }
 
+    virtual QString toDelimitedDataString(QString delimiter, size_t f0, size_t f1) const
+    { 
+        QString s;
+        for (PointListConstIterator i = m_points.begin(); i != m_points.end(); ++i) {
+            if (i->frame >= f0 && i->frame < f1) {
+                s += i->toDelimitedDataString(delimiter, m_sampleRate) + "\n";
+            }
+        }
+        return s;
+    }
+
     /**
      * Command to add a point, with undo.
      */
--- a/data/model/WaveFileModel.cpp	Wed Oct 09 14:45:21 2013 +0100
+++ b/data/model/WaveFileModel.cpp	Wed Oct 09 14:47:19 2013 +0100
@@ -463,7 +463,7 @@
             if (sample > max || got == 0) max = sample;
 	    if (sample < min || got == 0) min = sample;
             total += fabsf(sample);
-	    
+
 	    ++i;
             ++got;