diff options
| -rw-r--r-- | muse/synti/organ/organ.cpp | 17 | ||||
| -rw-r--r-- | muse/synti/organ/organ.h | 3 | ||||
| -rw-r--r-- | muse/synti/organ/organgui.ui | 5 | ||||
| -rw-r--r-- | muse/synti/organ/reverb.cpp | 2 | 
4 files changed, 19 insertions, 8 deletions
| diff --git a/muse/synti/organ/organ.cpp b/muse/synti/organ/organ.cpp index d2cc5635..1f6eede4 100644 --- a/muse/synti/organ/organ.cpp +++ b/muse/synti/organ/organ.cpp @@ -109,8 +109,7 @@ Organ::Organ(int sr)        static const float v = -9.0;        static const float m = 1.0 / (NO_VOICES - 12);        for (int i = 11; i < NO_VOICES; i++) { -            float a         = float(i - 11); -            keyCompression[i] = dBToGain(u + ((v - u) * a * m)); +            keyCompression[i] = dBToGain(u + ((v - u) * float(i - 11) * m));              }        // Initialize controller table @@ -124,6 +123,7 @@ Organ::Organ(int sr)        addController("drawbar135",     DRAWBAR6,         0, 8,   0);        addController("drawbar113",     DRAWBAR7,         0, 8,   0);        addController("drawbar1",       DRAWBAR8,         0, 8,   0); +      addController("reverbOn",       REVERB_ON,        0, 1,   0);        addController("reverbRoomSize", REVERB_ROOM_SIZE, 0, 127, 60);        addController("reverbMix",      REVERB_MIX,       0, 127, 100);        addController("vibratoOn",      VIBRATO_ON,       0, 1,   1); @@ -275,13 +275,16 @@ void Organ::process(float** ports, int offset, int sampleCount)              }        for (int i = 0; i < sampleCount; ++i) {              buffer1[i] *= volume * keyCompressionValue; +              if (keyCompressionCount) {                    keyCompressionValue += keyCompressionDelta;                    --keyCompressionCount;                    }              } - -      reverb->process(buffer1, buffer2, sampleCount); +      if (reverbOn) +            reverb->process(buffer1, buffer2, sampleCount); +      else +            memcpy(buffer2, buffer1, sizeof(float) * sampleCount);        }  //--------------------------------------------------------- @@ -294,7 +297,7 @@ void Organ::changeKeyCompression()        keyCompressionCount = int(sampleRate() * .005);      // 5 msec envelope        if (keyCompressionCount < 2)              keyCompressionCount = 2; -      keyCompressionDelta = (keyCompressionValue - kc) / keyCompressionCount; +      keyCompressionDelta = (kc - keyCompressionValue) / keyCompressionCount;        }  //--------------------------------------------------------- @@ -386,6 +389,10 @@ void Organ::setController(int ctrlId, int data)                    reverb->setMix(float(data) / 127.0);                    break; +            case REVERB_ON: +                  reverbOn = data != 0; +                  break; +              case VIBRATO_ON:                    vibratoOn = data != 0;                    break; diff --git a/muse/synti/organ/organ.h b/muse/synti/organ/organ.h index 0f91826c..6a90d67a 100644 --- a/muse/synti/organ/organ.h +++ b/muse/synti/organ/organ.h @@ -29,7 +29,7 @@ static const int NO_ELEMENTS     = 194;  enum {        DRAWBAR0 = CTRL_RPN14_OFFSET, DRAWBAR1, DRAWBAR2,           DRAWBAR3, DRAWBAR4, DRAWBAR5, DRAWBAR6, DRAWBAR7, DRAWBAR8, -      REVERB_ROOM_SIZE, REVERB_MIX, +      REVERB_ON, REVERB_ROOM_SIZE, REVERB_MIX,        VIBRATO_ON, VIBRATO_FREQ, VIBRATO_DEPTH,        PERC_ON, PERC_SOFT, PERC_SLOW,        }; @@ -83,6 +83,7 @@ class Organ : public Mess2 {        OrganGui* gui;        Reverb* reverb; +      bool reverbOn;        double volume;        unsigned vibratoStep; diff --git a/muse/synti/organ/organgui.ui b/muse/synti/organ/organgui.ui index 1a0bd263..c0643106 100644 --- a/muse/synti/organ/organgui.ui +++ b/muse/synti/organ/organgui.ui @@ -107,10 +107,13 @@ background-color: gray;        </widget>       </item>       <item> -      <widget class="QGroupBox" name="groupBox" > +      <widget class="QGroupBox" name="reverbOn" >         <property name="title" >          <string>Reverb</string>         </property> +       <property name="checkable" > +        <bool>true</bool> +       </property>         <layout class="QGridLayout" >          <item row="0" column="0" >           <widget class="Awl::Knob" name="reverbRoomSize" > diff --git a/muse/synti/organ/reverb.cpp b/muse/synti/organ/reverb.cpp index 4ce94767..0ec29514 100644 --- a/muse/synti/organ/reverb.cpp +++ b/muse/synti/organ/reverb.cpp @@ -157,7 +157,7 @@ void Reverb::process(float* l, float* r, int n)  			outR = allpassR[k].process(outR);  		      }  		l[i] = outL * wet + l[i] * dry; -		r[i] = outR * wet + r[i] * dry; +		r[i] = outR * wet + l[i] * dry;  	      }        } | 
