OSCtoCV Library

Dependents:   OSCtoCVConverter

Committer:
casiotone401
Date:
Thu Feb 25 11:21:37 2016 +0000
Revision:
6:7fb15b1b5459
Parent:
5:abe335652add
minor change

Who changed what in which revision?

UserRevisionLine numberNew 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 6:7fb15b1b5459 12 void ShiftCVSeq(int trigger, bool reset, uint8_t 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 6:7fb15b1b5459 250 void M185Seq(int trigger, bool reset, uint8_t 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 6:7fb15b1b5459 499 void PolyM185Seq(int trigger, bool reset, uint8_t 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 6:7fb15b1b5459 736 // shift cv seq ch1 ~ ch4 m185 seq ch5 ~ ch8
casiotone401 6:7fb15b1b5459 737
casiotone401 6:7fb15b1b5459 738 void PolyCVSeq(int trigger, bool reset)
casiotone401 6:7fb15b1b5459 739 {
casiotone401 6:7fb15b1b5459 740 ShiftCVSeq(trigger, reset, CV_CHANNEL4);
casiotone401 6:7fb15b1b5459 741 PolyM185Seq(trigger, reset, CV_CHANNEL8);
casiotone401 6:7fb15b1b5459 742 }
casiotone401 6:7fb15b1b5459 743
casiotone401 6:7fb15b1b5459 744 //-------------------------------------------------------------
casiotone401 1:981b62bb5c87 745 // 8ch drum track sequecer
casiotone401 6:7fb15b1b5459 746 bool BeatsSeq(int trigger, bool reset, bool gatesOff)
casiotone401 1:981b62bb5c87 747 {
casiotone401 1:981b62bb5c87 748 int rndVel;
casiotone401 1:981b62bb5c87 749 static bool triggerState = false;
casiotone401 1:981b62bb5c87 750 static bool stepFoward = false;
casiotone401 1:981b62bb5c87 751 static bool _reset = false;
casiotone401 1:981b62bb5c87 752 static uint8_t currentStep;
casiotone401 1:981b62bb5c87 753 static int stepCount;
casiotone401 5:abe335652add 754 static int resetCount;
casiotone401 1:981b62bb5c87 755 static uint8_t _pulseCount[8];
casiotone401 1:981b62bb5c87 756 static uint8_t ch;
casiotone401 1:981b62bb5c87 757 static float decay[8] = {1};
casiotone401 1:981b62bb5c87 758
casiotone401 1:981b62bb5c87 759 if (trigger && !triggerState) // trigger ON
casiotone401 1:981b62bb5c87 760 {
casiotone401 1:981b62bb5c87 761 if (stepCount != 0)
casiotone401 1:981b62bb5c87 762 {
casiotone401 1:981b62bb5c87 763 for (ch = 0; ch < 8; ++ch)
casiotone401 1:981b62bb5c87 764 {
casiotone401 1:981b62bb5c87 765 if (gBeatsMatrix[ch][currentStep])
casiotone401 1:981b62bb5c87 766 {
casiotone401 1:981b62bb5c87 767 midi.sendNoteOn(0, 127, (ch + 1)); // volca sample trriger on
casiotone401 1:981b62bb5c87 768
casiotone401 1:981b62bb5c87 769 if (!gatesOff && ch < 4)
casiotone401 1:981b62bb5c87 770 {
casiotone401 1:981b62bb5c87 771 gGATES[ch] = true;
casiotone401 1:981b62bb5c87 772 }
casiotone401 1:981b62bb5c87 773 }
casiotone401 1:981b62bb5c87 774 }
casiotone401 1:981b62bb5c87 775
casiotone401 1:981b62bb5c87 776 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ));
casiotone401 1:981b62bb5c87 777 sendMes.setArgs("i", 1);
casiotone401 1:981b62bb5c87 778 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 779 }
casiotone401 1:981b62bb5c87 780
casiotone401 1:981b62bb5c87 781 stepFoward = triggerState = true;
casiotone401 1:981b62bb5c87 782
casiotone401 1:981b62bb5c87 783 } else if (!trigger) { // trigger OFF
casiotone401 1:981b62bb5c87 784
casiotone401 1:981b62bb5c87 785 if (!gatesOff)
casiotone401 1:981b62bb5c87 786 {
casiotone401 1:981b62bb5c87 787 gGATES[0] = gGATES[1] = gGATES[2] = gGATES[3] = false;
casiotone401 1:981b62bb5c87 788 }
casiotone401 1:981b62bb5c87 789
casiotone401 1:981b62bb5c87 790 if (stepCount != 0)
casiotone401 1:981b62bb5c87 791 {
casiotone401 1:981b62bb5c87 792 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ));
casiotone401 1:981b62bb5c87 793 sendMes.setArgs("i", 0);
casiotone401 1:981b62bb5c87 794 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 795 }
casiotone401 1:981b62bb5c87 796
casiotone401 1:981b62bb5c87 797 triggerState = false;
casiotone401 1:981b62bb5c87 798 }
casiotone401 1:981b62bb5c87 799
casiotone401 1:981b62bb5c87 800 // check & update touchOSC ctrl parameter
casiotone401 1:981b62bb5c87 801 for (ch = 0; ch < 16; ++ch)
casiotone401 1:981b62bb5c87 802 {
casiotone401 1:981b62bb5c87 803 if (_pulseCount[ch] != gPulseCountBeats[ch] * 7)
casiotone401 1:981b62bb5c87 804 {
casiotone401 1:981b62bb5c87 805 _pulseCount[ch] = (gPulseCountBeats[ch] * 7);
casiotone401 1:981b62bb5c87 806
casiotone401 1:981b62bb5c87 807 SendCtrlState(ch, 0, _pulseCount[ch], BEATSSEQ);
casiotone401 1:981b62bb5c87 808 }
casiotone401 1:981b62bb5c87 809 }
casiotone401 1:981b62bb5c87 810
casiotone401 1:981b62bb5c87 811 if (reset && !_reset) // Stop & Reset
casiotone401 1:981b62bb5c87 812 {// current step indeicator Reset
casiotone401 1:981b62bb5c87 813 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ));
casiotone401 1:981b62bb5c87 814 sendMes.setArgs("i", 0);
casiotone401 1:981b62bb5c87 815 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 816
casiotone401 1:981b62bb5c87 817 currentStep = 0;
casiotone401 1:981b62bb5c87 818
casiotone401 1:981b62bb5c87 819 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ));
casiotone401 1:981b62bb5c87 820 sendMes.setArgs("i", 1);
casiotone401 1:981b62bb5c87 821 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 822
casiotone401 1:981b62bb5c87 823 _reset = true;
casiotone401 1:981b62bb5c87 824 stepFoward = triggerState = false;
casiotone401 1:981b62bb5c87 825
casiotone401 1:981b62bb5c87 826 } else if (!reset) {
casiotone401 0:cd43a974c54c 827
casiotone401 1:981b62bb5c87 828 _reset = false;
casiotone401 1:981b62bb5c87 829 }
casiotone401 1:981b62bb5c87 830
casiotone401 1:981b62bb5c87 831 if (stepFoward)
casiotone401 1:981b62bb5c87 832 {
casiotone401 1:981b62bb5c87 833 --stepCount;
casiotone401 1:981b62bb5c87 834
casiotone401 1:981b62bb5c87 835 if (stepCount == -1)
casiotone401 1:981b62bb5c87 836 {// last current step indeicator ON
casiotone401 1:981b62bb5c87 837 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ));
casiotone401 1:981b62bb5c87 838 sendMes.setArgs("i", 0);
casiotone401 1:981b62bb5c87 839 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 840
casiotone401 1:981b62bb5c87 841 ++currentStep;
casiotone401 1:981b62bb5c87 842
casiotone401 1:981b62bb5c87 843 if (gCtrlSW[2]) // 4step break
casiotone401 1:981b62bb5c87 844 {
casiotone401 1:981b62bb5c87 845 resetCount = 3;
casiotone401 1:981b62bb5c87 846
casiotone401 1:981b62bb5c87 847 } else {
casiotone401 1:981b62bb5c87 848
casiotone401 1:981b62bb5c87 849 resetCount = gCtrl[7] * 15;
casiotone401 1:981b62bb5c87 850 }
casiotone401 1:981b62bb5c87 851
casiotone401 5:abe335652add 852 CheckResetCount(resetCount, BEATSSEQ);
casiotone401 1:981b62bb5c87 853
casiotone401 1:981b62bb5c87 854 if (currentStep > resetCount) // reset
casiotone401 1:981b62bb5c87 855 {
casiotone401 1:981b62bb5c87 856 currentStep = 0;
casiotone401 1:981b62bb5c87 857 }
casiotone401 1:981b62bb5c87 858
casiotone401 1:981b62bb5c87 859 // current step indeicator ON
casiotone401 1:981b62bb5c87 860 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ));
casiotone401 1:981b62bb5c87 861 sendMes.setArgs("i", 1);
casiotone401 1:981b62bb5c87 862 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 863
casiotone401 1:981b62bb5c87 864 // check Pulse Count & Gate Mode
casiotone401 1:981b62bb5c87 865 stepCount = (gPulseCountBeats[currentStep] * 7);
casiotone401 1:981b62bb5c87 866
casiotone401 1:981b62bb5c87 867 for (ch = 0; ch < 8; ++ch)
casiotone401 1:981b62bb5c87 868 {
casiotone401 1:981b62bb5c87 869 if (gBeatsMatrix[ch][currentStep])
casiotone401 1:981b62bb5c87 870 {
casiotone401 1:981b62bb5c87 871 if (gCtrlSW[5]) //random Vel Mode /ctrlsw6
casiotone401 1:981b62bb5c87 872 {
casiotone401 1:981b62bb5c87 873 if (ch == 0 || ch == 2)
casiotone401 1:981b62bb5c87 874 {
casiotone401 1:981b62bb5c87 875
casiotone401 1:981b62bb5c87 876 rndVel = 95 - (rand() % 14); // random velocity ch1, ch3
casiotone401 1:981b62bb5c87 877
casiotone401 1:981b62bb5c87 878 } else if (ch == 1 || ch == 3) {
casiotone401 1:981b62bb5c87 879
casiotone401 1:981b62bb5c87 880 rndVel = 80 - (rand() % 10); // random velocity ch2, ch4
casiotone401 1:981b62bb5c87 881
casiotone401 1:981b62bb5c87 882 } else {
casiotone401 1:981b62bb5c87 883
casiotone401 1:981b62bb5c87 884 rndVel = 80;
casiotone401 1:981b62bb5c87 885 }
casiotone401 1:981b62bb5c87 886
casiotone401 1:981b62bb5c87 887 } else {
casiotone401 1:981b62bb5c87 888
casiotone401 1:981b62bb5c87 889 rndVel = 95;
casiotone401 1:981b62bb5c87 890 }
casiotone401 1:981b62bb5c87 891
casiotone401 1:981b62bb5c87 892 if (gBeatsMatrix[8][currentStep]) // ch9 accent Velocity +20
casiotone401 1:981b62bb5c87 893 {
casiotone401 1:981b62bb5c87 894 rndVel += 32;
casiotone401 1:981b62bb5c87 895 }
casiotone401 1:981b62bb5c87 896
casiotone401 1:981b62bb5c87 897 midi.sendControlChange(0x07, (gBeatsLevel[ch] * rndVel), (ch + 1)); // volca sample Level
casiotone401 1:981b62bb5c87 898
casiotone401 1:981b62bb5c87 899 if (decay[ch] != gBeatsDecay[ch])
casiotone401 1:981b62bb5c87 900 {
casiotone401 1:981b62bb5c87 901 decay[ch] = gBeatsDecay[ch];
casiotone401 1:981b62bb5c87 902 midi.sendControlChange(0x30, (decay[ch] * 127), (ch + 1)); // volca sample Amp EG Decay
casiotone401 1:981b62bb5c87 903 }
casiotone401 1:981b62bb5c87 904
casiotone401 1:981b62bb5c87 905 midi.sendNoteOn(0, 127, (ch + 1)); // volca sample trriger on
casiotone401 1:981b62bb5c87 906
casiotone401 1:981b62bb5c87 907 if (!gatesOff && ch < 4)
casiotone401 1:981b62bb5c87 908 {
casiotone401 1:981b62bb5c87 909 gGATES[ch] = true;
casiotone401 1:981b62bb5c87 910 }
casiotone401 1:981b62bb5c87 911 }
casiotone401 1:981b62bb5c87 912 }
casiotone401 1:981b62bb5c87 913 }
casiotone401 1:981b62bb5c87 914
casiotone401 1:981b62bb5c87 915 stepFoward = false;
casiotone401 1:981b62bb5c87 916 }
casiotone401 3:d945a20b1e31 917
casiotone401 3:d945a20b1e31 918 return triggerState;
casiotone401 1:981b62bb5c87 919
casiotone401 1:981b62bb5c87 920 }
casiotone401 1:981b62bb5c87 921
casiotone401 1:981b62bb5c87 922 //-------------------------------------------------------------
casiotone401 5:abe335652add 923 // check reset count & send osc
casiotone401 5:abe335652add 924
casiotone401 5:abe335652add 925 void CheckResetCount(uint8_t resetCount, uint8_t mode)
casiotone401 5:abe335652add 926 {
casiotone401 5:abe335652add 927 static uint8_t _resetCountShift, _resetCount185, _resetCountBeats;
casiotone401 5:abe335652add 928
casiotone401 5:abe335652add 929 switch (mode)
casiotone401 5:abe335652add 930 {
casiotone401 5:abe335652add 931 case SHIFTSEQ:
casiotone401 5:abe335652add 932
casiotone401 5:abe335652add 933 if (_resetCountShift != resetCount)
casiotone401 5:abe335652add 934 {
casiotone401 5:abe335652add 935 sendMes.setTopAddress(RESET_COUNTER_ADDRESS);
casiotone401 5:abe335652add 936 sendMes.setArgs("i", (resetCount + 1));
casiotone401 5:abe335652add 937 osc.sendOsc(&sendMes);
casiotone401 5:abe335652add 938
casiotone401 5:abe335652add 939 sendMes.setTopAddress("/ctrl5");
casiotone401 5:abe335652add 940 sendMes.setArgs("f", gCtrl[4]);
casiotone401 5:abe335652add 941 osc.sendOsc(&sendMes);
casiotone401 5:abe335652add 942
casiotone401 5:abe335652add 943 _resetCountShift = resetCount;
casiotone401 5:abe335652add 944 }
casiotone401 5:abe335652add 945 break;
casiotone401 5:abe335652add 946
casiotone401 5:abe335652add 947 case M185SEQ:
casiotone401 5:abe335652add 948
casiotone401 5:abe335652add 949 if (_resetCount185 != resetCount)
casiotone401 5:abe335652add 950 {
casiotone401 5:abe335652add 951 sendMes.setTopAddress(RESET185_COUNTER_ADDRESS);
casiotone401 5:abe335652add 952 sendMes.setArgs("i", (resetCount + 1));
casiotone401 5:abe335652add 953 osc.sendOsc(&sendMes);
casiotone401 5:abe335652add 954
casiotone401 5:abe335652add 955 sendMes.setTopAddress("/ctrl6");
casiotone401 5:abe335652add 956 sendMes.setArgs("f", gCtrl[5]);
casiotone401 5:abe335652add 957 osc.sendOsc(&sendMes);
casiotone401 5:abe335652add 958
casiotone401 5:abe335652add 959 _resetCount185 = resetCount;
casiotone401 5:abe335652add 960 }
casiotone401 5:abe335652add 961 break;
casiotone401 5:abe335652add 962
casiotone401 5:abe335652add 963 case BEATSSEQ:
casiotone401 5:abe335652add 964
casiotone401 5:abe335652add 965 if (_resetCountBeats != resetCount)
casiotone401 5:abe335652add 966 {
casiotone401 5:abe335652add 967 sendMes.setTopAddress(BEATS_COUNTER_ADDRESS);
casiotone401 5:abe335652add 968 sendMes.setArgs("i", (resetCount + 1));
casiotone401 5:abe335652add 969 osc.sendOsc(&sendMes);
casiotone401 5:abe335652add 970
casiotone401 5:abe335652add 971 sendMes.setTopAddress("/ctrl8");
casiotone401 5:abe335652add 972 sendMes.setArgs("f", gCtrl[7]);
casiotone401 5:abe335652add 973 osc.sendOsc(&sendMes);
casiotone401 5:abe335652add 974
casiotone401 5:abe335652add 975 _resetCountBeats = resetCount;
casiotone401 5:abe335652add 976 }
casiotone401 5:abe335652add 977 break;
casiotone401 5:abe335652add 978
casiotone401 5:abe335652add 979 default:
casiotone401 5:abe335652add 980 break;
casiotone401 5:abe335652add 981 }
casiotone401 5:abe335652add 982
casiotone401 5:abe335652add 983 }
casiotone401 5:abe335652add 984
casiotone401 5:abe335652add 985 //-------------------------------------------------------------
casiotone401 5:abe335652add 986 // check analog mode & send osc
casiotone401 5:abe335652add 987
casiotone401 5:abe335652add 988 inline void CheckAnalogMode()
casiotone401 5:abe335652add 989 {
casiotone401 5:abe335652add 990 static bool _analogMode;
casiotone401 5:abe335652add 991
casiotone401 5:abe335652add 992 if (_analogMode != gCtrlSW[4])
casiotone401 5:abe335652add 993 {
casiotone401 5:abe335652add 994 sendMes.setTopAddress("/ctrlsw5");
casiotone401 5:abe335652add 995 sendMes.setArgs("i", gCtrlSW[4]);
casiotone401 5:abe335652add 996 osc.sendOsc(&sendMes);
casiotone401 5:abe335652add 997
casiotone401 5:abe335652add 998 _analogMode = gCtrlSW[4];
casiotone401 5:abe335652add 999 }
casiotone401 5:abe335652add 1000
casiotone401 5:abe335652add 1001 }
casiotone401 5:abe335652add 1002
casiotone401 5:abe335652add 1003 //-------------------------------------------------------------
casiotone401 1:981b62bb5c87 1004 // Send Sequencer Status to touchOSC
casiotone401 1:981b62bb5c87 1005
casiotone401 1:981b62bb5c87 1006 void SendCtrlState(uint8_t step, uint8_t gateMode, uint8_t stepCount, uint8_t mode)
casiotone401 0:cd43a974c54c 1007 {
casiotone401 0:cd43a974c54c 1008 char pulseAddress[10] = PULSE_COUNT_ADDRESS;
casiotone401 1:981b62bb5c87 1009 char beatsPulseAddress[10] = BEATS_PULSE_COUNT_ADDRESS;
casiotone401 0:cd43a974c54c 1010 char gateModeAddress[10] = GATE_MODE_ADDRESS;
casiotone401 1:981b62bb5c87 1011 char gate185ModeAddress[10] = GATE185_MODE_ADDRESS;
casiotone401 0:cd43a974c54c 1012 char currentStep[2];
casiotone401 0:cd43a974c54c 1013
casiotone401 0:cd43a974c54c 1014 sprintf(currentStep, "%d", step + 1);
casiotone401 0:cd43a974c54c 1015
casiotone401 0:cd43a974c54c 1016 if(stepCount != 8)
casiotone401 0:cd43a974c54c 1017 {
casiotone401 1:981b62bb5c87 1018 if (mode == BEATSSEQ)
casiotone401 1:981b62bb5c87 1019 {
casiotone401 1:981b62bb5c87 1020 strcat(beatsPulseAddress, currentStep);
casiotone401 1:981b62bb5c87 1021 sendMes.setTopAddress(beatsPulseAddress);
casiotone401 1:981b62bb5c87 1022
casiotone401 1:981b62bb5c87 1023 } else {
casiotone401 1:981b62bb5c87 1024
casiotone401 1:981b62bb5c87 1025 strcat(pulseAddress, currentStep);
casiotone401 1:981b62bb5c87 1026 sendMes.setTopAddress(pulseAddress);
casiotone401 1:981b62bb5c87 1027 }
casiotone401 1:981b62bb5c87 1028
casiotone401 0:cd43a974c54c 1029 sendMes.setArgs("i", (stepCount + 1));
casiotone401 0:cd43a974c54c 1030 osc.sendOsc(&sendMes);
casiotone401 0:cd43a974c54c 1031 }
casiotone401 1:981b62bb5c87 1032
casiotone401 1:981b62bb5c87 1033 if (mode != BEATSSEQ)
casiotone401 1:981b62bb5c87 1034 {
casiotone401 1:981b62bb5c87 1035 switch (mode)
casiotone401 0:cd43a974c54c 1036 {
casiotone401 1:981b62bb5c87 1037 case SHIFTSEQ:
casiotone401 0:cd43a974c54c 1038
casiotone401 1:981b62bb5c87 1039 strcat(gateModeAddress, currentStep);
casiotone401 1:981b62bb5c87 1040 sendMes.setTopAddress(gateModeAddress);
casiotone401 0:cd43a974c54c 1041 break;
casiotone401 1:981b62bb5c87 1042
casiotone401 1:981b62bb5c87 1043 case M185SEQ:
casiotone401 0:cd43a974c54c 1044
casiotone401 1:981b62bb5c87 1045 strcat(gate185ModeAddress, currentStep);
casiotone401 1:981b62bb5c87 1046 sendMes.setTopAddress(gate185ModeAddress);
casiotone401 0:cd43a974c54c 1047 break;
casiotone401 0:cd43a974c54c 1048
casiotone401 1:981b62bb5c87 1049 default:
casiotone401 0:cd43a974c54c 1050 break;
casiotone401 0:cd43a974c54c 1051 }
casiotone401 0:cd43a974c54c 1052
casiotone401 1:981b62bb5c87 1053 switch (gateMode)
casiotone401 1:981b62bb5c87 1054 {
casiotone401 1:981b62bb5c87 1055 case SINGLE:
casiotone401 1:981b62bb5c87 1056
casiotone401 1:981b62bb5c87 1057 sendMes.setArgs("s", "|");
casiotone401 1:981b62bb5c87 1058
casiotone401 1:981b62bb5c87 1059 break;
casiotone401 1:981b62bb5c87 1060
casiotone401 1:981b62bb5c87 1061 case MUTE:
casiotone401 1:981b62bb5c87 1062
casiotone401 1:981b62bb5c87 1063 sendMes.setArgs("s", "O");
casiotone401 1:981b62bb5c87 1064
casiotone401 1:981b62bb5c87 1065 break;
casiotone401 1:981b62bb5c87 1066
casiotone401 1:981b62bb5c87 1067 case MULTI:
casiotone401 1:981b62bb5c87 1068
casiotone401 1:981b62bb5c87 1069 sendMes.setArgs("s", "||");
casiotone401 1:981b62bb5c87 1070
casiotone401 1:981b62bb5c87 1071 break;
casiotone401 1:981b62bb5c87 1072
casiotone401 1:981b62bb5c87 1073 case HOLD:
casiotone401 1:981b62bb5c87 1074
casiotone401 1:981b62bb5c87 1075 sendMes.setArgs("s", "|-");
casiotone401 1:981b62bb5c87 1076
casiotone401 1:981b62bb5c87 1077 break;
casiotone401 1:981b62bb5c87 1078 }
casiotone401 1:981b62bb5c87 1079
casiotone401 1:981b62bb5c87 1080 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 1081 }
casiotone401 1:981b62bb5c87 1082
casiotone401 0:cd43a974c54c 1083 }
casiotone401 0:cd43a974c54c 1084
casiotone401 0:cd43a974c54c 1085