fix onlyWhite
authorEugene Petkevich <nasedil.genio.code@gmail.com>
Mon, 19 Dec 2022 01:30:43 +0000 (02:30 +0100)
committerEugene Petkevich <nasedil.genio.code@gmail.com>
Mon, 19 Dec 2022 01:31:10 +0000 (02:31 +0100)
extensions/classes/midisynths.sc

index 1aa0783..f607ab0 100644 (file)
@@ -214,41 +214,45 @@ KeySynthMono : KeySynth {
     };
 
     midihandler.key_{|d, v, n|
-      if (onlyWhite) {
-        n = 60 + this.distanceWhite(60, n);
-      };
-      if (d) {
-        var newFreq = this.midiKeyToFreq(n);
-        var newParams = params.value.asPairs++[
-          \gate, 1,
-          \freq, newFreq,
-          \amp, amp * v,
-        ]++this.makePanParam(n);
-        midinote = n;
-        if (note.notNil) {
-          if (poly) {
-            note.set(*newParams);
-          } {
-            note.set(\gate, 0);
-          };
-        };
-        if (poly.not) {
-          note = Synth(synthName, newParams, group);
+      if (this.isWhiteKey(n) || onlyWhite.not) {
+        if (onlyWhite) {
+          n = 60 + this.distanceWhite(60, n);
         };
-      } {
-        if (n == midinote) {
-          note.set(\gate, 0);
+        if (d) {
+          var newFreq = this.midiKeyToFreq(n);
+          var newParams = params.value.asPairs++[
+            \gate, 1,
+            \freq, newFreq,
+            \amp, amp * v,
+          ]++this.makePanParam(n);
+          midinote = n;
+          if (note.notNil) {
+            if (poly) {
+              note.set(*newParams);
+            } {
+              note.set(\gate, 0);
+            };
+          };
           if (poly.not) {
-            note = nil;
+            note = Synth(synthName, newParams, group);
+          };
+        } {
+          if (n == midinote) {
+            note.set(\gate, 0);
+            if (poly.not) {
+              note = nil;
+            };
           };
         };
+      } {
+        // black keys in onlyWhite mode
       };
     };
 
     midihandler.bend_{|v|
       bend = v * bendRadius;
       if (note.notNil) {
-        note.set(\freq, (midinote+bend).midicps);
+        note.set(\freq, this.midiKeyToFreq(midinote));
       };
     };
   }