implement volume setter
authorrekado <rekado@elephly.net>
Mon, 14 Jan 2013 13:35:09 +0000 (21:35 +0800)
committerrekado <rekado@elephly.net>
Mon, 14 Jan 2013 13:41:34 +0000 (21:41 +0800)
src/mdaPiano.cpp
src/mdaPiano.h
src/mdaPianoVoice.h

index 1110c56..9912c75 100644 (file)
@@ -52,6 +52,13 @@ void mdaPiano::update() {
 }
 
 
+void mdaPiano::setVolume(float value)
+{
+  for (uint32_t v=0; v<NVOICES; ++v)
+    voices[v]->set_volume(value);
+}
+
+
 void mdaPiano::setParameter(unsigned char id, float value)
 {
   if(id>=NPARAMS)
@@ -95,7 +102,7 @@ void mdaPiano::handle_midi(uint32_t size, unsigned char* data) {
           break;
 
         case 0x07:  //volume
-          volume = 0.00002f * (float)(data[2] * data[2]);
+          setVolume(0.00002f * (float)(data[2] * data[2]));
           break;
 
         case 0x40:  //sustain pedal
index 73f1404..723041a 100644 (file)
@@ -20,6 +20,7 @@ public:
   void load_samples(short**);
 
   void handle_midi(uint32_t size, unsigned char* data);
+  void setVolume(float);
   void setParameter(unsigned char, float);
 
 
index 53d8d60..dc87719 100644 (file)
@@ -21,6 +21,7 @@ class mdaPianoVoice : public LV2::Voice {
     short *waves;
     float default_preset[NPARAMS]; // contains the default preset
     short sustain;
+    float volume;
 
     // voice state
     uint32_t  delta;  //sample playback
@@ -46,6 +47,7 @@ class mdaPianoVoice : public LV2::Voice {
 
   public:
     mdaPianoVoice(double, short*, KGRP*);
+    void set_volume(float v) { volume = v; }
 
     float p_helper(unsigned short, Param);
     void update(Param); // recalculates internal variables