move `update` to voices and call from synth
authorrekado <rekado@elephly.net>
Mon, 14 Jan 2013 13:09:45 +0000 (21:09 +0800)
committerrekado <rekado@elephly.net>
Mon, 14 Jan 2013 13:09:45 +0000 (21:09 +0800)
src/mdaPiano.cpp
src/mdaPianoVoice.cpp
src/mdaPianoVoice.h

index d3286c3ab6297a20b2fd3fe118e9fef3449dbe55..17298edbb6537ff6bb4b06817abd8d7cc53da390 100644 (file)
@@ -43,26 +43,11 @@ mdaPiano::mdaPiano(double rate)
   update();
 }
 
-
-void mdaPiano::update()  //parameter change
-{
-  float * param = programs[curProgram].param;
-  size = (uint32_t)(12.0f * param[2] - 6.0f);
-  sizevel = 0.12f * param[3];
-  muffvel = param[5] * param[5] * 5.0f;
-
-  velsens = 1.0f + param[6] + param[6];
-  if(param[6] < 0.25f) velsens -= 0.75f - 3.0f * param[6];
-
-  fine = param[9] - 0.5f;
-  random = 0.077f * param[10] * param[10];
-  stretch = 0.000434f * (param[11] - 0.5f);
-
-  cdep = param[7] * param[7];
-  trim = 1.50f - 0.79f * cdep;
-  width = 0.04f * param[7];  if(width > 0.03f) width = 0.03f;
-
-  poly = 8 + (uint32_t)(24.9f * param[8]);
+//parameter change
+void mdaPiano::update() {
+  for (uint32_t v=0; v<NVOICES; ++v) {
+    voices[v]->update(Current);
+  }
 }
 
 
index a1f9529d520fee73d7a27e8d964d04670b2a31ce..4c88e8fe944a10700232528f41042c086475e989 100644 (file)
@@ -205,3 +205,26 @@ if(!(r > -2.0f) || !(r < 2.0f))
   for(v=0; v<activevoices; v++) if(voice[v].env < SILENCE) voice[v] = voice[--activevoices];
   notes[0] = EVENTS_DONE;  //mark events buffer as done
 }
+
+
+void mdaPianoVoice::update(Param par)
+{
+  //TODO: use local copy
+  float * param = programs[curProgram].param;
+  size = (uint32_t)(12.0f * param[2] - 6.0f);
+  sizevel = 0.12f * param[3];
+  muffvel = param[5] * param[5] * 5.0f;
+
+  velsens = 1.0f + param[6] + param[6];
+  if(param[6] < 0.25f) velsens -= 0.75f - 3.0f * param[6];
+
+  fine = param[9] - 0.5f;
+  random = 0.077f * param[10] * param[10];
+  stretch = 0.000434f * (param[11] - 0.5f);
+
+  cdep = param[7] * param[7];
+  trim = 1.50f - 0.79f * cdep;
+  width = 0.04f * param[7];  if(width > 0.03f) width = 0.03f;
+
+  poly = 8 + (uint32_t)(24.9f * param[8]);
+}
index b7958d4891d25b7b06bed8cad2a4b0013557382b..c7b2e43663e2dd04ec3edbe750d7f7c25b47e183 100644 (file)
@@ -46,6 +46,7 @@ class mdaPianoVoice : public LV2::Voice {
     mdaPianoVoice(double, short*, KGRP*);
 
     float p_helper(unsigned short, Param);
+    void update(Param); // recalculates internal variables
     void reset(void);
 };