diff audioio/AudioGenerator.h @ 275:6c6950bd7d53

Refactor to combine the two synthetic playback methods, with a single separate method to extract the basic note data from model
author Chris Cannam
date Mon, 15 Apr 2013 17:23:14 +0100
parents e81c1ea227ee
children cba1e2a3d14b
line wrap: on
line diff
--- a/audioio/AudioGenerator.h	Mon Apr 15 16:13:41 2013 +0100
+++ b/audioio/AudioGenerator.h	Mon Apr 15 17:23:14 2013 +0100
@@ -28,6 +28,7 @@
 
 #include <set>
 #include <map>
+#include <vector>
 
 class AudioGenerator : public QObject
 {
@@ -101,8 +102,26 @@
     bool m_soloing;
     std::set<Model *> m_soloModelSet;
 
+    struct NoteData {
+
+        NoteData(size_t _start, size_t _dur, int _mp, int _vel) :
+            start(_start), duration(_dur), midiPitch(_mp), frequency(0),
+            isMidiPitchQuantized(true), velocity(_vel) { };
+            
+        size_t start;     // audio sample frame
+        size_t duration;  // in audio sample frames
+        int midiPitch; // 0-127
+        int frequency; // Hz, to be used if isMidiPitchQuantized false
+        bool isMidiPitchQuantized;
+        int velocity;  // MIDI-style 0-127
+    };
+
+    typedef std::vector<NoteData> NoteList;
+    
     struct NoteOff {
 
+        NoteOff(int _p, size_t _f) : pitch(_p), frame(_f) { }
+
 	int pitch;
 	size_t frame;
 
@@ -132,13 +151,11 @@
     (DenseTimeValueModel *model, size_t startFrame, size_t frameCount,
      float **buffer, float gain, float pan, size_t fadeIn, size_t fadeOut);
 
-    virtual size_t mixSparseOneDimensionalModel
-    (SparseOneDimensionalModel *model, size_t startFrame, size_t frameCount,
+    virtual size_t mixSyntheticNoteModel
+    (Model *model, size_t startFrame, size_t frameCount,
      float **buffer, float gain, float pan, size_t fadeIn, size_t fadeOut);
-
-    virtual size_t mixNoteModel
-    (NoteModel *model, size_t startFrame, size_t frameCount,
-     float **buffer, float gain, float pan, size_t fadeIn, size_t fadeOut);
+    
+    NoteList getNotes(Model *model, size_t startFrame, size_t endFrame);
 
     static const size_t m_pluginBlockSize;
 };