OSCtoCV Library

Dependents:   OSCtoCVConverter

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