diff --git a/software/o_c_REV/APP_SCALEEDITOR.ino b/software/o_c_REV/APP_SCALEEDITOR.ino index ddccca09..69177733 100644 --- a/software/o_c_REV/APP_SCALEEDITOR.ino +++ b/software/o_c_REV/APP_SCALEEDITOR.ino @@ -111,10 +111,14 @@ public: uint8_t high = V[ix++]; OC::user_scales[current_scale].notes[i] = (uint16_t)(high << 8) | low; } - } - current_note = 0; - undo_value = OC::user_scales[current_scale].notes[current_note]; + // Reset + current_note = 0; + undo_value = OC::user_scales[current_scale].notes[current_note]; + // Configure and force requantize for real-time monitoring purposes + quantizer.Configure(OC::Scales::GetScale(current_scale), 0xffff); + QuantizeCurrent(); + } } ///////////////////////////////////////////////////////////////// diff --git a/software/o_c_REV/APP_THEDARKESTTIMELINE.ino b/software/o_c_REV/APP_THEDARKESTTIMELINE.ino index 6438f9d5..aca1dcee 100644 --- a/software/o_c_REV/APP_THEDARKESTTIMELINE.ino +++ b/software/o_c_REV/APP_THEDARKESTTIMELINE.ino @@ -143,12 +143,8 @@ public: cv = get_data_at(idx, tl); // Get transpose value from CV 4 over a range of 1 octave - int transpose = 0; int transpose_cv = DetentedIn(3); - if (transpose_cv) { - transpose = Proportion(transpose_cv, HSAPPLICATION_3V, 12); - transpose = constrain(transpose, -12, 12); - } + int transpose = transpose_cv / 128; if (tl == 0) { // This is a CV Timeline, so output the normal universe note diff --git a/software/o_c_REV/HEM_Sequence5.ino b/software/o_c_REV/HEM_Sequence5.ino index a6034252..93841598 100644 --- a/software/o_c_REV/HEM_Sequence5.ino +++ b/software/o_c_REV/HEM_Sequence5.ino @@ -44,19 +44,23 @@ public: ClockOut(1); } - int transpose = Proportion(In(0), HEMISPHERE_MAX_CV / 2, 12); - transpose = constrain(transpose, -12, 12); + int transpose = 0; + if (DetentedIn(0)) { + transpose = In(0) / 128; // 128 ADC steps per semitone + } + int play_note = note[step] + 48 + transpose; + play_note = constrain(play_note, 0, 127); if (Clock(0)) StartADCLag(); if (EndOfADCLag()) { - Out(0, quantizer.Lookup(note[step] + 48 + transpose)); + Out(0, quantizer.Lookup(play_note)); Advance(step); if (step == 0) ClockOut(1); } if (play) { - Out(0, quantizer.Lookup(note[step] + 48 + transpose)); + Out(0, quantizer.Lookup(play_note)); } } diff --git a/software/o_c_REV/HSApplication.h b/software/o_c_REV/HSApplication.h index 284bf804..7cf29aad 100644 --- a/software/o_c_REV/HSApplication.h +++ b/software/o_c_REV/HSApplication.h @@ -117,7 +117,7 @@ class HSApplication { // Apply small center detent to input, so it reads zero before a threshold int DetentedIn(int ch) { - return (In(ch) > 180 || In(ch) < -180) ? In(ch) : 0; + return (In(ch) > 64 || In(ch) < -64) ? In(ch) : 0; } bool Gate(int ch) { diff --git a/software/o_c_REV/HemisphereApplet.h b/software/o_c_REV/HemisphereApplet.h index 1b2d76ef..db82f9f3 100644 --- a/software/o_c_REV/HemisphereApplet.h +++ b/software/o_c_REV/HemisphereApplet.h @@ -307,7 +307,7 @@ class HemisphereApplet { // Apply small center detent to input, so it reads zero before a threshold int DetentedIn(int ch) { - return (In(ch) > 180 || In(ch) < -180) ? In(ch) : 0; + return (In(ch) > 64 || In(ch) < -64) ? In(ch) : 0; } void Out(int ch, int value, int octave = 0) {