OSCtoCV Library

Dependents:   OSCtoCVConverter

Committer:
casiotone401
Date:
Tue Feb 16 11:31:12 2016 +0000
Revision:
4:fe335dc8d53d
Parent:
3:d945a20b1e31
Child:
5:abe335652add
minor change

Who changed what in which revision?

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