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