OSCtoCV Library
OSCtoCV_Sequencer.cpp@4:fe335dc8d53d, 2016-02-16 (annotated)
- Committer:
- casiotone401
- Date:
- Tue Feb 16 11:31:12 2016 +0000
- Revision:
- 4:fe335dc8d53d
- Parent:
- 3:d945a20b1e31
- Child:
- 5:abe335652add
minor change
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 | 1:981b62bb5c87 | 12 | void ShiftCVSeq(int trigger, bool reset, unsigned int channelRange) |
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 | 4:fe335dc8d53d | 22 | static uint8_t ch; |
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 | 1:981b62bb5c87 | 26 | static int jitter, jitterCount; |
casiotone401 | 4:fe335dc8d53d | 27 | |
casiotone401 | 4:fe335dc8d53d | 28 | switch (CheckQuantizeMode()) |
casiotone401 | 0:cd43a974c54c | 29 | { |
casiotone401 | 0:cd43a974c54c | 30 | case Lin: |
casiotone401 | 0:cd43a974c54c | 31 | |
casiotone401 | 0:cd43a974c54c | 32 | glidecv[0] = glidecv[0] * gSlide[currentStep] + gSeq_cv[currentStep] * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 33 | |
casiotone401 | 0:cd43a974c54c | 34 | break; |
casiotone401 | 0:cd43a974c54c | 35 | |
casiotone401 | 0:cd43a974c54c | 36 | case Chr: |
casiotone401 | 0:cd43a974c54c | 37 | |
casiotone401 | 0:cd43a974c54c | 38 | qcv = calibMap1[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES1 - 1))]; |
casiotone401 | 0:cd43a974c54c | 39 | |
casiotone401 | 0:cd43a974c54c | 40 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 41 | |
casiotone401 | 0:cd43a974c54c | 42 | break; |
casiotone401 | 0:cd43a974c54c | 43 | |
casiotone401 | 0:cd43a974c54c | 44 | case Maj: |
casiotone401 | 0:cd43a974c54c | 45 | |
casiotone401 | 0:cd43a974c54c | 46 | qcv = calibMap2[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES2 - 1))]; |
casiotone401 | 0:cd43a974c54c | 47 | |
casiotone401 | 0:cd43a974c54c | 48 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 49 | |
casiotone401 | 0:cd43a974c54c | 50 | break; |
casiotone401 | 0:cd43a974c54c | 51 | |
casiotone401 | 0:cd43a974c54c | 52 | case M7: |
casiotone401 | 0:cd43a974c54c | 53 | |
casiotone401 | 0:cd43a974c54c | 54 | qcv = calibMap3[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES3 - 1))]; |
casiotone401 | 0:cd43a974c54c | 55 | |
casiotone401 | 0:cd43a974c54c | 56 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 57 | |
casiotone401 | 0:cd43a974c54c | 58 | break; |
casiotone401 | 0:cd43a974c54c | 59 | |
casiotone401 | 0:cd43a974c54c | 60 | case Min7: |
casiotone401 | 0:cd43a974c54c | 61 | |
casiotone401 | 0:cd43a974c54c | 62 | qcv = calibMap4[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES4 - 1))]; |
casiotone401 | 0:cd43a974c54c | 63 | |
casiotone401 | 0:cd43a974c54c | 64 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 65 | |
casiotone401 | 0:cd43a974c54c | 66 | break; |
casiotone401 | 0:cd43a974c54c | 67 | |
casiotone401 | 0:cd43a974c54c | 68 | case Dor: |
casiotone401 | 0:cd43a974c54c | 69 | |
casiotone401 | 0:cd43a974c54c | 70 | qcv = calibMap5[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES5 - 1))]; |
casiotone401 | 0:cd43a974c54c | 71 | |
casiotone401 | 0:cd43a974c54c | 72 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 73 | |
casiotone401 | 0:cd43a974c54c | 74 | break; |
casiotone401 | 0:cd43a974c54c | 75 | |
casiotone401 | 0:cd43a974c54c | 76 | case Min: |
casiotone401 | 0:cd43a974c54c | 77 | |
casiotone401 | 0:cd43a974c54c | 78 | qcv = calibMap6[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES6 - 1))]; |
casiotone401 | 0:cd43a974c54c | 79 | |
casiotone401 | 0:cd43a974c54c | 80 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 81 | |
casiotone401 | 0:cd43a974c54c | 82 | break; |
casiotone401 | 0:cd43a974c54c | 83 | |
casiotone401 | 0:cd43a974c54c | 84 | case S5th: |
casiotone401 | 0:cd43a974c54c | 85 | |
casiotone401 | 0:cd43a974c54c | 86 | qcv = calibMap7[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES7 - 1))]; |
casiotone401 | 0:cd43a974c54c | 87 | |
casiotone401 | 0:cd43a974c54c | 88 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 89 | |
casiotone401 | 0:cd43a974c54c | 90 | break; |
casiotone401 | 0:cd43a974c54c | 91 | |
casiotone401 | 0:cd43a974c54c | 92 | case Wht: |
casiotone401 | 0:cd43a974c54c | 93 | |
casiotone401 | 0:cd43a974c54c | 94 | qcv = calibMap8[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES8 - 1))]; |
casiotone401 | 0:cd43a974c54c | 95 | |
casiotone401 | 0:cd43a974c54c | 96 | glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 97 | |
casiotone401 | 0:cd43a974c54c | 98 | break; |
casiotone401 | 0:cd43a974c54c | 99 | } |
casiotone401 | 0:cd43a974c54c | 100 | |
casiotone401 | 0:cd43a974c54c | 101 | if (!gCtrlSW[4]) |
casiotone401 | 0:cd43a974c54c | 102 | { |
casiotone401 | 0:cd43a974c54c | 103 | jitter = 0; |
casiotone401 | 0:cd43a974c54c | 104 | |
casiotone401 | 0:cd43a974c54c | 105 | } else if (gCtrlSW[4] && jitterCount % 64 == 0) { // ASR Analog Mode |
casiotone401 | 0:cd43a974c54c | 106 | |
casiotone401 | 1:981b62bb5c87 | 107 | jitter = ANALOG_JITTER; |
casiotone401 | 0:cd43a974c54c | 108 | } |
casiotone401 | 0:cd43a974c54c | 109 | |
casiotone401 | 0:cd43a974c54c | 110 | cv = (unsigned int)(glidecv[0] + jitter); |
casiotone401 | 0:cd43a974c54c | 111 | |
casiotone401 | 0:cd43a974c54c | 112 | UpdateCV(WRITE_UPDATE_N, 0, &cv); |
casiotone401 | 0:cd43a974c54c | 113 | |
casiotone401 | 1:981b62bb5c87 | 114 | for (i = 1; i < channelRange; ++i) |
casiotone401 | 0:cd43a974c54c | 115 | { |
casiotone401 | 0:cd43a974c54c | 116 | glidecv[i] = glidecv[i] * gSlide[currentStep] + shiftcv[i] * (1.0f - gSlide[currentStep]); |
casiotone401 | 0:cd43a974c54c | 117 | cv = (unsigned int)(glidecv[i] + jitter); |
casiotone401 | 0:cd43a974c54c | 118 | |
casiotone401 | 0:cd43a974c54c | 119 | UpdateCV(WRITE_UPDATE_N, i, &cv); |
casiotone401 | 0:cd43a974c54c | 120 | } |
casiotone401 | 0:cd43a974c54c | 121 | |
casiotone401 | 0:cd43a974c54c | 122 | if (trigger && !triggerState) // trigger ON |
casiotone401 | 0:cd43a974c54c | 123 | { |
casiotone401 | 0:cd43a974c54c | 124 | stepFoward = triggerState = true; |
casiotone401 | 0:cd43a974c54c | 125 | |
casiotone401 | 0:cd43a974c54c | 126 | } else if (!trigger) { // trigger OFF |
casiotone401 | 0:cd43a974c54c | 127 | |
casiotone401 | 0:cd43a974c54c | 128 | if (gateMode != HOLD) |
casiotone401 | 0:cd43a974c54c | 129 | { |
casiotone401 | 0:cd43a974c54c | 130 | gGATES[0] = false; |
casiotone401 | 0:cd43a974c54c | 131 | } |
casiotone401 | 0:cd43a974c54c | 132 | |
casiotone401 | 0:cd43a974c54c | 133 | triggerState = false; |
casiotone401 | 0:cd43a974c54c | 134 | } |
casiotone401 | 0:cd43a974c54c | 135 | |
casiotone401 | 0:cd43a974c54c | 136 | // check & update touchOSC ctrl parameter |
casiotone401 | 0:cd43a974c54c | 137 | if (_gateMode[ch] != (gGateMode[ch] * 3)) |
casiotone401 | 0:cd43a974c54c | 138 | { |
casiotone401 | 0:cd43a974c54c | 139 | _gateMode[ch] = (gGateMode[ch] * 3); |
casiotone401 | 0:cd43a974c54c | 140 | |
casiotone401 | 0:cd43a974c54c | 141 | if (_gateMode[ch] == MULTI) |
casiotone401 | 0:cd43a974c54c | 142 | { |
casiotone401 | 0:cd43a974c54c | 143 | _gateMode[ch] = HOLD; |
casiotone401 | 0:cd43a974c54c | 144 | } |
casiotone401 | 0:cd43a974c54c | 145 | |
casiotone401 | 1:981b62bb5c87 | 146 | SendCtrlState(ch, _gateMode[ch], 8, SHIFTSEQ); |
casiotone401 | 0:cd43a974c54c | 147 | } |
casiotone401 | 0:cd43a974c54c | 148 | |
casiotone401 | 0:cd43a974c54c | 149 | if (reset && !_reset) // Stop & Reset |
casiotone401 | 0:cd43a974c54c | 150 | { |
casiotone401 | 1:981b62bb5c87 | 151 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, SHIFTSEQ)); |
casiotone401 | 0:cd43a974c54c | 152 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 153 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 154 | |
casiotone401 | 0:cd43a974c54c | 155 | currentStep = 0; |
casiotone401 | 0:cd43a974c54c | 156 | |
casiotone401 | 1:981b62bb5c87 | 157 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, SHIFTSEQ)); |
casiotone401 | 0:cd43a974c54c | 158 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 159 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 160 | |
casiotone401 | 0:cd43a974c54c | 161 | _reset = true; |
casiotone401 | 1:981b62bb5c87 | 162 | stepFoward = triggerState = false; |
casiotone401 | 0:cd43a974c54c | 163 | |
casiotone401 | 0:cd43a974c54c | 164 | } else if (!reset) { |
casiotone401 | 0:cd43a974c54c | 165 | |
casiotone401 | 0:cd43a974c54c | 166 | _reset = false; |
casiotone401 | 0:cd43a974c54c | 167 | } |
casiotone401 | 0:cd43a974c54c | 168 | |
casiotone401 | 0:cd43a974c54c | 169 | if (stepFoward) |
casiotone401 | 0:cd43a974c54c | 170 | { |
casiotone401 | 0:cd43a974c54c | 171 | if (gateMode != HOLD) // shift CV |
casiotone401 | 0:cd43a974c54c | 172 | { |
casiotone401 | 0:cd43a974c54c | 173 | for (j = 1; j < 8; ++j) |
casiotone401 | 0:cd43a974c54c | 174 | { |
casiotone401 | 0:cd43a974c54c | 175 | shiftcv[j] = glidecv[j-1]; |
casiotone401 | 0:cd43a974c54c | 176 | } |
casiotone401 | 0:cd43a974c54c | 177 | } |
casiotone401 | 0:cd43a974c54c | 178 | |
casiotone401 | 1:981b62bb5c87 | 179 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, SHIFTSEQ)); |
casiotone401 | 0:cd43a974c54c | 180 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 181 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 182 | |
casiotone401 | 0:cd43a974c54c | 183 | ++currentStep; |
casiotone401 | 0:cd43a974c54c | 184 | |
casiotone401 | 1:981b62bb5c87 | 185 | if (gCtrlSW[2]) // 4step break |
casiotone401 | 0:cd43a974c54c | 186 | { |
casiotone401 | 0:cd43a974c54c | 187 | resetCount = 3; |
casiotone401 | 0:cd43a974c54c | 188 | |
casiotone401 | 0:cd43a974c54c | 189 | } else { |
casiotone401 | 0:cd43a974c54c | 190 | |
casiotone401 | 0:cd43a974c54c | 191 | resetCount = gCtrl[4] * 15; |
casiotone401 | 0:cd43a974c54c | 192 | } |
casiotone401 | 0:cd43a974c54c | 193 | |
casiotone401 | 0:cd43a974c54c | 194 | if (_resetCount != resetCount) |
casiotone401 | 0:cd43a974c54c | 195 | { |
casiotone401 | 0:cd43a974c54c | 196 | sendMes.setTopAddress(RESET_COUNTER_ADDRESS); |
casiotone401 | 0:cd43a974c54c | 197 | sendMes.setArgs("i", (resetCount + 1)); |
casiotone401 | 0:cd43a974c54c | 198 | osc.sendOsc(&sendMes); |
casiotone401 | 4:fe335dc8d53d | 199 | |
casiotone401 | 4:fe335dc8d53d | 200 | sendMes.setTopAddress("/ctrl5"); |
casiotone401 | 4:fe335dc8d53d | 201 | sendMes.setArgs("f", gCtrl[4]); |
casiotone401 | 4:fe335dc8d53d | 202 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 203 | } |
casiotone401 | 0:cd43a974c54c | 204 | |
casiotone401 | 0:cd43a974c54c | 205 | if (currentStep > resetCount) // reset |
casiotone401 | 0:cd43a974c54c | 206 | { |
casiotone401 | 0:cd43a974c54c | 207 | currentStep = 0; |
casiotone401 | 0:cd43a974c54c | 208 | } |
casiotone401 | 0:cd43a974c54c | 209 | |
casiotone401 | 1:981b62bb5c87 | 210 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, SHIFTSEQ)); |
casiotone401 | 0:cd43a974c54c | 211 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 212 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 213 | |
casiotone401 | 0:cd43a974c54c | 214 | if (currentStep < 8) |
casiotone401 | 0:cd43a974c54c | 215 | { |
casiotone401 | 0:cd43a974c54c | 216 | UpdateCVMeter(currentStep, &cv); |
casiotone401 | 1:981b62bb5c87 | 217 | |
casiotone401 | 0:cd43a974c54c | 218 | } else { |
casiotone401 | 1:981b62bb5c87 | 219 | |
casiotone401 | 0:cd43a974c54c | 220 | UpdateCVMeter((currentStep - 8), &cv); |
casiotone401 | 1:981b62bb5c87 | 221 | } |
casiotone401 | 0:cd43a974c54c | 222 | |
casiotone401 | 0:cd43a974c54c | 223 | gateMode = (gGateMode[currentStep] * 3); |
casiotone401 | 0:cd43a974c54c | 224 | |
casiotone401 | 0:cd43a974c54c | 225 | if (gateMode == MULTI) // omit MULTI mode |
casiotone401 | 0:cd43a974c54c | 226 | { |
casiotone401 | 0:cd43a974c54c | 227 | gateMode = HOLD; |
casiotone401 | 0:cd43a974c54c | 228 | } |
casiotone401 | 0:cd43a974c54c | 229 | |
casiotone401 | 0:cd43a974c54c | 230 | if (gateMode != MUTE) |
casiotone401 | 0:cd43a974c54c | 231 | { |
casiotone401 | 0:cd43a974c54c | 232 | gGATES[0] = true; |
casiotone401 | 0:cd43a974c54c | 233 | } |
casiotone401 | 0:cd43a974c54c | 234 | |
casiotone401 | 0:cd43a974c54c | 235 | if (gAccent[currentStep]) // accent |
casiotone401 | 0:cd43a974c54c | 236 | { |
casiotone401 | 1:981b62bb5c87 | 237 | gGATES[2] = true; |
casiotone401 | 0:cd43a974c54c | 238 | |
casiotone401 | 0:cd43a974c54c | 239 | } else { |
casiotone401 | 0:cd43a974c54c | 240 | |
casiotone401 | 1:981b62bb5c87 | 241 | gGATES[2] = false; |
casiotone401 | 0:cd43a974c54c | 242 | } |
casiotone401 | 0:cd43a974c54c | 243 | |
casiotone401 | 0:cd43a974c54c | 244 | stepFoward = false; |
casiotone401 | 0:cd43a974c54c | 245 | } |
casiotone401 | 0:cd43a974c54c | 246 | |
casiotone401 | 0:cd43a974c54c | 247 | ++ch; |
casiotone401 | 0:cd43a974c54c | 248 | ch &= 0x0F; |
casiotone401 | 0:cd43a974c54c | 249 | |
casiotone401 | 0:cd43a974c54c | 250 | ++jitterCount; |
casiotone401 | 0:cd43a974c54c | 251 | jitterCount &= 0x1FF; |
casiotone401 | 0:cd43a974c54c | 252 | } |
casiotone401 | 0:cd43a974c54c | 253 | |
casiotone401 | 0:cd43a974c54c | 254 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 255 | // M185 Sequencer |
casiotone401 | 0:cd43a974c54c | 256 | |
casiotone401 | 1:981b62bb5c87 | 257 | void M185Seq(int trigger, bool reset, unsigned int channelRange) |
casiotone401 | 0:cd43a974c54c | 258 | { |
casiotone401 | 0:cd43a974c54c | 259 | int i, j; |
casiotone401 | 0:cd43a974c54c | 260 | static bool triggerState = false; |
casiotone401 | 0:cd43a974c54c | 261 | static bool stepFoward = false; |
casiotone401 | 0:cd43a974c54c | 262 | static bool _reset = false; |
casiotone401 | 0:cd43a974c54c | 263 | static uint8_t currentStep; |
casiotone401 | 0:cd43a974c54c | 264 | static int stepCount; |
casiotone401 | 0:cd43a974c54c | 265 | static int _resetCount, resetCount; |
casiotone401 | 0:cd43a974c54c | 266 | static uint8_t gateMode; |
casiotone401 | 0:cd43a974c54c | 267 | static uint8_t _gateMode[8]; |
casiotone401 | 0:cd43a974c54c | 268 | static uint8_t _pulseCount[8]; |
casiotone401 | 4:fe335dc8d53d | 269 | static uint8_t ch; |
casiotone401 | 0:cd43a974c54c | 270 | static float glidecv[8], shiftcv[8]; |
casiotone401 | 0:cd43a974c54c | 271 | unsigned int cv; |
casiotone401 | 0:cd43a974c54c | 272 | static float qcv; |
casiotone401 | 1:981b62bb5c87 | 273 | static int jitterCount; |
casiotone401 | 1:981b62bb5c87 | 274 | static int jitter; |
casiotone401 | 4:fe335dc8d53d | 275 | |
casiotone401 | 4:fe335dc8d53d | 276 | switch (CheckQuantizeMode()) |
casiotone401 | 0:cd43a974c54c | 277 | { |
casiotone401 | 0:cd43a974c54c | 278 | case Lin: |
casiotone401 | 0:cd43a974c54c | 279 | |
casiotone401 | 1:981b62bb5c87 | 280 | glidecv[0] = glidecv[0] * gSlide185[currentStep] + g185_cv[currentStep] * (1.0f - gSlide185[currentStep]); |
casiotone401 | 0:cd43a974c54c | 281 | |
casiotone401 | 0:cd43a974c54c | 282 | break; |
casiotone401 | 0:cd43a974c54c | 283 | |
casiotone401 | 0:cd43a974c54c | 284 | case Chr: |
casiotone401 | 0:cd43a974c54c | 285 | |
casiotone401 | 1:981b62bb5c87 | 286 | qcv = calibMap1[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES1 - 1))]; |
casiotone401 | 0:cd43a974c54c | 287 | |
casiotone401 | 1:981b62bb5c87 | 288 | glidecv[0] = glidecv[0] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 0:cd43a974c54c | 289 | |
casiotone401 | 0:cd43a974c54c | 290 | break; |
casiotone401 | 0:cd43a974c54c | 291 | |
casiotone401 | 0:cd43a974c54c | 292 | case Maj: |
casiotone401 | 0:cd43a974c54c | 293 | |
casiotone401 | 1:981b62bb5c87 | 294 | qcv = calibMap2[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES2 - 1))]; |
casiotone401 | 0:cd43a974c54c | 295 | |
casiotone401 | 1:981b62bb5c87 | 296 | glidecv[0] = glidecv[0] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 0:cd43a974c54c | 297 | |
casiotone401 | 0:cd43a974c54c | 298 | break; |
casiotone401 | 0:cd43a974c54c | 299 | |
casiotone401 | 0:cd43a974c54c | 300 | case M7: |
casiotone401 | 0:cd43a974c54c | 301 | |
casiotone401 | 1:981b62bb5c87 | 302 | qcv = calibMap3[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES3 - 1))]; |
casiotone401 | 0:cd43a974c54c | 303 | |
casiotone401 | 1:981b62bb5c87 | 304 | glidecv[0] = glidecv[0] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 0:cd43a974c54c | 305 | |
casiotone401 | 0:cd43a974c54c | 306 | break; |
casiotone401 | 0:cd43a974c54c | 307 | |
casiotone401 | 0:cd43a974c54c | 308 | case Min7: |
casiotone401 | 0:cd43a974c54c | 309 | |
casiotone401 | 1:981b62bb5c87 | 310 | qcv = calibMap4[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES4 - 1))]; |
casiotone401 | 0:cd43a974c54c | 311 | |
casiotone401 | 1:981b62bb5c87 | 312 | glidecv[0] = glidecv[0] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 0:cd43a974c54c | 313 | |
casiotone401 | 0:cd43a974c54c | 314 | break; |
casiotone401 | 0:cd43a974c54c | 315 | |
casiotone401 | 0:cd43a974c54c | 316 | case Dor: |
casiotone401 | 0:cd43a974c54c | 317 | |
casiotone401 | 1:981b62bb5c87 | 318 | qcv = calibMap5[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES5 - 1))]; |
casiotone401 | 0:cd43a974c54c | 319 | |
casiotone401 | 1:981b62bb5c87 | 320 | glidecv[0] = glidecv[0] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 0:cd43a974c54c | 321 | |
casiotone401 | 0:cd43a974c54c | 322 | break; |
casiotone401 | 0:cd43a974c54c | 323 | |
casiotone401 | 0:cd43a974c54c | 324 | case Min: |
casiotone401 | 0:cd43a974c54c | 325 | |
casiotone401 | 1:981b62bb5c87 | 326 | qcv = calibMap6[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES6 - 1))]; |
casiotone401 | 0:cd43a974c54c | 327 | |
casiotone401 | 1:981b62bb5c87 | 328 | glidecv[0] = glidecv[0] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 0:cd43a974c54c | 329 | |
casiotone401 | 0:cd43a974c54c | 330 | break; |
casiotone401 | 0:cd43a974c54c | 331 | |
casiotone401 | 0:cd43a974c54c | 332 | case S5th: |
casiotone401 | 0:cd43a974c54c | 333 | |
casiotone401 | 1:981b62bb5c87 | 334 | qcv = calibMap7[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES7 - 1))]; |
casiotone401 | 0:cd43a974c54c | 335 | |
casiotone401 | 1:981b62bb5c87 | 336 | glidecv[0] = glidecv[0] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 0:cd43a974c54c | 337 | |
casiotone401 | 0:cd43a974c54c | 338 | break; |
casiotone401 | 0:cd43a974c54c | 339 | |
casiotone401 | 0:cd43a974c54c | 340 | case Wht: |
casiotone401 | 0:cd43a974c54c | 341 | |
casiotone401 | 1:981b62bb5c87 | 342 | qcv = calibMap8[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES8 - 1))]; |
casiotone401 | 0:cd43a974c54c | 343 | |
casiotone401 | 1:981b62bb5c87 | 344 | glidecv[0] = glidecv[0] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 0:cd43a974c54c | 345 | |
casiotone401 | 0:cd43a974c54c | 346 | break; |
casiotone401 | 0:cd43a974c54c | 347 | } |
casiotone401 | 1:981b62bb5c87 | 348 | |
casiotone401 | 1:981b62bb5c87 | 349 | if (!gCtrlSW[4]) |
casiotone401 | 1:981b62bb5c87 | 350 | { |
casiotone401 | 1:981b62bb5c87 | 351 | jitter = 0; |
casiotone401 | 1:981b62bb5c87 | 352 | |
casiotone401 | 1:981b62bb5c87 | 353 | } else if (gCtrlSW[4] && jitterCount % 64 == 0) { // ASR Analog Mode |
casiotone401 | 0:cd43a974c54c | 354 | |
casiotone401 | 1:981b62bb5c87 | 355 | jitter = ANALOG_JITTER; |
casiotone401 | 1:981b62bb5c87 | 356 | } |
casiotone401 | 1:981b62bb5c87 | 357 | |
casiotone401 | 1:981b62bb5c87 | 358 | cv = (unsigned int)(glidecv[0] + jitter); |
casiotone401 | 0:cd43a974c54c | 359 | |
casiotone401 | 0:cd43a974c54c | 360 | UpdateCV(WRITE_UPDATE_N, 0, &cv); |
casiotone401 | 0:cd43a974c54c | 361 | |
casiotone401 | 1:981b62bb5c87 | 362 | for (i = 1; i < channelRange; ++i) |
casiotone401 | 0:cd43a974c54c | 363 | { |
casiotone401 | 1:981b62bb5c87 | 364 | glidecv[i] = glidecv[i] * gSlide185[currentStep] + shiftcv[i] * (1.0f - gSlide185[currentStep]); |
casiotone401 | 1:981b62bb5c87 | 365 | cv = (unsigned int)(glidecv[i] + jitter); |
casiotone401 | 0:cd43a974c54c | 366 | |
casiotone401 | 0:cd43a974c54c | 367 | UpdateCV(WRITE_UPDATE_N, i, &cv); |
casiotone401 | 0:cd43a974c54c | 368 | } |
casiotone401 | 0:cd43a974c54c | 369 | |
casiotone401 | 0:cd43a974c54c | 370 | if (trigger && !triggerState) // trigger ON |
casiotone401 | 0:cd43a974c54c | 371 | { |
casiotone401 | 0:cd43a974c54c | 372 | if (gateMode == MULTI) |
casiotone401 | 0:cd43a974c54c | 373 | { |
casiotone401 | 0:cd43a974c54c | 374 | gGATES[0] = true; |
casiotone401 | 0:cd43a974c54c | 375 | |
casiotone401 | 1:981b62bb5c87 | 376 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, M185SEQ)); |
casiotone401 | 0:cd43a974c54c | 377 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 378 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 379 | } |
casiotone401 | 0:cd43a974c54c | 380 | |
casiotone401 | 0:cd43a974c54c | 381 | stepFoward = triggerState = true; |
casiotone401 | 0:cd43a974c54c | 382 | |
casiotone401 | 0:cd43a974c54c | 383 | } else if (!trigger) { // trigger OFF |
casiotone401 | 0:cd43a974c54c | 384 | |
casiotone401 | 0:cd43a974c54c | 385 | if (gateMode != HOLD) |
casiotone401 | 0:cd43a974c54c | 386 | { |
casiotone401 | 0:cd43a974c54c | 387 | gGATES[0] = false; |
casiotone401 | 0:cd43a974c54c | 388 | } |
casiotone401 | 0:cd43a974c54c | 389 | |
casiotone401 | 0:cd43a974c54c | 390 | if (gateMode == MULTI) |
casiotone401 | 0:cd43a974c54c | 391 | { |
casiotone401 | 1:981b62bb5c87 | 392 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, M185SEQ)); |
casiotone401 | 0:cd43a974c54c | 393 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 394 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 395 | } |
casiotone401 | 0:cd43a974c54c | 396 | |
casiotone401 | 0:cd43a974c54c | 397 | triggerState = false; |
casiotone401 | 0:cd43a974c54c | 398 | } |
casiotone401 | 0:cd43a974c54c | 399 | |
casiotone401 | 0:cd43a974c54c | 400 | // check & update touchOSC ctrl parameter |
casiotone401 | 1:981b62bb5c87 | 401 | if (_gateMode[ch] != gGateMode185[ch] * 3 || _pulseCount[ch] != gPulseCount[ch] * 7) |
casiotone401 | 0:cd43a974c54c | 402 | { |
casiotone401 | 1:981b62bb5c87 | 403 | _gateMode[ch] = (gGateMode185[ch] * 3); |
casiotone401 | 0:cd43a974c54c | 404 | _pulseCount[ch] = (gPulseCount[ch] * 7); |
casiotone401 | 0:cd43a974c54c | 405 | |
casiotone401 | 1:981b62bb5c87 | 406 | SendCtrlState(ch, _gateMode[ch], _pulseCount[ch], M185SEQ); |
casiotone401 | 0:cd43a974c54c | 407 | } |
casiotone401 | 0:cd43a974c54c | 408 | |
casiotone401 | 0:cd43a974c54c | 409 | if (reset && !_reset) // Stop & Reset |
casiotone401 | 0:cd43a974c54c | 410 | { |
casiotone401 | 1:981b62bb5c87 | 411 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, M185SEQ)); |
casiotone401 | 0:cd43a974c54c | 412 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 413 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 414 | |
casiotone401 | 0:cd43a974c54c | 415 | currentStep = 0; |
casiotone401 | 0:cd43a974c54c | 416 | |
casiotone401 | 1:981b62bb5c87 | 417 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, M185SEQ)); |
casiotone401 | 0:cd43a974c54c | 418 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 419 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 420 | |
casiotone401 | 0:cd43a974c54c | 421 | _reset = true; |
casiotone401 | 1:981b62bb5c87 | 422 | stepFoward = triggerState = false; |
casiotone401 | 0:cd43a974c54c | 423 | |
casiotone401 | 0:cd43a974c54c | 424 | } else if (!reset) { |
casiotone401 | 0:cd43a974c54c | 425 | |
casiotone401 | 0:cd43a974c54c | 426 | _reset = false; |
casiotone401 | 0:cd43a974c54c | 427 | } |
casiotone401 | 0:cd43a974c54c | 428 | |
casiotone401 | 0:cd43a974c54c | 429 | if (stepFoward) |
casiotone401 | 0:cd43a974c54c | 430 | { |
casiotone401 | 0:cd43a974c54c | 431 | if (gateMode != HOLD) // shift CV |
casiotone401 | 0:cd43a974c54c | 432 | { |
casiotone401 | 0:cd43a974c54c | 433 | for (j = 1; j < 8; ++j) |
casiotone401 | 0:cd43a974c54c | 434 | { |
casiotone401 | 0:cd43a974c54c | 435 | shiftcv[j] = glidecv[j-1]; |
casiotone401 | 0:cd43a974c54c | 436 | } |
casiotone401 | 0:cd43a974c54c | 437 | } |
casiotone401 | 0:cd43a974c54c | 438 | |
casiotone401 | 0:cd43a974c54c | 439 | --stepCount; |
casiotone401 | 0:cd43a974c54c | 440 | |
casiotone401 | 0:cd43a974c54c | 441 | if (stepCount == -1) |
casiotone401 | 0:cd43a974c54c | 442 | { |
casiotone401 | 1:981b62bb5c87 | 443 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, M185SEQ)); |
casiotone401 | 0:cd43a974c54c | 444 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 445 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 446 | |
casiotone401 | 0:cd43a974c54c | 447 | ++currentStep; |
casiotone401 | 0:cd43a974c54c | 448 | |
casiotone401 | 1:981b62bb5c87 | 449 | if (gCtrlSW[2]) // 4step break |
casiotone401 | 0:cd43a974c54c | 450 | { |
casiotone401 | 0:cd43a974c54c | 451 | resetCount = 3; |
casiotone401 | 0:cd43a974c54c | 452 | |
casiotone401 | 0:cd43a974c54c | 453 | } else { |
casiotone401 | 0:cd43a974c54c | 454 | |
casiotone401 | 1:981b62bb5c87 | 455 | resetCount = gCtrl[5] * 7; |
casiotone401 | 0:cd43a974c54c | 456 | } |
casiotone401 | 0:cd43a974c54c | 457 | |
casiotone401 | 0:cd43a974c54c | 458 | if (_resetCount != resetCount) |
casiotone401 | 0:cd43a974c54c | 459 | { |
casiotone401 | 1:981b62bb5c87 | 460 | sendMes.setTopAddress(RESET185_COUNTER_ADDRESS); |
casiotone401 | 0:cd43a974c54c | 461 | sendMes.setArgs("i", (resetCount + 1)); |
casiotone401 | 0:cd43a974c54c | 462 | osc.sendOsc(&sendMes); |
casiotone401 | 4:fe335dc8d53d | 463 | |
casiotone401 | 4:fe335dc8d53d | 464 | sendMes.setTopAddress("/ctrl6"); |
casiotone401 | 4:fe335dc8d53d | 465 | sendMes.setArgs("f", gCtrl[5]); |
casiotone401 | 4:fe335dc8d53d | 466 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 467 | } |
casiotone401 | 0:cd43a974c54c | 468 | |
casiotone401 | 0:cd43a974c54c | 469 | if (currentStep > resetCount) // reset |
casiotone401 | 0:cd43a974c54c | 470 | { |
casiotone401 | 0:cd43a974c54c | 471 | currentStep = 0; |
casiotone401 | 0:cd43a974c54c | 472 | } |
casiotone401 | 0:cd43a974c54c | 473 | |
casiotone401 | 1:981b62bb5c87 | 474 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, M185SEQ)); |
casiotone401 | 0:cd43a974c54c | 475 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 476 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 477 | |
casiotone401 | 0:cd43a974c54c | 478 | UpdateCVMeter(currentStep, &cv); |
casiotone401 | 0:cd43a974c54c | 479 | |
casiotone401 | 0:cd43a974c54c | 480 | // check Pulse Count & Gate Mode |
casiotone401 | 0:cd43a974c54c | 481 | stepCount = (gPulseCount[currentStep] * 7); |
casiotone401 | 0:cd43a974c54c | 482 | |
casiotone401 | 1:981b62bb5c87 | 483 | gateMode = (gGateMode185[currentStep] * 3); |
casiotone401 | 0:cd43a974c54c | 484 | |
casiotone401 | 0:cd43a974c54c | 485 | if (gateMode != MUTE) |
casiotone401 | 0:cd43a974c54c | 486 | { |
casiotone401 | 0:cd43a974c54c | 487 | gGATES[0] = true; |
casiotone401 | 0:cd43a974c54c | 488 | } |
casiotone401 | 0:cd43a974c54c | 489 | |
casiotone401 | 1:981b62bb5c87 | 490 | if (gAccent185[currentStep]) // accent |
casiotone401 | 1:981b62bb5c87 | 491 | { |
casiotone401 | 1:981b62bb5c87 | 492 | gGATES[2] = true; |
casiotone401 | 1:981b62bb5c87 | 493 | |
casiotone401 | 1:981b62bb5c87 | 494 | } else { |
casiotone401 | 1:981b62bb5c87 | 495 | |
casiotone401 | 1:981b62bb5c87 | 496 | gGATES[2] = false; |
casiotone401 | 1:981b62bb5c87 | 497 | } |
casiotone401 | 1:981b62bb5c87 | 498 | } |
casiotone401 | 1:981b62bb5c87 | 499 | |
casiotone401 | 1:981b62bb5c87 | 500 | stepFoward = false; |
casiotone401 | 1:981b62bb5c87 | 501 | } |
casiotone401 | 1:981b62bb5c87 | 502 | |
casiotone401 | 1:981b62bb5c87 | 503 | ++ch; |
casiotone401 | 1:981b62bb5c87 | 504 | ch &= 0x07; |
casiotone401 | 1:981b62bb5c87 | 505 | |
casiotone401 | 1:981b62bb5c87 | 506 | ++jitterCount; |
casiotone401 | 1:981b62bb5c87 | 507 | jitterCount &= 0x1FF; |
casiotone401 | 1:981b62bb5c87 | 508 | } |
casiotone401 | 1:981b62bb5c87 | 509 | |
casiotone401 | 1:981b62bb5c87 | 510 | //------------------------------------------------------------- |
casiotone401 | 1:981b62bb5c87 | 511 | // M185 Sequencer |
casiotone401 | 1:981b62bb5c87 | 512 | |
casiotone401 | 1:981b62bb5c87 | 513 | void PolyM185Seq(int trigger, bool reset, unsigned int channelRange) |
casiotone401 | 1:981b62bb5c87 | 514 | { |
casiotone401 | 1:981b62bb5c87 | 515 | int i, j; |
casiotone401 | 1:981b62bb5c87 | 516 | static bool triggerState = false; |
casiotone401 | 1:981b62bb5c87 | 517 | static bool stepFoward = false; |
casiotone401 | 1:981b62bb5c87 | 518 | static bool _reset = false; |
casiotone401 | 1:981b62bb5c87 | 519 | static uint8_t currentStep; |
casiotone401 | 1:981b62bb5c87 | 520 | static int stepCount; |
casiotone401 | 1:981b62bb5c87 | 521 | static int _resetCount, resetCount; |
casiotone401 | 1:981b62bb5c87 | 522 | static uint8_t gateMode; |
casiotone401 | 1:981b62bb5c87 | 523 | static uint8_t _gateMode[8]; |
casiotone401 | 1:981b62bb5c87 | 524 | static uint8_t _pulseCount[8]; |
casiotone401 | 4:fe335dc8d53d | 525 | static uint8_t ch; |
casiotone401 | 1:981b62bb5c87 | 526 | static float glidecv[8], shiftcv[8]; |
casiotone401 | 1:981b62bb5c87 | 527 | unsigned int cv; |
casiotone401 | 1:981b62bb5c87 | 528 | static float qcv; |
casiotone401 | 1:981b62bb5c87 | 529 | static int jitterCount; |
casiotone401 | 1:981b62bb5c87 | 530 | static int jitter; |
casiotone401 | 1:981b62bb5c87 | 531 | |
casiotone401 | 4:fe335dc8d53d | 532 | switch (CheckQuantizeMode()) |
casiotone401 | 1:981b62bb5c87 | 533 | { |
casiotone401 | 1:981b62bb5c87 | 534 | case Lin: |
casiotone401 | 1:981b62bb5c87 | 535 | |
casiotone401 | 1:981b62bb5c87 | 536 | glidecv[4] = glidecv[4] * gSlide185[currentStep] + g185_cv[currentStep] * (1.0f - gSlide185[currentStep]); |
casiotone401 | 1:981b62bb5c87 | 537 | |
casiotone401 | 1:981b62bb5c87 | 538 | break; |
casiotone401 | 1:981b62bb5c87 | 539 | |
casiotone401 | 1:981b62bb5c87 | 540 | case Chr: |
casiotone401 | 1:981b62bb5c87 | 541 | |
casiotone401 | 1:981b62bb5c87 | 542 | qcv = calibMap1[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES1 - 1))]; |
casiotone401 | 1:981b62bb5c87 | 543 | |
casiotone401 | 1:981b62bb5c87 | 544 | glidecv[4] = glidecv[4] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 1:981b62bb5c87 | 545 | |
casiotone401 | 1:981b62bb5c87 | 546 | break; |
casiotone401 | 1:981b62bb5c87 | 547 | |
casiotone401 | 1:981b62bb5c87 | 548 | case Maj: |
casiotone401 | 1:981b62bb5c87 | 549 | |
casiotone401 | 1:981b62bb5c87 | 550 | qcv = calibMap2[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES2 - 1))]; |
casiotone401 | 1:981b62bb5c87 | 551 | |
casiotone401 | 1:981b62bb5c87 | 552 | glidecv[4] = glidecv[4] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 1:981b62bb5c87 | 553 | |
casiotone401 | 1:981b62bb5c87 | 554 | break; |
casiotone401 | 1:981b62bb5c87 | 555 | |
casiotone401 | 1:981b62bb5c87 | 556 | case M7: |
casiotone401 | 1:981b62bb5c87 | 557 | |
casiotone401 | 1:981b62bb5c87 | 558 | qcv = calibMap3[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES3 - 1))]; |
casiotone401 | 1:981b62bb5c87 | 559 | |
casiotone401 | 1:981b62bb5c87 | 560 | glidecv[4] = glidecv[4] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 1:981b62bb5c87 | 561 | |
casiotone401 | 1:981b62bb5c87 | 562 | break; |
casiotone401 | 1:981b62bb5c87 | 563 | |
casiotone401 | 1:981b62bb5c87 | 564 | case Min7: |
casiotone401 | 1:981b62bb5c87 | 565 | |
casiotone401 | 1:981b62bb5c87 | 566 | qcv = calibMap4[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES4 - 1))]; |
casiotone401 | 1:981b62bb5c87 | 567 | |
casiotone401 | 1:981b62bb5c87 | 568 | glidecv[4] = glidecv[4] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 1:981b62bb5c87 | 569 | |
casiotone401 | 1:981b62bb5c87 | 570 | break; |
casiotone401 | 1:981b62bb5c87 | 571 | |
casiotone401 | 1:981b62bb5c87 | 572 | case Dor: |
casiotone401 | 1:981b62bb5c87 | 573 | |
casiotone401 | 1:981b62bb5c87 | 574 | qcv = calibMap5[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES5 - 1))]; |
casiotone401 | 1:981b62bb5c87 | 575 | |
casiotone401 | 1:981b62bb5c87 | 576 | glidecv[4] = glidecv[4] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 1:981b62bb5c87 | 577 | |
casiotone401 | 1:981b62bb5c87 | 578 | break; |
casiotone401 | 1:981b62bb5c87 | 579 | |
casiotone401 | 1:981b62bb5c87 | 580 | case Min: |
casiotone401 | 1:981b62bb5c87 | 581 | |
casiotone401 | 1:981b62bb5c87 | 582 | qcv = calibMap6[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES6 - 1))]; |
casiotone401 | 1:981b62bb5c87 | 583 | |
casiotone401 | 1:981b62bb5c87 | 584 | glidecv[4] = glidecv[4] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 1:981b62bb5c87 | 585 | |
casiotone401 | 1:981b62bb5c87 | 586 | break; |
casiotone401 | 1:981b62bb5c87 | 587 | |
casiotone401 | 1:981b62bb5c87 | 588 | case S5th: |
casiotone401 | 1:981b62bb5c87 | 589 | |
casiotone401 | 1:981b62bb5c87 | 590 | qcv = calibMap7[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES7 - 1))]; |
casiotone401 | 1:981b62bb5c87 | 591 | |
casiotone401 | 1:981b62bb5c87 | 592 | glidecv[4] = glidecv[4] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 1:981b62bb5c87 | 593 | |
casiotone401 | 1:981b62bb5c87 | 594 | break; |
casiotone401 | 1:981b62bb5c87 | 595 | |
casiotone401 | 1:981b62bb5c87 | 596 | case Wht: |
casiotone401 | 1:981b62bb5c87 | 597 | |
casiotone401 | 1:981b62bb5c87 | 598 | qcv = calibMap8[(unsigned int)MapFloat(g185_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES8 - 1))]; |
casiotone401 | 1:981b62bb5c87 | 599 | |
casiotone401 | 1:981b62bb5c87 | 600 | glidecv[4] = glidecv[4] * gSlide185[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide185[currentStep]); |
casiotone401 | 1:981b62bb5c87 | 601 | |
casiotone401 | 1:981b62bb5c87 | 602 | break; |
casiotone401 | 1:981b62bb5c87 | 603 | } |
casiotone401 | 1:981b62bb5c87 | 604 | |
casiotone401 | 1:981b62bb5c87 | 605 | if (!gCtrlSW[4]) |
casiotone401 | 1:981b62bb5c87 | 606 | { |
casiotone401 | 1:981b62bb5c87 | 607 | jitter = 0; |
casiotone401 | 1:981b62bb5c87 | 608 | |
casiotone401 | 1:981b62bb5c87 | 609 | } else if (gCtrlSW[4] && jitterCount % 64 == 0) { // ASR Analog Mode |
casiotone401 | 1:981b62bb5c87 | 610 | |
casiotone401 | 1:981b62bb5c87 | 611 | jitter = ANALOG_JITTER; |
casiotone401 | 1:981b62bb5c87 | 612 | } |
casiotone401 | 1:981b62bb5c87 | 613 | |
casiotone401 | 1:981b62bb5c87 | 614 | cv = (unsigned int)(glidecv[4] + jitter); |
casiotone401 | 1:981b62bb5c87 | 615 | |
casiotone401 | 1:981b62bb5c87 | 616 | UpdateCV(WRITE_UPDATE_N, 4, &cv); |
casiotone401 | 1:981b62bb5c87 | 617 | |
casiotone401 | 1:981b62bb5c87 | 618 | for (i = 5; i < channelRange; ++i) |
casiotone401 | 1:981b62bb5c87 | 619 | { |
casiotone401 | 1:981b62bb5c87 | 620 | glidecv[i] = glidecv[i] * gSlide185[currentStep] + shiftcv[i] * (1.0f - gSlide185[currentStep]); |
casiotone401 | 1:981b62bb5c87 | 621 | cv = (unsigned int)(glidecv[i] + jitter); |
casiotone401 | 1:981b62bb5c87 | 622 | |
casiotone401 | 1:981b62bb5c87 | 623 | UpdateCV(WRITE_UPDATE_N, i, &cv); |
casiotone401 | 1:981b62bb5c87 | 624 | } |
casiotone401 | 1:981b62bb5c87 | 625 | |
casiotone401 | 1:981b62bb5c87 | 626 | if (trigger && !triggerState) // trigger ON |
casiotone401 | 1:981b62bb5c87 | 627 | { |
casiotone401 | 1:981b62bb5c87 | 628 | if (gateMode == MULTI) |
casiotone401 | 1:981b62bb5c87 | 629 | { |
casiotone401 | 1:981b62bb5c87 | 630 | gGATES[3] = true; |
casiotone401 | 1:981b62bb5c87 | 631 | |
casiotone401 | 1:981b62bb5c87 | 632 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, M185SEQ)); |
casiotone401 | 1:981b62bb5c87 | 633 | sendMes.setArgs("i", 1); |
casiotone401 | 1:981b62bb5c87 | 634 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 635 | } |
casiotone401 | 1:981b62bb5c87 | 636 | |
casiotone401 | 1:981b62bb5c87 | 637 | stepFoward = triggerState = true; |
casiotone401 | 1:981b62bb5c87 | 638 | |
casiotone401 | 1:981b62bb5c87 | 639 | } else if (!trigger) { // trigger OFF |
casiotone401 | 1:981b62bb5c87 | 640 | |
casiotone401 | 1:981b62bb5c87 | 641 | if (gateMode != HOLD) |
casiotone401 | 1:981b62bb5c87 | 642 | { |
casiotone401 | 1:981b62bb5c87 | 643 | gGATES[3] = false; |
casiotone401 | 1:981b62bb5c87 | 644 | } |
casiotone401 | 1:981b62bb5c87 | 645 | |
casiotone401 | 1:981b62bb5c87 | 646 | if (gateMode == MULTI) |
casiotone401 | 1:981b62bb5c87 | 647 | { |
casiotone401 | 1:981b62bb5c87 | 648 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, M185SEQ)); |
casiotone401 | 1:981b62bb5c87 | 649 | sendMes.setArgs("i", 0); |
casiotone401 | 1:981b62bb5c87 | 650 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 651 | } |
casiotone401 | 1:981b62bb5c87 | 652 | |
casiotone401 | 1:981b62bb5c87 | 653 | triggerState = false; |
casiotone401 | 1:981b62bb5c87 | 654 | } |
casiotone401 | 1:981b62bb5c87 | 655 | |
casiotone401 | 1:981b62bb5c87 | 656 | // check & update touchOSC ctrl parameter |
casiotone401 | 1:981b62bb5c87 | 657 | if (_gateMode[ch] != gGateMode185[ch] * 3 || _pulseCount[ch] != gPulseCount[ch] * 7) |
casiotone401 | 1:981b62bb5c87 | 658 | { |
casiotone401 | 1:981b62bb5c87 | 659 | _gateMode[ch] = (gGateMode185[ch] * 3); |
casiotone401 | 1:981b62bb5c87 | 660 | _pulseCount[ch] = (gPulseCount[ch] * 7); |
casiotone401 | 1:981b62bb5c87 | 661 | |
casiotone401 | 1:981b62bb5c87 | 662 | SendCtrlState(ch, _gateMode[ch], _pulseCount[ch], M185SEQ); |
casiotone401 | 1:981b62bb5c87 | 663 | } |
casiotone401 | 1:981b62bb5c87 | 664 | |
casiotone401 | 1:981b62bb5c87 | 665 | if (reset && !_reset) // Stop & Reset |
casiotone401 | 1:981b62bb5c87 | 666 | { |
casiotone401 | 1:981b62bb5c87 | 667 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, M185SEQ)); |
casiotone401 | 1:981b62bb5c87 | 668 | sendMes.setArgs("i", 0); |
casiotone401 | 1:981b62bb5c87 | 669 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 670 | |
casiotone401 | 1:981b62bb5c87 | 671 | currentStep = 0; |
casiotone401 | 1:981b62bb5c87 | 672 | |
casiotone401 | 1:981b62bb5c87 | 673 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, M185SEQ)); |
casiotone401 | 1:981b62bb5c87 | 674 | sendMes.setArgs("i", 1); |
casiotone401 | 1:981b62bb5c87 | 675 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 676 | |
casiotone401 | 1:981b62bb5c87 | 677 | _reset = true; |
casiotone401 | 1:981b62bb5c87 | 678 | stepFoward = triggerState = false; |
casiotone401 | 1:981b62bb5c87 | 679 | |
casiotone401 | 3:d945a20b1e31 | 680 | } else if (!reset) { |
casiotone401 | 3:d945a20b1e31 | 681 | |
casiotone401 | 3:d945a20b1e31 | 682 | _reset = false; |
casiotone401 | 1:981b62bb5c87 | 683 | } |
casiotone401 | 1:981b62bb5c87 | 684 | |
casiotone401 | 1:981b62bb5c87 | 685 | if (stepFoward) |
casiotone401 | 1:981b62bb5c87 | 686 | { |
casiotone401 | 1:981b62bb5c87 | 687 | if (gateMode != HOLD) // shift CV |
casiotone401 | 1:981b62bb5c87 | 688 | { |
casiotone401 | 1:981b62bb5c87 | 689 | for (j = 5; j < 8; ++j) |
casiotone401 | 1:981b62bb5c87 | 690 | { |
casiotone401 | 1:981b62bb5c87 | 691 | shiftcv[j] = glidecv[j-1]; |
casiotone401 | 1:981b62bb5c87 | 692 | } |
casiotone401 | 1:981b62bb5c87 | 693 | } |
casiotone401 | 1:981b62bb5c87 | 694 | |
casiotone401 | 1:981b62bb5c87 | 695 | --stepCount; |
casiotone401 | 1:981b62bb5c87 | 696 | |
casiotone401 | 1:981b62bb5c87 | 697 | if (stepCount == -1) |
casiotone401 | 1:981b62bb5c87 | 698 | { |
casiotone401 | 1:981b62bb5c87 | 699 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, M185SEQ)); |
casiotone401 | 1:981b62bb5c87 | 700 | sendMes.setArgs("i", 0); |
casiotone401 | 1:981b62bb5c87 | 701 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 702 | |
casiotone401 | 1:981b62bb5c87 | 703 | ++currentStep; |
casiotone401 | 1:981b62bb5c87 | 704 | |
casiotone401 | 1:981b62bb5c87 | 705 | if (gCtrlSW[2]) // 4step break |
casiotone401 | 1:981b62bb5c87 | 706 | { |
casiotone401 | 1:981b62bb5c87 | 707 | resetCount = 3; |
casiotone401 | 1:981b62bb5c87 | 708 | |
casiotone401 | 1:981b62bb5c87 | 709 | } else { |
casiotone401 | 1:981b62bb5c87 | 710 | |
casiotone401 | 1:981b62bb5c87 | 711 | resetCount = gCtrl[5] * 7; |
casiotone401 | 1:981b62bb5c87 | 712 | } |
casiotone401 | 1:981b62bb5c87 | 713 | |
casiotone401 | 1:981b62bb5c87 | 714 | if (_resetCount != resetCount) |
casiotone401 | 1:981b62bb5c87 | 715 | { |
casiotone401 | 1:981b62bb5c87 | 716 | sendMes.setTopAddress(RESET185_COUNTER_ADDRESS); |
casiotone401 | 1:981b62bb5c87 | 717 | sendMes.setArgs("i", (resetCount + 1)); |
casiotone401 | 1:981b62bb5c87 | 718 | osc.sendOsc(&sendMes); |
casiotone401 | 4:fe335dc8d53d | 719 | |
casiotone401 | 4:fe335dc8d53d | 720 | sendMes.setTopAddress("/ctrl6"); |
casiotone401 | 4:fe335dc8d53d | 721 | sendMes.setArgs("f", gCtrl[5]); |
casiotone401 | 4:fe335dc8d53d | 722 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 723 | } |
casiotone401 | 1:981b62bb5c87 | 724 | |
casiotone401 | 1:981b62bb5c87 | 725 | if (currentStep > resetCount) // reset |
casiotone401 | 1:981b62bb5c87 | 726 | { |
casiotone401 | 1:981b62bb5c87 | 727 | currentStep = 0; |
casiotone401 | 1:981b62bb5c87 | 728 | } |
casiotone401 | 1:981b62bb5c87 | 729 | |
casiotone401 | 1:981b62bb5c87 | 730 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, M185SEQ)); |
casiotone401 | 1:981b62bb5c87 | 731 | sendMes.setArgs("i", 1); |
casiotone401 | 1:981b62bb5c87 | 732 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 733 | |
casiotone401 | 1:981b62bb5c87 | 734 | // check Pulse Count & Gate Mode |
casiotone401 | 1:981b62bb5c87 | 735 | stepCount = (gPulseCount[currentStep] * 7); |
casiotone401 | 1:981b62bb5c87 | 736 | |
casiotone401 | 1:981b62bb5c87 | 737 | gateMode = (gGateMode185[currentStep] * 3); |
casiotone401 | 1:981b62bb5c87 | 738 | |
casiotone401 | 1:981b62bb5c87 | 739 | if (gateMode != MUTE) |
casiotone401 | 1:981b62bb5c87 | 740 | { |
casiotone401 | 1:981b62bb5c87 | 741 | gGATES[3] = true; |
casiotone401 | 1:981b62bb5c87 | 742 | } |
casiotone401 | 1:981b62bb5c87 | 743 | |
casiotone401 | 0:cd43a974c54c | 744 | } |
casiotone401 | 0:cd43a974c54c | 745 | |
casiotone401 | 0:cd43a974c54c | 746 | stepFoward = false; |
casiotone401 | 0:cd43a974c54c | 747 | } |
casiotone401 | 0:cd43a974c54c | 748 | |
casiotone401 | 0:cd43a974c54c | 749 | ++ch; |
casiotone401 | 0:cd43a974c54c | 750 | ch &= 0x07; |
casiotone401 | 1:981b62bb5c87 | 751 | |
casiotone401 | 1:981b62bb5c87 | 752 | ++jitterCount; |
casiotone401 | 1:981b62bb5c87 | 753 | jitterCount &= 0x1FF; |
casiotone401 | 0:cd43a974c54c | 754 | } |
casiotone401 | 0:cd43a974c54c | 755 | |
casiotone401 | 0:cd43a974c54c | 756 | //------------------------------------------------------------- |
casiotone401 | 1:981b62bb5c87 | 757 | // 8ch drum track sequecer |
casiotone401 | 3:d945a20b1e31 | 758 | unsigned int BeatsSeq(int trigger, bool reset, bool gatesOff) |
casiotone401 | 1:981b62bb5c87 | 759 | { |
casiotone401 | 1:981b62bb5c87 | 760 | int rndVel; |
casiotone401 | 1:981b62bb5c87 | 761 | static bool triggerState = false; |
casiotone401 | 1:981b62bb5c87 | 762 | static bool stepFoward = false; |
casiotone401 | 1:981b62bb5c87 | 763 | static bool _reset = false; |
casiotone401 | 1:981b62bb5c87 | 764 | static uint8_t currentStep; |
casiotone401 | 1:981b62bb5c87 | 765 | static int stepCount; |
casiotone401 | 1:981b62bb5c87 | 766 | static int _resetCount, resetCount; |
casiotone401 | 1:981b62bb5c87 | 767 | static uint8_t _pulseCount[8]; |
casiotone401 | 1:981b62bb5c87 | 768 | static uint8_t ch; |
casiotone401 | 1:981b62bb5c87 | 769 | static float decay[8] = {1}; |
casiotone401 | 1:981b62bb5c87 | 770 | |
casiotone401 | 1:981b62bb5c87 | 771 | |
casiotone401 | 1:981b62bb5c87 | 772 | if (trigger && !triggerState) // trigger ON |
casiotone401 | 1:981b62bb5c87 | 773 | { |
casiotone401 | 1:981b62bb5c87 | 774 | if (stepCount != 0) |
casiotone401 | 1:981b62bb5c87 | 775 | { |
casiotone401 | 1:981b62bb5c87 | 776 | for (ch = 0; ch < 8; ++ch) |
casiotone401 | 1:981b62bb5c87 | 777 | { |
casiotone401 | 1:981b62bb5c87 | 778 | if (gBeatsMatrix[ch][currentStep]) |
casiotone401 | 1:981b62bb5c87 | 779 | { |
casiotone401 | 1:981b62bb5c87 | 780 | midi.sendNoteOn(0, 127, (ch + 1)); // volca sample trriger on |
casiotone401 | 1:981b62bb5c87 | 781 | |
casiotone401 | 1:981b62bb5c87 | 782 | if (!gatesOff && ch < 4) |
casiotone401 | 1:981b62bb5c87 | 783 | { |
casiotone401 | 1:981b62bb5c87 | 784 | gGATES[ch] = true; |
casiotone401 | 1:981b62bb5c87 | 785 | } |
casiotone401 | 1:981b62bb5c87 | 786 | } |
casiotone401 | 1:981b62bb5c87 | 787 | } |
casiotone401 | 1:981b62bb5c87 | 788 | |
casiotone401 | 1:981b62bb5c87 | 789 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ)); |
casiotone401 | 1:981b62bb5c87 | 790 | sendMes.setArgs("i", 1); |
casiotone401 | 1:981b62bb5c87 | 791 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 792 | } |
casiotone401 | 1:981b62bb5c87 | 793 | |
casiotone401 | 1:981b62bb5c87 | 794 | stepFoward = triggerState = true; |
casiotone401 | 1:981b62bb5c87 | 795 | |
casiotone401 | 1:981b62bb5c87 | 796 | } else if (!trigger) { // trigger OFF |
casiotone401 | 1:981b62bb5c87 | 797 | |
casiotone401 | 1:981b62bb5c87 | 798 | if (!gatesOff) |
casiotone401 | 1:981b62bb5c87 | 799 | { |
casiotone401 | 1:981b62bb5c87 | 800 | gGATES[0] = gGATES[1] = gGATES[2] = gGATES[3] = false; |
casiotone401 | 1:981b62bb5c87 | 801 | } |
casiotone401 | 1:981b62bb5c87 | 802 | |
casiotone401 | 1:981b62bb5c87 | 803 | if (stepCount != 0) |
casiotone401 | 1:981b62bb5c87 | 804 | { |
casiotone401 | 1:981b62bb5c87 | 805 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ)); |
casiotone401 | 1:981b62bb5c87 | 806 | sendMes.setArgs("i", 0); |
casiotone401 | 1:981b62bb5c87 | 807 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 808 | } |
casiotone401 | 1:981b62bb5c87 | 809 | |
casiotone401 | 1:981b62bb5c87 | 810 | triggerState = false; |
casiotone401 | 1:981b62bb5c87 | 811 | } |
casiotone401 | 1:981b62bb5c87 | 812 | |
casiotone401 | 1:981b62bb5c87 | 813 | // check & update touchOSC ctrl parameter |
casiotone401 | 1:981b62bb5c87 | 814 | for (ch = 0; ch < 16; ++ch) |
casiotone401 | 1:981b62bb5c87 | 815 | { |
casiotone401 | 1:981b62bb5c87 | 816 | if (_pulseCount[ch] != gPulseCountBeats[ch] * 7) |
casiotone401 | 1:981b62bb5c87 | 817 | { |
casiotone401 | 1:981b62bb5c87 | 818 | _pulseCount[ch] = (gPulseCountBeats[ch] * 7); |
casiotone401 | 1:981b62bb5c87 | 819 | |
casiotone401 | 1:981b62bb5c87 | 820 | SendCtrlState(ch, 0, _pulseCount[ch], BEATSSEQ); |
casiotone401 | 1:981b62bb5c87 | 821 | } |
casiotone401 | 1:981b62bb5c87 | 822 | } |
casiotone401 | 1:981b62bb5c87 | 823 | |
casiotone401 | 1:981b62bb5c87 | 824 | if (reset && !_reset) // Stop & Reset |
casiotone401 | 1:981b62bb5c87 | 825 | {// current step indeicator Reset |
casiotone401 | 1:981b62bb5c87 | 826 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ)); |
casiotone401 | 1:981b62bb5c87 | 827 | sendMes.setArgs("i", 0); |
casiotone401 | 1:981b62bb5c87 | 828 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 829 | |
casiotone401 | 1:981b62bb5c87 | 830 | currentStep = 0; |
casiotone401 | 1:981b62bb5c87 | 831 | |
casiotone401 | 1:981b62bb5c87 | 832 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ)); |
casiotone401 | 1:981b62bb5c87 | 833 | sendMes.setArgs("i", 1); |
casiotone401 | 1:981b62bb5c87 | 834 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 835 | |
casiotone401 | 1:981b62bb5c87 | 836 | _reset = true; |
casiotone401 | 1:981b62bb5c87 | 837 | stepFoward = triggerState = false; |
casiotone401 | 1:981b62bb5c87 | 838 | |
casiotone401 | 1:981b62bb5c87 | 839 | } else if (!reset) { |
casiotone401 | 0:cd43a974c54c | 840 | |
casiotone401 | 1:981b62bb5c87 | 841 | _reset = false; |
casiotone401 | 1:981b62bb5c87 | 842 | } |
casiotone401 | 1:981b62bb5c87 | 843 | |
casiotone401 | 1:981b62bb5c87 | 844 | if (stepFoward) |
casiotone401 | 1:981b62bb5c87 | 845 | { |
casiotone401 | 1:981b62bb5c87 | 846 | --stepCount; |
casiotone401 | 1:981b62bb5c87 | 847 | |
casiotone401 | 1:981b62bb5c87 | 848 | if (stepCount == -1) |
casiotone401 | 1:981b62bb5c87 | 849 | {// last current step indeicator ON |
casiotone401 | 1:981b62bb5c87 | 850 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ)); |
casiotone401 | 1:981b62bb5c87 | 851 | sendMes.setArgs("i", 0); |
casiotone401 | 1:981b62bb5c87 | 852 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 853 | |
casiotone401 | 1:981b62bb5c87 | 854 | ++currentStep; |
casiotone401 | 1:981b62bb5c87 | 855 | |
casiotone401 | 1:981b62bb5c87 | 856 | if (gCtrlSW[2]) // 4step break |
casiotone401 | 1:981b62bb5c87 | 857 | { |
casiotone401 | 1:981b62bb5c87 | 858 | resetCount = 3; |
casiotone401 | 1:981b62bb5c87 | 859 | |
casiotone401 | 1:981b62bb5c87 | 860 | } else { |
casiotone401 | 1:981b62bb5c87 | 861 | |
casiotone401 | 1:981b62bb5c87 | 862 | resetCount = gCtrl[7] * 15; |
casiotone401 | 1:981b62bb5c87 | 863 | } |
casiotone401 | 1:981b62bb5c87 | 864 | |
casiotone401 | 1:981b62bb5c87 | 865 | if (_resetCount != resetCount) |
casiotone401 | 1:981b62bb5c87 | 866 | { |
casiotone401 | 1:981b62bb5c87 | 867 | sendMes.setTopAddress(BEATS_COUNTER_ADDRESS); |
casiotone401 | 1:981b62bb5c87 | 868 | sendMes.setArgs("i", (resetCount + 1)); |
casiotone401 | 1:981b62bb5c87 | 869 | osc.sendOsc(&sendMes); |
casiotone401 | 4:fe335dc8d53d | 870 | |
casiotone401 | 4:fe335dc8d53d | 871 | sendMes.setTopAddress("/ctrl8"); |
casiotone401 | 4:fe335dc8d53d | 872 | sendMes.setArgs("f", gCtrl[7]); |
casiotone401 | 4:fe335dc8d53d | 873 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 874 | } |
casiotone401 | 1:981b62bb5c87 | 875 | |
casiotone401 | 1:981b62bb5c87 | 876 | if (currentStep > resetCount) // reset |
casiotone401 | 1:981b62bb5c87 | 877 | { |
casiotone401 | 1:981b62bb5c87 | 878 | currentStep = 0; |
casiotone401 | 1:981b62bb5c87 | 879 | } |
casiotone401 | 1:981b62bb5c87 | 880 | |
casiotone401 | 1:981b62bb5c87 | 881 | // current step indeicator ON |
casiotone401 | 1:981b62bb5c87 | 882 | sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ)); |
casiotone401 | 1:981b62bb5c87 | 883 | sendMes.setArgs("i", 1); |
casiotone401 | 1:981b62bb5c87 | 884 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 885 | |
casiotone401 | 1:981b62bb5c87 | 886 | // check Pulse Count & Gate Mode |
casiotone401 | 1:981b62bb5c87 | 887 | stepCount = (gPulseCountBeats[currentStep] * 7); |
casiotone401 | 1:981b62bb5c87 | 888 | |
casiotone401 | 1:981b62bb5c87 | 889 | for (ch = 0; ch < 8; ++ch) |
casiotone401 | 1:981b62bb5c87 | 890 | { |
casiotone401 | 1:981b62bb5c87 | 891 | if (gBeatsMatrix[ch][currentStep]) |
casiotone401 | 1:981b62bb5c87 | 892 | { |
casiotone401 | 1:981b62bb5c87 | 893 | if (gCtrlSW[5]) //random Vel Mode /ctrlsw6 |
casiotone401 | 1:981b62bb5c87 | 894 | { |
casiotone401 | 1:981b62bb5c87 | 895 | if (ch == 0 || ch == 2) |
casiotone401 | 1:981b62bb5c87 | 896 | { |
casiotone401 | 1:981b62bb5c87 | 897 | |
casiotone401 | 1:981b62bb5c87 | 898 | rndVel = 95 - (rand() % 14); // random velocity ch1, ch3 |
casiotone401 | 1:981b62bb5c87 | 899 | |
casiotone401 | 1:981b62bb5c87 | 900 | } else if (ch == 1 || ch == 3) { |
casiotone401 | 1:981b62bb5c87 | 901 | |
casiotone401 | 1:981b62bb5c87 | 902 | rndVel = 80 - (rand() % 10); // random velocity ch2, ch4 |
casiotone401 | 1:981b62bb5c87 | 903 | |
casiotone401 | 1:981b62bb5c87 | 904 | } else { |
casiotone401 | 1:981b62bb5c87 | 905 | |
casiotone401 | 1:981b62bb5c87 | 906 | rndVel = 80; |
casiotone401 | 1:981b62bb5c87 | 907 | } |
casiotone401 | 1:981b62bb5c87 | 908 | |
casiotone401 | 1:981b62bb5c87 | 909 | } else { |
casiotone401 | 1:981b62bb5c87 | 910 | |
casiotone401 | 1:981b62bb5c87 | 911 | rndVel = 95; |
casiotone401 | 1:981b62bb5c87 | 912 | } |
casiotone401 | 1:981b62bb5c87 | 913 | |
casiotone401 | 1:981b62bb5c87 | 914 | if (gBeatsMatrix[8][currentStep]) // ch9 accent Velocity +20 |
casiotone401 | 1:981b62bb5c87 | 915 | { |
casiotone401 | 1:981b62bb5c87 | 916 | rndVel += 32; |
casiotone401 | 1:981b62bb5c87 | 917 | } |
casiotone401 | 1:981b62bb5c87 | 918 | |
casiotone401 | 1:981b62bb5c87 | 919 | midi.sendControlChange(0x07, (gBeatsLevel[ch] * rndVel), (ch + 1)); // volca sample Level |
casiotone401 | 1:981b62bb5c87 | 920 | |
casiotone401 | 1:981b62bb5c87 | 921 | if (decay[ch] != gBeatsDecay[ch]) |
casiotone401 | 1:981b62bb5c87 | 922 | { |
casiotone401 | 1:981b62bb5c87 | 923 | decay[ch] = gBeatsDecay[ch]; |
casiotone401 | 1:981b62bb5c87 | 924 | midi.sendControlChange(0x30, (decay[ch] * 127), (ch + 1)); // volca sample Amp EG Decay |
casiotone401 | 1:981b62bb5c87 | 925 | } |
casiotone401 | 1:981b62bb5c87 | 926 | |
casiotone401 | 1:981b62bb5c87 | 927 | midi.sendNoteOn(0, 127, (ch + 1)); // volca sample trriger on |
casiotone401 | 1:981b62bb5c87 | 928 | |
casiotone401 | 1:981b62bb5c87 | 929 | if (!gatesOff && ch < 4) |
casiotone401 | 1:981b62bb5c87 | 930 | { |
casiotone401 | 1:981b62bb5c87 | 931 | gGATES[ch] = true; |
casiotone401 | 1:981b62bb5c87 | 932 | } |
casiotone401 | 1:981b62bb5c87 | 933 | } |
casiotone401 | 1:981b62bb5c87 | 934 | } |
casiotone401 | 1:981b62bb5c87 | 935 | } |
casiotone401 | 1:981b62bb5c87 | 936 | |
casiotone401 | 1:981b62bb5c87 | 937 | stepFoward = false; |
casiotone401 | 1:981b62bb5c87 | 938 | } |
casiotone401 | 3:d945a20b1e31 | 939 | |
casiotone401 | 3:d945a20b1e31 | 940 | return triggerState; |
casiotone401 | 1:981b62bb5c87 | 941 | |
casiotone401 | 1:981b62bb5c87 | 942 | } |
casiotone401 | 1:981b62bb5c87 | 943 | |
casiotone401 | 1:981b62bb5c87 | 944 | //------------------------------------------------------------- |
casiotone401 | 1:981b62bb5c87 | 945 | // shift cv seq ch1 ~ ch4 m185 seq ch5 ~ ch8 |
casiotone401 | 1:981b62bb5c87 | 946 | |
casiotone401 | 1:981b62bb5c87 | 947 | void PolyCVSeq(int trigger, bool reset) |
casiotone401 | 1:981b62bb5c87 | 948 | { |
casiotone401 | 1:981b62bb5c87 | 949 | ShiftCVSeq(trigger, reset, CV_CHANNEL4); |
casiotone401 | 1:981b62bb5c87 | 950 | PolyM185Seq(trigger, reset, CV_CHANNEL8); |
casiotone401 | 1:981b62bb5c87 | 951 | } |
casiotone401 | 1:981b62bb5c87 | 952 | |
casiotone401 | 1:981b62bb5c87 | 953 | //------------------------------------------------------------- |
casiotone401 | 1:981b62bb5c87 | 954 | // Send Sequencer Status to touchOSC |
casiotone401 | 1:981b62bb5c87 | 955 | |
casiotone401 | 1:981b62bb5c87 | 956 | void SendCtrlState(uint8_t step, uint8_t gateMode, uint8_t stepCount, uint8_t mode) |
casiotone401 | 0:cd43a974c54c | 957 | { |
casiotone401 | 0:cd43a974c54c | 958 | char pulseAddress[10] = PULSE_COUNT_ADDRESS; |
casiotone401 | 1:981b62bb5c87 | 959 | char beatsPulseAddress[10] = BEATS_PULSE_COUNT_ADDRESS; |
casiotone401 | 0:cd43a974c54c | 960 | char gateModeAddress[10] = GATE_MODE_ADDRESS; |
casiotone401 | 1:981b62bb5c87 | 961 | char gate185ModeAddress[10] = GATE185_MODE_ADDRESS; |
casiotone401 | 0:cd43a974c54c | 962 | char currentStep[2]; |
casiotone401 | 0:cd43a974c54c | 963 | |
casiotone401 | 0:cd43a974c54c | 964 | sprintf(currentStep, "%d", step + 1); |
casiotone401 | 0:cd43a974c54c | 965 | |
casiotone401 | 0:cd43a974c54c | 966 | if(stepCount != 8) |
casiotone401 | 0:cd43a974c54c | 967 | { |
casiotone401 | 1:981b62bb5c87 | 968 | if (mode == BEATSSEQ) |
casiotone401 | 1:981b62bb5c87 | 969 | { |
casiotone401 | 1:981b62bb5c87 | 970 | strcat(beatsPulseAddress, currentStep); |
casiotone401 | 1:981b62bb5c87 | 971 | sendMes.setTopAddress(beatsPulseAddress); |
casiotone401 | 1:981b62bb5c87 | 972 | |
casiotone401 | 1:981b62bb5c87 | 973 | } else { |
casiotone401 | 1:981b62bb5c87 | 974 | |
casiotone401 | 1:981b62bb5c87 | 975 | strcat(pulseAddress, currentStep); |
casiotone401 | 1:981b62bb5c87 | 976 | sendMes.setTopAddress(pulseAddress); |
casiotone401 | 1:981b62bb5c87 | 977 | } |
casiotone401 | 1:981b62bb5c87 | 978 | |
casiotone401 | 0:cd43a974c54c | 979 | sendMes.setArgs("i", (stepCount + 1)); |
casiotone401 | 0:cd43a974c54c | 980 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 981 | } |
casiotone401 | 1:981b62bb5c87 | 982 | |
casiotone401 | 1:981b62bb5c87 | 983 | if (mode != BEATSSEQ) |
casiotone401 | 1:981b62bb5c87 | 984 | { |
casiotone401 | 1:981b62bb5c87 | 985 | switch (mode) |
casiotone401 | 0:cd43a974c54c | 986 | { |
casiotone401 | 1:981b62bb5c87 | 987 | case SHIFTSEQ: |
casiotone401 | 0:cd43a974c54c | 988 | |
casiotone401 | 1:981b62bb5c87 | 989 | strcat(gateModeAddress, currentStep); |
casiotone401 | 1:981b62bb5c87 | 990 | sendMes.setTopAddress(gateModeAddress); |
casiotone401 | 0:cd43a974c54c | 991 | break; |
casiotone401 | 1:981b62bb5c87 | 992 | |
casiotone401 | 1:981b62bb5c87 | 993 | case M185SEQ: |
casiotone401 | 0:cd43a974c54c | 994 | |
casiotone401 | 1:981b62bb5c87 | 995 | strcat(gate185ModeAddress, currentStep); |
casiotone401 | 1:981b62bb5c87 | 996 | sendMes.setTopAddress(gate185ModeAddress); |
casiotone401 | 0:cd43a974c54c | 997 | break; |
casiotone401 | 0:cd43a974c54c | 998 | |
casiotone401 | 1:981b62bb5c87 | 999 | default: |
casiotone401 | 0:cd43a974c54c | 1000 | break; |
casiotone401 | 0:cd43a974c54c | 1001 | } |
casiotone401 | 0:cd43a974c54c | 1002 | |
casiotone401 | 1:981b62bb5c87 | 1003 | switch (gateMode) |
casiotone401 | 1:981b62bb5c87 | 1004 | { |
casiotone401 | 1:981b62bb5c87 | 1005 | case SINGLE: |
casiotone401 | 1:981b62bb5c87 | 1006 | |
casiotone401 | 1:981b62bb5c87 | 1007 | sendMes.setArgs("s", "|"); |
casiotone401 | 1:981b62bb5c87 | 1008 | |
casiotone401 | 1:981b62bb5c87 | 1009 | break; |
casiotone401 | 1:981b62bb5c87 | 1010 | |
casiotone401 | 1:981b62bb5c87 | 1011 | case MUTE: |
casiotone401 | 1:981b62bb5c87 | 1012 | |
casiotone401 | 1:981b62bb5c87 | 1013 | sendMes.setArgs("s", "O"); |
casiotone401 | 1:981b62bb5c87 | 1014 | |
casiotone401 | 1:981b62bb5c87 | 1015 | break; |
casiotone401 | 1:981b62bb5c87 | 1016 | |
casiotone401 | 1:981b62bb5c87 | 1017 | case MULTI: |
casiotone401 | 1:981b62bb5c87 | 1018 | |
casiotone401 | 1:981b62bb5c87 | 1019 | sendMes.setArgs("s", "||"); |
casiotone401 | 1:981b62bb5c87 | 1020 | |
casiotone401 | 1:981b62bb5c87 | 1021 | break; |
casiotone401 | 1:981b62bb5c87 | 1022 | |
casiotone401 | 1:981b62bb5c87 | 1023 | case HOLD: |
casiotone401 | 1:981b62bb5c87 | 1024 | |
casiotone401 | 1:981b62bb5c87 | 1025 | sendMes.setArgs("s", "|-"); |
casiotone401 | 1:981b62bb5c87 | 1026 | |
casiotone401 | 1:981b62bb5c87 | 1027 | break; |
casiotone401 | 1:981b62bb5c87 | 1028 | } |
casiotone401 | 1:981b62bb5c87 | 1029 | |
casiotone401 | 1:981b62bb5c87 | 1030 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 1031 | } |
casiotone401 | 1:981b62bb5c87 | 1032 | |
casiotone401 | 0:cd43a974c54c | 1033 | } |
casiotone401 | 0:cd43a974c54c | 1034 | |
casiotone401 | 0:cd43a974c54c | 1035 |