OSCtoCV Library

Dependents:   OSCtoCVConverter

Committer:
casiotone401
Date:
Thu Feb 18 13:26:48 2016 +0000
Revision:
5:abe335652add
Parent:
4:fe335dc8d53d
Child:
6:7fb15b1b5459
minor change

Who changed what in which revision?

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