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