From 96cab02d94845ee47f69b87c18c4988a930ba521 Mon Sep 17 00:00:00 2001
From: Bent Bisballe Nyeng <deva@aasimon.org>
Date: Sun, 21 Apr 2013 22:13:40 +0200
Subject: Fixed accumulating events in the acitve events queue.

---
 src/drumgizmo.cc | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

(limited to 'src')

diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc
index c6259d4..a16a4e2 100644
--- a/src/drumgizmo.cc
+++ b/src/drumgizmo.cc
@@ -279,7 +279,8 @@ bool DrumGizmo::run(size_t pos, sample_t *samples, size_t nsamples)
         ERR(drumgizmo, "Missing Instrument %d.\n", evs[e].instrument);
         continue;
       }
-      
+
+#if 1
       if(i->group() != "") {
         // Add event to ramp down all existing events with the same groupname.
         Channels::iterator j = kit.channels.begin();
@@ -291,7 +292,7 @@ bool DrumGizmo::run(size_t pos, sample_t *samples, size_t nsamples)
             if(ev->type() == Event::sample) {
               EventSample *sev = (EventSample*)ev;
               if(sev->group == i->group() && sev->instrument != i) {
-                sev->rampdown = 3000; // Ramp down 3000 samples
+                sev->rampdown = 10000; // Ramp down 10000 samples
                 // TODO: This must be configurable at some point...
                 // ... perhaps even by instrument (ie. in the xml file)
                 sev->ramp_start = sev->rampdown;
@@ -302,7 +303,8 @@ bool DrumGizmo::run(size_t pos, sample_t *samples, size_t nsamples)
           j++;
         }
       }
-        
+#endif   
+
       Sample *s = i->sample(evs[e].velocity, evs[e].offset + pos);
       
       if(s == NULL) {
@@ -383,9 +385,8 @@ typedef float vNsf __attribute__ ((vector_size(sizeof(float)*N)));
 
 void DrumGizmo::getSamples(int ch, int pos, sample_t *s, size_t sz)
 {
-  for(std::list< Event* >::iterator i = activeevents[ch].begin();
-      i != activeevents[ch].end();
-      i++) {
+  std::list< Event* >::iterator i = activeevents[ch].begin();
+  while(i != activeevents[ch].end()) {
     bool removeevent = false;
 
     Event *event = *i;
@@ -437,8 +438,9 @@ void DrumGizmo::getSamples(int ch, int pos, sample_t *s, size_t sz)
     if(removeevent) {
       delete event;
       i = activeevents[ch].erase(i);
+      continue;
     }
-
+    i++;
   }
 }
 
-- 
cgit v1.2.3