diff data/model/AggregateWaveModel.cpp @ 363:0e30c8ec15a0

* Add wave file model method for reading more than one channel at once, avoiding ludicrously expensive backward seeks and double-reads when playing multi-channel files or using them as inputs to feature extraction plugins
author Chris Cannam
date Thu, 24 Jan 2008 14:35:43 +0000
parents 70a232b1f12a
children 166c22eff678
line wrap: on
line diff
--- a/data/model/AggregateWaveModel.cpp	Thu Jan 24 11:03:59 2008 +0000
+++ b/data/model/AggregateWaveModel.cpp	Thu Jan 24 14:35:43 2008 +0000
@@ -175,6 +175,21 @@
     if (mixing) delete[] readbuf;
     return sz;
 }
+
+size_t
+AggregateWaveModel::getData(size_t fromchannel, size_t tochannel,
+                            size_t start, size_t count,
+                            float **buffer) const
+{
+    size_t min = count;
+
+    for (size_t c = fromchannel; c <= tochannel; ++c) {
+        size_t here = getData(c, start, count, buffer[c - fromchannel]);
+        if (here < min) min = here;
+    }
+    
+    return min;
+}
         
 void
 AggregateWaveModel::getSummaries(size_t channel, size_t start, size_t count,