OSCtoCV Library
OSCtoCV_Sequencer.cpp@0:cd43a974c54c, 2016-01-17 (annotated)
- Committer:
- casiotone401
- Date:
- Sun Jan 17 09:30:32 2016 +0000
- Revision:
- 0:cd43a974c54c
- Child:
- 1:981b62bb5c87
added random, lfo mode
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
casiotone401 | 0:cd43a974c54c | 1 | /* |
casiotone401 | 0:cd43a974c54c | 2 | OSCtoCV_Sequencer.cpp |
casiotone401 | 0:cd43a974c54c | 3 | */ |
casiotone401 | 0:cd43a974c54c | 4 | |
casiotone401 | 0:cd43a974c54c | 5 | #include "mbed.h" |
casiotone401 | 0:cd43a974c54c | 6 | #include "OSCtoCV_Sequencer.h" |
casiotone401 | 0:cd43a974c54c | 7 | #include "OSCtoCV.h" |
casiotone401 | 0:cd43a974c54c | 8 | |
casiotone401 | 0:cd43a974c54c | 9 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 10 | // Sequence & Shift Out CV |
casiotone401 | 0:cd43a974c54c | 11 | |
casiotone401 | 0:cd43a974c54c | 12 | void ShiftCVSeq(int trigger, bool reset) |
casiotone401 | 0:cd43a974c54c | 13 | { |
casiotone401 | 0:cd43a974c54c | 14 | int i, j; |
casiotone401 | 0:cd43a974c54c | 15 | static bool triggerState = false; |
casiotone401 | 0:cd43a974c54c | 16 | static bool stepFoward = false; |
casiotone401 | 0:cd43a974c54c | 17 | static bool _reset = false; |
casiotone401 | 0:cd43a974c54c | 18 | static uint8_t currentStep; |
casiotone401 | 0:cd43a974c54c | 19 | static int _resetCount, resetCount; |
casiotone401 | 0:cd43a974c54c | 20 | static uint8_t gateMode; |
casiotone401 | 0:cd43a974c54c | 21 | static uint8_t _gateMode[16]; |
casiotone401 | 0:cd43a974c54c | 22 | static uint8_t ch, qmode, amode; |
casiotone401 | 0:cd43a974c54c | 23 | static float glidecv[8], shiftcv[8]; |
casiotone401 | 0:cd43a974c54c | 24 | unsigned int cv; |
casiotone401 | 0:cd43a974c54c | 25 | static float qcv; |
casiotone401 | 0:cd43a974c54c | 26 | static int jitterCount; |
casiotone401 | 0:cd43a974c54c | 27 | static int jitter; |
casiotone401 | 0:cd43a974c54c | 28 | |
casiotone401 | 0:cd43a974c54c | 29 | qmode = (gCtrl[1] * (SCALE_NUM - 1.0f)); // Sequencer Quantize Mode (gCtrl[1]) |
casiotone401 | 0:cd43a974c54c | 30 | amode = SCALE_AOUT * qmode; |
casiotone401 | 0:cd43a974c54c | 31 | |
casiotone401 | 0:cd43a974c54c | 32 | gAOUT.write_u16(amode); |
casiotone401 | 0:cd43a974c54c | 33 | |
casiotone401 | 0:cd43a974c54c | 34 | switch (qmode) |
casiotone401 | 0:cd43a974c54c | 35 | { |
casiotone401 | 0:cd43a974c54c | 36 | case Lin: |
casiotone401 | 0:cd43a974c54c | 37 | |
casiotone401 | 0:cd43a974c54c | 38 | glidecv[0] = glidecv[0] * gSlide[currentStep] + gSeq_cv[currentStep] * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 39 | |
casiotone401 | 0:cd43a974c54c | 40 | break; |
casiotone401 | 0:cd43a974c54c | 41 | |
casiotone401 | 0:cd43a974c54c | 42 | case Chr: |
casiotone401 | 0:cd43a974c54c | 43 | |
casiotone401 | 0:cd43a974c54c | 44 | qcv = calibMap1[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES1 - 1))]; |
casiotone401 | 0:cd43a974c54c | 45 | |
casiotone401 | 0:cd43a974c54c | 46 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 47 | |
casiotone401 | 0:cd43a974c54c | 48 | break; |
casiotone401 | 0:cd43a974c54c | 49 | |
casiotone401 | 0:cd43a974c54c | 50 | case Maj: |
casiotone401 | 0:cd43a974c54c | 51 | |
casiotone401 | 0:cd43a974c54c | 52 | qcv = calibMap2[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES2 - 1))]; |
casiotone401 | 0:cd43a974c54c | 53 | |
casiotone401 | 0:cd43a974c54c | 54 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 55 | |
casiotone401 | 0:cd43a974c54c | 56 | break; |
casiotone401 | 0:cd43a974c54c | 57 | |
casiotone401 | 0:cd43a974c54c | 58 | case M7: |
casiotone401 | 0:cd43a974c54c | 59 | |
casiotone401 | 0:cd43a974c54c | 60 | qcv = calibMap3[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES3 - 1))]; |
casiotone401 | 0:cd43a974c54c | 61 | |
casiotone401 | 0:cd43a974c54c | 62 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 63 | |
casiotone401 | 0:cd43a974c54c | 64 | break; |
casiotone401 | 0:cd43a974c54c | 65 | |
casiotone401 | 0:cd43a974c54c | 66 | case Min7: |
casiotone401 | 0:cd43a974c54c | 67 | |
casiotone401 | 0:cd43a974c54c | 68 | qcv = calibMap4[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES4 - 1))]; |
casiotone401 | 0:cd43a974c54c | 69 | |
casiotone401 | 0:cd43a974c54c | 70 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 71 | |
casiotone401 | 0:cd43a974c54c | 72 | break; |
casiotone401 | 0:cd43a974c54c | 73 | |
casiotone401 | 0:cd43a974c54c | 74 | case Dor: |
casiotone401 | 0:cd43a974c54c | 75 | |
casiotone401 | 0:cd43a974c54c | 76 | qcv = calibMap5[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES5 - 1))]; |
casiotone401 | 0:cd43a974c54c | 77 | |
casiotone401 | 0:cd43a974c54c | 78 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 79 | |
casiotone401 | 0:cd43a974c54c | 80 | break; |
casiotone401 | 0:cd43a974c54c | 81 | |
casiotone401 | 0:cd43a974c54c | 82 | case Min: |
casiotone401 | 0:cd43a974c54c | 83 | |
casiotone401 | 0:cd43a974c54c | 84 | qcv = calibMap6[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES6 - 1))]; |
casiotone401 | 0:cd43a974c54c | 85 | |
casiotone401 | 0:cd43a974c54c | 86 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 87 | |
casiotone401 | 0:cd43a974c54c | 88 | break; |
casiotone401 | 0:cd43a974c54c | 89 | |
casiotone401 | 0:cd43a974c54c | 90 | case S5th: |
casiotone401 | 0:cd43a974c54c | 91 | |
casiotone401 | 0:cd43a974c54c | 92 | qcv = calibMap7[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES7 - 1))]; |
casiotone401 | 0:cd43a974c54c | 93 | |
casiotone401 | 0:cd43a974c54c | 94 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 95 | |
casiotone401 | 0:cd43a974c54c | 96 | break; |
casiotone401 | 0:cd43a974c54c | 97 | |
casiotone401 | 0:cd43a974c54c | 98 | case Wht: |
casiotone401 | 0:cd43a974c54c | 99 | |
casiotone401 | 0:cd43a974c54c | 100 | qcv = calibMap8[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES8 - 1))]; |
casiotone401 | 0:cd43a974c54c | 101 | |
casiotone401 | 0:cd43a974c54c | 102 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 103 | |
casiotone401 | 0:cd43a974c54c | 104 | break; |
casiotone401 | 0:cd43a974c54c | 105 | } |
casiotone401 | 0:cd43a974c54c | 106 | |
casiotone401 | 0:cd43a974c54c | 107 | if (!gCtrlSW[4]) |
casiotone401 | 0:cd43a974c54c | 108 | { |
casiotone401 | 0:cd43a974c54c | 109 | jitter = 0; |
casiotone401 | 0:cd43a974c54c | 110 | |
casiotone401 | 0:cd43a974c54c | 111 | } else if (gCtrlSW[4] && jitterCount % 64 == 0) { // ASR Analog Mode |
casiotone401 | 0:cd43a974c54c | 112 | |
casiotone401 | 0:cd43a974c54c | 113 | jitter = (rand() % 100 - 50); |
casiotone401 | 0:cd43a974c54c | 114 | } |
casiotone401 | 0:cd43a974c54c | 115 | |
casiotone401 | 0:cd43a974c54c | 116 | cv = (unsigned int)(glidecv[0] + jitter); |
casiotone401 | 0:cd43a974c54c | 117 | |
casiotone401 | 0:cd43a974c54c | 118 | UpdateCV(WRITE_UPDATE_N, 0, &cv); |
casiotone401 | 0:cd43a974c54c | 119 | |
casiotone401 | 0:cd43a974c54c | 120 | for (i = 1; i < 8; ++i) |
casiotone401 | 0:cd43a974c54c | 121 | { |
casiotone401 | 0:cd43a974c54c | 122 | glidecv[i] = glidecv[i] * gSlide[currentStep] + shiftcv[i] * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 123 | cv = (unsigned int)(glidecv[i] + jitter); |
casiotone401 | 0:cd43a974c54c | 124 | |
casiotone401 | 0:cd43a974c54c | 125 | UpdateCV(WRITE_UPDATE_N, i, &cv); |
casiotone401 | 0:cd43a974c54c | 126 | } |
casiotone401 | 0:cd43a974c54c | 127 | |
casiotone401 | 0:cd43a974c54c | 128 | if (trigger && !triggerState) // trigger ON |
casiotone401 | 0:cd43a974c54c | 129 | { |
casiotone401 | 0:cd43a974c54c | 130 | stepFoward = triggerState = true; |
casiotone401 | 0:cd43a974c54c | 131 | |
casiotone401 | 0:cd43a974c54c | 132 | } else if (!trigger) { // trigger OFF |
casiotone401 | 0:cd43a974c54c | 133 | |
casiotone401 | 0:cd43a974c54c | 134 | if (gateMode != HOLD) |
casiotone401 | 0:cd43a974c54c | 135 | { |
casiotone401 | 0:cd43a974c54c | 136 | gGATES[0] = false; |
casiotone401 | 0:cd43a974c54c | 137 | } |
casiotone401 | 0:cd43a974c54c | 138 | |
casiotone401 | 0:cd43a974c54c | 139 | triggerState = false; |
casiotone401 | 0:cd43a974c54c | 140 | } |
casiotone401 | 0:cd43a974c54c | 141 | |
casiotone401 | 0:cd43a974c54c | 142 | // check & update touchOSC ctrl parameter |
casiotone401 | 0:cd43a974c54c | 143 | if (_gateMode[ch] != (gGateMode[ch] * 3)) |
casiotone401 | 0:cd43a974c54c | 144 | { |
casiotone401 | 0:cd43a974c54c | 145 | _gateMode[ch] = (gGateMode[ch] * 3); |
casiotone401 | 0:cd43a974c54c | 146 | |
casiotone401 | 0:cd43a974c54c | 147 | if (_gateMode[ch] == MULTI) |
casiotone401 | 0:cd43a974c54c | 148 | { |
casiotone401 | 0:cd43a974c54c | 149 | _gateMode[ch] = HOLD; |
casiotone401 | 0:cd43a974c54c | 150 | } |
casiotone401 | 0:cd43a974c54c | 151 | |
casiotone401 | 0:cd43a974c54c | 152 | SendCtrlState(ch, _gateMode[ch], 8); |
casiotone401 | 0:cd43a974c54c | 153 | } |
casiotone401 | 0:cd43a974c54c | 154 | |
casiotone401 | 0:cd43a974c54c | 155 | if (reset && !_reset) // Stop & Reset |
casiotone401 | 0:cd43a974c54c | 156 | { |
casiotone401 | 0:cd43a974c54c | 157 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false)); |
casiotone401 | 0:cd43a974c54c | 158 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 159 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 160 | |
casiotone401 | 0:cd43a974c54c | 161 | currentStep = 0; |
casiotone401 | 0:cd43a974c54c | 162 | |
casiotone401 | 0:cd43a974c54c | 163 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false)); |
casiotone401 | 0:cd43a974c54c | 164 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 165 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 166 | |
casiotone401 | 0:cd43a974c54c | 167 | _reset = true; |
casiotone401 | 0:cd43a974c54c | 168 | |
casiotone401 | 0:cd43a974c54c | 169 | } else if (!reset) { |
casiotone401 | 0:cd43a974c54c | 170 | |
casiotone401 | 0:cd43a974c54c | 171 | _reset = false; |
casiotone401 | 0:cd43a974c54c | 172 | } |
casiotone401 | 0:cd43a974c54c | 173 | |
casiotone401 | 0:cd43a974c54c | 174 | if (stepFoward) |
casiotone401 | 0:cd43a974c54c | 175 | { |
casiotone401 | 0:cd43a974c54c | 176 | if (gateMode != HOLD) // shift CV |
casiotone401 | 0:cd43a974c54c | 177 | { |
casiotone401 | 0:cd43a974c54c | 178 | for (j = 1; j < 8; ++j) |
casiotone401 | 0:cd43a974c54c | 179 | { |
casiotone401 | 0:cd43a974c54c | 180 | shiftcv[j] = glidecv[j-1]; |
casiotone401 | 0:cd43a974c54c | 181 | } |
casiotone401 | 0:cd43a974c54c | 182 | } |
casiotone401 | 0:cd43a974c54c | 183 | |
casiotone401 | 0:cd43a974c54c | 184 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false)); |
casiotone401 | 0:cd43a974c54c | 185 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 186 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 187 | |
casiotone401 | 0:cd43a974c54c | 188 | ++currentStep; |
casiotone401 | 0:cd43a974c54c | 189 | |
casiotone401 | 0:cd43a974c54c | 190 | if (gCtrlSW[2]) |
casiotone401 | 0:cd43a974c54c | 191 | { |
casiotone401 | 0:cd43a974c54c | 192 | resetCount = 3; |
casiotone401 | 0:cd43a974c54c | 193 | |
casiotone401 | 0:cd43a974c54c | 194 | } else { |
casiotone401 | 0:cd43a974c54c | 195 | |
casiotone401 | 0:cd43a974c54c | 196 | resetCount = gCtrl[4] * 15; |
casiotone401 | 0:cd43a974c54c | 197 | } |
casiotone401 | 0:cd43a974c54c | 198 | |
casiotone401 | 0:cd43a974c54c | 199 | if (_resetCount != resetCount) |
casiotone401 | 0:cd43a974c54c | 200 | { |
casiotone401 | 0:cd43a974c54c | 201 | sendMes.setTopAddress(RESET_COUNTER_ADDRESS); |
casiotone401 | 0:cd43a974c54c | 202 | sendMes.setArgs("i", (resetCount + 1)); |
casiotone401 | 0:cd43a974c54c | 203 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 204 | } |
casiotone401 | 0:cd43a974c54c | 205 | |
casiotone401 | 0:cd43a974c54c | 206 | if (currentStep > resetCount) // reset |
casiotone401 | 0:cd43a974c54c | 207 | { |
casiotone401 | 0:cd43a974c54c | 208 | currentStep = 0; |
casiotone401 | 0:cd43a974c54c | 209 | } |
casiotone401 | 0:cd43a974c54c | 210 | |
casiotone401 | 0:cd43a974c54c | 211 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false)); |
casiotone401 | 0:cd43a974c54c | 212 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 213 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 214 | |
casiotone401 | 0:cd43a974c54c | 215 | if (currentStep < 8) |
casiotone401 | 0:cd43a974c54c | 216 | { |
casiotone401 | 0:cd43a974c54c | 217 | UpdateCVMeter(currentStep, &cv); |
casiotone401 | 0:cd43a974c54c | 218 | |
casiotone401 | 0:cd43a974c54c | 219 | } else { |
casiotone401 | 0:cd43a974c54c | 220 | |
casiotone401 | 0:cd43a974c54c | 221 | UpdateCVMeter((currentStep - 8), &cv); |
casiotone401 | 0:cd43a974c54c | 222 | } |
casiotone401 | 0:cd43a974c54c | 223 | |
casiotone401 | 0:cd43a974c54c | 224 | gateMode = (gGateMode[currentStep] * 3); |
casiotone401 | 0:cd43a974c54c | 225 | |
casiotone401 | 0:cd43a974c54c | 226 | if (gateMode == MULTI) // omit MULTI mode |
casiotone401 | 0:cd43a974c54c | 227 | { |
casiotone401 | 0:cd43a974c54c | 228 | gateMode = HOLD; |
casiotone401 | 0:cd43a974c54c | 229 | } |
casiotone401 | 0:cd43a974c54c | 230 | |
casiotone401 | 0:cd43a974c54c | 231 | if (gateMode != MUTE) |
casiotone401 | 0:cd43a974c54c | 232 | { |
casiotone401 | 0:cd43a974c54c | 233 | gGATES[0] = true; |
casiotone401 | 0:cd43a974c54c | 234 | } |
casiotone401 | 0:cd43a974c54c | 235 | |
casiotone401 | 0:cd43a974c54c | 236 | if (gAccent[currentStep]) // accent |
casiotone401 | 0:cd43a974c54c | 237 | { |
casiotone401 | 0:cd43a974c54c | 238 | gGATES[2] = gGATES[3] = true; |
casiotone401 | 0:cd43a974c54c | 239 | |
casiotone401 | 0:cd43a974c54c | 240 | } else { |
casiotone401 | 0:cd43a974c54c | 241 | |
casiotone401 | 0:cd43a974c54c | 242 | gGATES[2] = gGATES[3] = false; |
casiotone401 | 0:cd43a974c54c | 243 | } |
casiotone401 | 0:cd43a974c54c | 244 | |
casiotone401 | 0:cd43a974c54c | 245 | stepFoward = false; |
casiotone401 | 0:cd43a974c54c | 246 | } |
casiotone401 | 0:cd43a974c54c | 247 | |
casiotone401 | 0:cd43a974c54c | 248 | ++ch; |
casiotone401 | 0:cd43a974c54c | 249 | ch &= 0x0F; |
casiotone401 | 0:cd43a974c54c | 250 | |
casiotone401 | 0:cd43a974c54c | 251 | ++jitterCount; |
casiotone401 | 0:cd43a974c54c | 252 | jitterCount &= 0x1FF; |
casiotone401 | 0:cd43a974c54c | 253 | } |
casiotone401 | 0:cd43a974c54c | 254 | |
casiotone401 | 0:cd43a974c54c | 255 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 256 | // M185 Sequencer |
casiotone401 | 0:cd43a974c54c | 257 | |
casiotone401 | 0:cd43a974c54c | 258 | void M185Seq(int trigger, bool reset) |
casiotone401 | 0:cd43a974c54c | 259 | { |
casiotone401 | 0:cd43a974c54c | 260 | int i, j; |
casiotone401 | 0:cd43a974c54c | 261 | static bool triggerState = false; |
casiotone401 | 0:cd43a974c54c | 262 | static bool stepFoward = false; |
casiotone401 | 0:cd43a974c54c | 263 | static bool _reset = false; |
casiotone401 | 0:cd43a974c54c | 264 | static uint8_t currentStep; |
casiotone401 | 0:cd43a974c54c | 265 | static int stepCount; |
casiotone401 | 0:cd43a974c54c | 266 | static int _resetCount, resetCount; |
casiotone401 | 0:cd43a974c54c | 267 | static uint8_t gateMode; |
casiotone401 | 0:cd43a974c54c | 268 | static uint8_t _gateMode[8]; |
casiotone401 | 0:cd43a974c54c | 269 | static uint8_t _pulseCount[8]; |
casiotone401 | 0:cd43a974c54c | 270 | static uint8_t ch, qmode, amode; |
casiotone401 | 0:cd43a974c54c | 271 | static float glidecv[8], shiftcv[8]; |
casiotone401 | 0:cd43a974c54c | 272 | unsigned int cv; |
casiotone401 | 0:cd43a974c54c | 273 | static float qcv; |
casiotone401 | 0:cd43a974c54c | 274 | |
casiotone401 | 0:cd43a974c54c | 275 | qmode = (gCtrl[1] * (SCALE_NUM - 1)); // Sequencer Quantize Mode (gCtrl[1]) |
casiotone401 | 0:cd43a974c54c | 276 | amode = SCALE_AOUT * qmode; |
casiotone401 | 0:cd43a974c54c | 277 | |
casiotone401 | 0:cd43a974c54c | 278 | gAOUT.write_u16(amode); |
casiotone401 | 0:cd43a974c54c | 279 | |
casiotone401 | 0:cd43a974c54c | 280 | switch (qmode) |
casiotone401 | 0:cd43a974c54c | 281 | { |
casiotone401 | 0:cd43a974c54c | 282 | case Lin: |
casiotone401 | 0:cd43a974c54c | 283 | |
casiotone401 | 0:cd43a974c54c | 284 | glidecv[0] = glidecv[0] * gSlide[currentStep] + gSeq_cv[currentStep] * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 285 | |
casiotone401 | 0:cd43a974c54c | 286 | break; |
casiotone401 | 0:cd43a974c54c | 287 | |
casiotone401 | 0:cd43a974c54c | 288 | case Chr: |
casiotone401 | 0:cd43a974c54c | 289 | |
casiotone401 | 0:cd43a974c54c | 290 | qcv = calibMap1[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES1 - 1))]; |
casiotone401 | 0:cd43a974c54c | 291 | |
casiotone401 | 0:cd43a974c54c | 292 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 293 | |
casiotone401 | 0:cd43a974c54c | 294 | break; |
casiotone401 | 0:cd43a974c54c | 295 | |
casiotone401 | 0:cd43a974c54c | 296 | case Maj: |
casiotone401 | 0:cd43a974c54c | 297 | |
casiotone401 | 0:cd43a974c54c | 298 | qcv = calibMap2[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES2 - 1))]; |
casiotone401 | 0:cd43a974c54c | 299 | |
casiotone401 | 0:cd43a974c54c | 300 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 301 | |
casiotone401 | 0:cd43a974c54c | 302 | break; |
casiotone401 | 0:cd43a974c54c | 303 | |
casiotone401 | 0:cd43a974c54c | 304 | case M7: |
casiotone401 | 0:cd43a974c54c | 305 | |
casiotone401 | 0:cd43a974c54c | 306 | qcv = calibMap3[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES3 - 1))]; |
casiotone401 | 0:cd43a974c54c | 307 | |
casiotone401 | 0:cd43a974c54c | 308 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 309 | |
casiotone401 | 0:cd43a974c54c | 310 | break; |
casiotone401 | 0:cd43a974c54c | 311 | |
casiotone401 | 0:cd43a974c54c | 312 | case Min7: |
casiotone401 | 0:cd43a974c54c | 313 | |
casiotone401 | 0:cd43a974c54c | 314 | qcv = calibMap4[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES4 - 1))]; |
casiotone401 | 0:cd43a974c54c | 315 | |
casiotone401 | 0:cd43a974c54c | 316 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 317 | |
casiotone401 | 0:cd43a974c54c | 318 | break; |
casiotone401 | 0:cd43a974c54c | 319 | |
casiotone401 | 0:cd43a974c54c | 320 | case Dor: |
casiotone401 | 0:cd43a974c54c | 321 | |
casiotone401 | 0:cd43a974c54c | 322 | qcv = calibMap5[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES5 - 1))]; |
casiotone401 | 0:cd43a974c54c | 323 | |
casiotone401 | 0:cd43a974c54c | 324 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 325 | |
casiotone401 | 0:cd43a974c54c | 326 | break; |
casiotone401 | 0:cd43a974c54c | 327 | |
casiotone401 | 0:cd43a974c54c | 328 | case Min: |
casiotone401 | 0:cd43a974c54c | 329 | |
casiotone401 | 0:cd43a974c54c | 330 | qcv = calibMap6[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES6 - 1))]; |
casiotone401 | 0:cd43a974c54c | 331 | |
casiotone401 | 0:cd43a974c54c | 332 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 333 | |
casiotone401 | 0:cd43a974c54c | 334 | break; |
casiotone401 | 0:cd43a974c54c | 335 | |
casiotone401 | 0:cd43a974c54c | 336 | case S5th: |
casiotone401 | 0:cd43a974c54c | 337 | |
casiotone401 | 0:cd43a974c54c | 338 | qcv = calibMap7[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES7 - 1))]; |
casiotone401 | 0:cd43a974c54c | 339 | |
casiotone401 | 0:cd43a974c54c | 340 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 341 | |
casiotone401 | 0:cd43a974c54c | 342 | break; |
casiotone401 | 0:cd43a974c54c | 343 | |
casiotone401 | 0:cd43a974c54c | 344 | case Wht: |
casiotone401 | 0:cd43a974c54c | 345 | |
casiotone401 | 0:cd43a974c54c | 346 | qcv = calibMap8[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES8 - 1))]; |
casiotone401 | 0:cd43a974c54c | 347 | |
casiotone401 | 0:cd43a974c54c | 348 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 349 | |
casiotone401 | 0:cd43a974c54c | 350 | break; |
casiotone401 | 0:cd43a974c54c | 351 | } |
casiotone401 | 0:cd43a974c54c | 352 | |
casiotone401 | 0:cd43a974c54c | 353 | cv = (unsigned int)glidecv[0]; |
casiotone401 | 0:cd43a974c54c | 354 | |
casiotone401 | 0:cd43a974c54c | 355 | UpdateCV(WRITE_UPDATE_N, 0, &cv); |
casiotone401 | 0:cd43a974c54c | 356 | |
casiotone401 | 0:cd43a974c54c | 357 | for (i = 1; i < 8; ++i) |
casiotone401 | 0:cd43a974c54c | 358 | { |
casiotone401 | 0:cd43a974c54c | 359 | glidecv[i] = glidecv[i] * gSlide[currentStep] + shiftcv[i] * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 360 | cv = (unsigned int)glidecv[i]; |
casiotone401 | 0:cd43a974c54c | 361 | |
casiotone401 | 0:cd43a974c54c | 362 | UpdateCV(WRITE_UPDATE_N, i, &cv); |
casiotone401 | 0:cd43a974c54c | 363 | } |
casiotone401 | 0:cd43a974c54c | 364 | |
casiotone401 | 0:cd43a974c54c | 365 | if (trigger && !triggerState) // trigger ON |
casiotone401 | 0:cd43a974c54c | 366 | { |
casiotone401 | 0:cd43a974c54c | 367 | if (gateMode == MULTI) |
casiotone401 | 0:cd43a974c54c | 368 | { |
casiotone401 | 0:cd43a974c54c | 369 | gGATES[0] = true; |
casiotone401 | 0:cd43a974c54c | 370 | |
casiotone401 | 0:cd43a974c54c | 371 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false)); |
casiotone401 | 0:cd43a974c54c | 372 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 373 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 374 | } |
casiotone401 | 0:cd43a974c54c | 375 | |
casiotone401 | 0:cd43a974c54c | 376 | stepFoward = triggerState = true; |
casiotone401 | 0:cd43a974c54c | 377 | |
casiotone401 | 0:cd43a974c54c | 378 | } else if (!trigger) { // trigger OFF |
casiotone401 | 0:cd43a974c54c | 379 | |
casiotone401 | 0:cd43a974c54c | 380 | if (gateMode != HOLD) |
casiotone401 | 0:cd43a974c54c | 381 | { |
casiotone401 | 0:cd43a974c54c | 382 | gGATES[0] = false; |
casiotone401 | 0:cd43a974c54c | 383 | } |
casiotone401 | 0:cd43a974c54c | 384 | |
casiotone401 | 0:cd43a974c54c | 385 | if (gateMode == MULTI) |
casiotone401 | 0:cd43a974c54c | 386 | { |
casiotone401 | 0:cd43a974c54c | 387 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false)); |
casiotone401 | 0:cd43a974c54c | 388 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 389 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 390 | } |
casiotone401 | 0:cd43a974c54c | 391 | |
casiotone401 | 0:cd43a974c54c | 392 | triggerState = false; |
casiotone401 | 0:cd43a974c54c | 393 | } |
casiotone401 | 0:cd43a974c54c | 394 | |
casiotone401 | 0:cd43a974c54c | 395 | // check & update touchOSC ctrl parameter |
casiotone401 | 0:cd43a974c54c | 396 | if (_gateMode[ch] != gGateMode[ch] * 3 || _pulseCount[ch] != gPulseCount[ch] * 7) |
casiotone401 | 0:cd43a974c54c | 397 | { |
casiotone401 | 0:cd43a974c54c | 398 | _gateMode[ch] = (gGateMode[ch] * 3); |
casiotone401 | 0:cd43a974c54c | 399 | _pulseCount[ch] = (gPulseCount[ch] * 7); |
casiotone401 | 0:cd43a974c54c | 400 | |
casiotone401 | 0:cd43a974c54c | 401 | SendCtrlState(ch, _gateMode[ch], _pulseCount[ch]); |
casiotone401 | 0:cd43a974c54c | 402 | } |
casiotone401 | 0:cd43a974c54c | 403 | |
casiotone401 | 0:cd43a974c54c | 404 | if (reset && !_reset) // Stop & Reset |
casiotone401 | 0:cd43a974c54c | 405 | { |
casiotone401 | 0:cd43a974c54c | 406 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false)); |
casiotone401 | 0:cd43a974c54c | 407 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 408 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 409 | |
casiotone401 | 0:cd43a974c54c | 410 | currentStep = 0; |
casiotone401 | 0:cd43a974c54c | 411 | |
casiotone401 | 0:cd43a974c54c | 412 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false)); |
casiotone401 | 0:cd43a974c54c | 413 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 414 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 415 | |
casiotone401 | 0:cd43a974c54c | 416 | _reset = true; |
casiotone401 | 0:cd43a974c54c | 417 | |
casiotone401 | 0:cd43a974c54c | 418 | } else if (!reset) { |
casiotone401 | 0:cd43a974c54c | 419 | |
casiotone401 | 0:cd43a974c54c | 420 | _reset = false; |
casiotone401 | 0:cd43a974c54c | 421 | } |
casiotone401 | 0:cd43a974c54c | 422 | |
casiotone401 | 0:cd43a974c54c | 423 | if (stepFoward) |
casiotone401 | 0:cd43a974c54c | 424 | { |
casiotone401 | 0:cd43a974c54c | 425 | if (gateMode != HOLD) // shift CV |
casiotone401 | 0:cd43a974c54c | 426 | { |
casiotone401 | 0:cd43a974c54c | 427 | for (j = 1; j < 8; ++j) |
casiotone401 | 0:cd43a974c54c | 428 | { |
casiotone401 | 0:cd43a974c54c | 429 | shiftcv[j] = glidecv[j-1]; |
casiotone401 | 0:cd43a974c54c | 430 | } |
casiotone401 | 0:cd43a974c54c | 431 | } |
casiotone401 | 0:cd43a974c54c | 432 | |
casiotone401 | 0:cd43a974c54c | 433 | --stepCount; |
casiotone401 | 0:cd43a974c54c | 434 | |
casiotone401 | 0:cd43a974c54c | 435 | if (stepCount == -1) |
casiotone401 | 0:cd43a974c54c | 436 | { |
casiotone401 | 0:cd43a974c54c | 437 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false)); |
casiotone401 | 0:cd43a974c54c | 438 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 439 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 440 | |
casiotone401 | 0:cd43a974c54c | 441 | ++currentStep; |
casiotone401 | 0:cd43a974c54c | 442 | |
casiotone401 | 0:cd43a974c54c | 443 | if (gCtrlSW[2]) |
casiotone401 | 0:cd43a974c54c | 444 | { |
casiotone401 | 0:cd43a974c54c | 445 | resetCount = 3; |
casiotone401 | 0:cd43a974c54c | 446 | |
casiotone401 | 0:cd43a974c54c | 447 | } else { |
casiotone401 | 0:cd43a974c54c | 448 | |
casiotone401 | 0:cd43a974c54c | 449 | resetCount = gCtrl[4] * 7; |
casiotone401 | 0:cd43a974c54c | 450 | } |
casiotone401 | 0:cd43a974c54c | 451 | |
casiotone401 | 0:cd43a974c54c | 452 | if (_resetCount != resetCount) |
casiotone401 | 0:cd43a974c54c | 453 | { |
casiotone401 | 0:cd43a974c54c | 454 | sendMes.setTopAddress(RESET_COUNTER_ADDRESS); |
casiotone401 | 0:cd43a974c54c | 455 | sendMes.setArgs("i", (resetCount + 1)); |
casiotone401 | 0:cd43a974c54c | 456 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 457 | } |
casiotone401 | 0:cd43a974c54c | 458 | |
casiotone401 | 0:cd43a974c54c | 459 | if (currentStep > resetCount) // reset |
casiotone401 | 0:cd43a974c54c | 460 | { |
casiotone401 | 0:cd43a974c54c | 461 | currentStep = 0; |
casiotone401 | 0:cd43a974c54c | 462 | } |
casiotone401 | 0:cd43a974c54c | 463 | |
casiotone401 | 0:cd43a974c54c | 464 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false)); |
casiotone401 | 0:cd43a974c54c | 465 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 466 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 467 | |
casiotone401 | 0:cd43a974c54c | 468 | UpdateCVMeter(currentStep, &cv); |
casiotone401 | 0:cd43a974c54c | 469 | |
casiotone401 | 0:cd43a974c54c | 470 | // check Pulse Count & Gate Mode |
casiotone401 | 0:cd43a974c54c | 471 | stepCount = (gPulseCount[currentStep] * 7); |
casiotone401 | 0:cd43a974c54c | 472 | |
casiotone401 | 0:cd43a974c54c | 473 | gateMode = (gGateMode[currentStep] * 3); |
casiotone401 | 0:cd43a974c54c | 474 | |
casiotone401 | 0:cd43a974c54c | 475 | if (gateMode != MUTE) |
casiotone401 | 0:cd43a974c54c | 476 | { |
casiotone401 | 0:cd43a974c54c | 477 | gGATES[0] = true; |
casiotone401 | 0:cd43a974c54c | 478 | } |
casiotone401 | 0:cd43a974c54c | 479 | |
casiotone401 | 0:cd43a974c54c | 480 | } |
casiotone401 | 0:cd43a974c54c | 481 | |
casiotone401 | 0:cd43a974c54c | 482 | stepFoward = false; |
casiotone401 | 0:cd43a974c54c | 483 | } |
casiotone401 | 0:cd43a974c54c | 484 | |
casiotone401 | 0:cd43a974c54c | 485 | ++ch; |
casiotone401 | 0:cd43a974c54c | 486 | ch &= 0x07; |
casiotone401 | 0:cd43a974c54c | 487 | } |
casiotone401 | 0:cd43a974c54c | 488 | |
casiotone401 | 0:cd43a974c54c | 489 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 490 | // Send M185 Sequencer Status to touchOSC |
casiotone401 | 0:cd43a974c54c | 491 | |
casiotone401 | 0:cd43a974c54c | 492 | void SendCtrlState(uint8_t step, uint8_t gateMode, uint8_t stepCount) |
casiotone401 | 0:cd43a974c54c | 493 | { |
casiotone401 | 0:cd43a974c54c | 494 | char pulseAddress[10] = PULSE_COUNT_ADDRESS; |
casiotone401 | 0:cd43a974c54c | 495 | char gateModeAddress[10] = GATE_MODE_ADDRESS; |
casiotone401 | 0:cd43a974c54c | 496 | char currentStep[2]; |
casiotone401 | 0:cd43a974c54c | 497 | |
casiotone401 | 0:cd43a974c54c | 498 | sprintf(currentStep, "%d", step + 1); |
casiotone401 | 0:cd43a974c54c | 499 | |
casiotone401 | 0:cd43a974c54c | 500 | if(stepCount != 8) |
casiotone401 | 0:cd43a974c54c | 501 | { |
casiotone401 | 0:cd43a974c54c | 502 | strcat(pulseAddress, currentStep); |
casiotone401 | 0:cd43a974c54c | 503 | sendMes.setTopAddress(pulseAddress); |
casiotone401 | 0:cd43a974c54c | 504 | sendMes.setArgs("i", (stepCount + 1)); |
casiotone401 | 0:cd43a974c54c | 505 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 506 | } |
casiotone401 | 0:cd43a974c54c | 507 | |
casiotone401 | 0:cd43a974c54c | 508 | strcat(gateModeAddress, currentStep); |
casiotone401 | 0:cd43a974c54c | 509 | sendMes.setTopAddress(gateModeAddress); |
casiotone401 | 0:cd43a974c54c | 510 | |
casiotone401 | 0:cd43a974c54c | 511 | switch (gateMode) |
casiotone401 | 0:cd43a974c54c | 512 | { |
casiotone401 | 0:cd43a974c54c | 513 | case SINGLE: |
casiotone401 | 0:cd43a974c54c | 514 | |
casiotone401 | 0:cd43a974c54c | 515 | sendMes.setArgs("s", "|"); |
casiotone401 | 0:cd43a974c54c | 516 | |
casiotone401 | 0:cd43a974c54c | 517 | break; |
casiotone401 | 0:cd43a974c54c | 518 | |
casiotone401 | 0:cd43a974c54c | 519 | case MUTE: |
casiotone401 | 0:cd43a974c54c | 520 | |
casiotone401 | 0:cd43a974c54c | 521 | sendMes.setArgs("s", "O"); |
casiotone401 | 0:cd43a974c54c | 522 | |
casiotone401 | 0:cd43a974c54c | 523 | break; |
casiotone401 | 0:cd43a974c54c | 524 | |
casiotone401 | 0:cd43a974c54c | 525 | case MULTI: |
casiotone401 | 0:cd43a974c54c | 526 | |
casiotone401 | 0:cd43a974c54c | 527 | sendMes.setArgs("s", "||"); |
casiotone401 | 0:cd43a974c54c | 528 | |
casiotone401 | 0:cd43a974c54c | 529 | break; |
casiotone401 | 0:cd43a974c54c | 530 | |
casiotone401 | 0:cd43a974c54c | 531 | case HOLD: |
casiotone401 | 0:cd43a974c54c | 532 | |
casiotone401 | 0:cd43a974c54c | 533 | sendMes.setArgs("s", "|-"); |
casiotone401 | 0:cd43a974c54c | 534 | |
casiotone401 | 0:cd43a974c54c | 535 | break; |
casiotone401 | 0:cd43a974c54c | 536 | } |
casiotone401 | 0:cd43a974c54c | 537 | |
casiotone401 | 0:cd43a974c54c | 538 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 539 | } |
casiotone401 | 0:cd43a974c54c | 540 | |
casiotone401 | 0:cd43a974c54c | 541 |