OSCtoCV Library

Dependents:   OSCtoCVConverter

Committer:
casiotone401
Date:
Thu Jan 28 11:39:47 2016 +0000
Revision:
1:981b62bb5c87
Parent:
0:cd43a974c54c
Child:
3:d945a20b1e31
added Beats Seq

Who changed what in which revision?

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 1:981b62bb5c87 687 }
casiotone401 1:981b62bb5c87 688
casiotone401 1:981b62bb5c87 689 if (stepFoward)
casiotone401 1:981b62bb5c87 690 {
casiotone401 1:981b62bb5c87 691 if (gateMode != HOLD) // shift CV
casiotone401 1:981b62bb5c87 692 {
casiotone401 1:981b62bb5c87 693 for (j = 5; j < 8; ++j)
casiotone401 1:981b62bb5c87 694 {
casiotone401 1:981b62bb5c87 695 shiftcv[j] = glidecv[j-1];
casiotone401 1:981b62bb5c87 696 }
casiotone401 1:981b62bb5c87 697 }
casiotone401 1:981b62bb5c87 698
casiotone401 1:981b62bb5c87 699 --stepCount;
casiotone401 1:981b62bb5c87 700
casiotone401 1:981b62bb5c87 701 if (stepCount == -1)
casiotone401 1:981b62bb5c87 702 {
casiotone401 1:981b62bb5c87 703 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, M185SEQ));
casiotone401 1:981b62bb5c87 704 sendMes.setArgs("i", 0);
casiotone401 1:981b62bb5c87 705 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 706
casiotone401 1:981b62bb5c87 707 ++currentStep;
casiotone401 1:981b62bb5c87 708
casiotone401 1:981b62bb5c87 709 if (gCtrlSW[2]) // 4step break
casiotone401 1:981b62bb5c87 710 {
casiotone401 1:981b62bb5c87 711 resetCount = 3;
casiotone401 1:981b62bb5c87 712
casiotone401 1:981b62bb5c87 713 } else {
casiotone401 1:981b62bb5c87 714
casiotone401 1:981b62bb5c87 715 resetCount = gCtrl[5] * 7;
casiotone401 1:981b62bb5c87 716 }
casiotone401 1:981b62bb5c87 717
casiotone401 1:981b62bb5c87 718 if (_resetCount != resetCount)
casiotone401 1:981b62bb5c87 719 {
casiotone401 1:981b62bb5c87 720 sendMes.setTopAddress(RESET185_COUNTER_ADDRESS);
casiotone401 1:981b62bb5c87 721 sendMes.setArgs("i", (resetCount + 1));
casiotone401 1:981b62bb5c87 722 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 723 }
casiotone401 1:981b62bb5c87 724
casiotone401 1:981b62bb5c87 725 if (currentStep > resetCount) // reset
casiotone401 1:981b62bb5c87 726 {
casiotone401 1:981b62bb5c87 727 currentStep = 0;
casiotone401 1:981b62bb5c87 728 }
casiotone401 1:981b62bb5c87 729
casiotone401 1:981b62bb5c87 730 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, M185SEQ));
casiotone401 1:981b62bb5c87 731 sendMes.setArgs("i", 1);
casiotone401 1:981b62bb5c87 732 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 733
casiotone401 1:981b62bb5c87 734 // check Pulse Count & Gate Mode
casiotone401 1:981b62bb5c87 735 stepCount = (gPulseCount[currentStep] * 7);
casiotone401 1:981b62bb5c87 736
casiotone401 1:981b62bb5c87 737 gateMode = (gGateMode185[currentStep] * 3);
casiotone401 1:981b62bb5c87 738
casiotone401 1:981b62bb5c87 739 if (gateMode != MUTE)
casiotone401 1:981b62bb5c87 740 {
casiotone401 1:981b62bb5c87 741 gGATES[3] = true;
casiotone401 1:981b62bb5c87 742 }
casiotone401 1:981b62bb5c87 743
casiotone401 0:cd43a974c54c 744 }
casiotone401 0:cd43a974c54c 745
casiotone401 0:cd43a974c54c 746 stepFoward = false;
casiotone401 0:cd43a974c54c 747 }
casiotone401 0:cd43a974c54c 748
casiotone401 0:cd43a974c54c 749 ++ch;
casiotone401 0:cd43a974c54c 750 ch &= 0x07;
casiotone401 1:981b62bb5c87 751
casiotone401 1:981b62bb5c87 752 ++jitterCount;
casiotone401 1:981b62bb5c87 753 jitterCount &= 0x1FF;
casiotone401 0:cd43a974c54c 754 }
casiotone401 0:cd43a974c54c 755
casiotone401 0:cd43a974c54c 756 //-------------------------------------------------------------
casiotone401 1:981b62bb5c87 757 // 8ch drum track sequecer
casiotone401 1:981b62bb5c87 758 void BeatsSeq(int trigger, bool reset, bool gatesOff)
casiotone401 1:981b62bb5c87 759 {
casiotone401 1:981b62bb5c87 760 int rndVel;
casiotone401 1:981b62bb5c87 761 static bool triggerState = false;
casiotone401 1:981b62bb5c87 762 static bool stepFoward = false;
casiotone401 1:981b62bb5c87 763 static bool _reset = false;
casiotone401 1:981b62bb5c87 764 static uint8_t currentStep;
casiotone401 1:981b62bb5c87 765 static int stepCount;
casiotone401 1:981b62bb5c87 766 static int _resetCount, resetCount;
casiotone401 1:981b62bb5c87 767 static uint8_t _pulseCount[8];
casiotone401 1:981b62bb5c87 768 static uint8_t ch;
casiotone401 1:981b62bb5c87 769 static float decay[8] = {1};
casiotone401 1:981b62bb5c87 770
casiotone401 1:981b62bb5c87 771
casiotone401 1:981b62bb5c87 772 if (trigger && !triggerState) // trigger ON
casiotone401 1:981b62bb5c87 773 {
casiotone401 1:981b62bb5c87 774 if (stepCount != 0)
casiotone401 1:981b62bb5c87 775 {
casiotone401 1:981b62bb5c87 776 for (ch = 0; ch < 8; ++ch)
casiotone401 1:981b62bb5c87 777 {
casiotone401 1:981b62bb5c87 778 if (gBeatsMatrix[ch][currentStep])
casiotone401 1:981b62bb5c87 779 {
casiotone401 1:981b62bb5c87 780 midi.sendNoteOn(0, 127, (ch + 1)); // volca sample trriger on
casiotone401 1:981b62bb5c87 781
casiotone401 1:981b62bb5c87 782 if (!gatesOff && ch < 4)
casiotone401 1:981b62bb5c87 783 {
casiotone401 1:981b62bb5c87 784 gGATES[ch] = true;
casiotone401 1:981b62bb5c87 785 }
casiotone401 1:981b62bb5c87 786 }
casiotone401 1:981b62bb5c87 787 }
casiotone401 1:981b62bb5c87 788
casiotone401 1:981b62bb5c87 789 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ));
casiotone401 1:981b62bb5c87 790 sendMes.setArgs("i", 1);
casiotone401 1:981b62bb5c87 791 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 792 }
casiotone401 1:981b62bb5c87 793
casiotone401 1:981b62bb5c87 794 stepFoward = triggerState = true;
casiotone401 1:981b62bb5c87 795
casiotone401 1:981b62bb5c87 796 } else if (!trigger) { // trigger OFF
casiotone401 1:981b62bb5c87 797
casiotone401 1:981b62bb5c87 798 if (!gatesOff)
casiotone401 1:981b62bb5c87 799 {
casiotone401 1:981b62bb5c87 800 gGATES[0] = gGATES[1] = gGATES[2] = gGATES[3] = false;
casiotone401 1:981b62bb5c87 801 }
casiotone401 1:981b62bb5c87 802
casiotone401 1:981b62bb5c87 803 if (stepCount != 0)
casiotone401 1:981b62bb5c87 804 {
casiotone401 1:981b62bb5c87 805 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ));
casiotone401 1:981b62bb5c87 806 sendMes.setArgs("i", 0);
casiotone401 1:981b62bb5c87 807 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 808 }
casiotone401 1:981b62bb5c87 809
casiotone401 1:981b62bb5c87 810 triggerState = false;
casiotone401 1:981b62bb5c87 811 }
casiotone401 1:981b62bb5c87 812
casiotone401 1:981b62bb5c87 813 // check & update touchOSC ctrl parameter
casiotone401 1:981b62bb5c87 814 for (ch = 0; ch < 16; ++ch)
casiotone401 1:981b62bb5c87 815 {
casiotone401 1:981b62bb5c87 816 if (_pulseCount[ch] != gPulseCountBeats[ch] * 7)
casiotone401 1:981b62bb5c87 817 {
casiotone401 1:981b62bb5c87 818 _pulseCount[ch] = (gPulseCountBeats[ch] * 7);
casiotone401 1:981b62bb5c87 819
casiotone401 1:981b62bb5c87 820 SendCtrlState(ch, 0, _pulseCount[ch], BEATSSEQ);
casiotone401 1:981b62bb5c87 821 }
casiotone401 1:981b62bb5c87 822 }
casiotone401 1:981b62bb5c87 823
casiotone401 1:981b62bb5c87 824 if (reset && !_reset) // Stop & Reset
casiotone401 1:981b62bb5c87 825 {// current step indeicator Reset
casiotone401 1:981b62bb5c87 826 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ));
casiotone401 1:981b62bb5c87 827 sendMes.setArgs("i", 0);
casiotone401 1:981b62bb5c87 828 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 829
casiotone401 1:981b62bb5c87 830 currentStep = 0;
casiotone401 1:981b62bb5c87 831
casiotone401 1:981b62bb5c87 832 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ));
casiotone401 1:981b62bb5c87 833 sendMes.setArgs("i", 1);
casiotone401 1:981b62bb5c87 834 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 835
casiotone401 1:981b62bb5c87 836 _reset = true;
casiotone401 1:981b62bb5c87 837 stepFoward = triggerState = false;
casiotone401 1:981b62bb5c87 838
casiotone401 1:981b62bb5c87 839 } else if (!reset) {
casiotone401 0:cd43a974c54c 840
casiotone401 1:981b62bb5c87 841 _reset = false;
casiotone401 1:981b62bb5c87 842 }
casiotone401 1:981b62bb5c87 843
casiotone401 1:981b62bb5c87 844 if (stepFoward)
casiotone401 1:981b62bb5c87 845 {
casiotone401 1:981b62bb5c87 846 --stepCount;
casiotone401 1:981b62bb5c87 847
casiotone401 1:981b62bb5c87 848 if (stepCount == -1)
casiotone401 1:981b62bb5c87 849 {// last current step indeicator ON
casiotone401 1:981b62bb5c87 850 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ));
casiotone401 1:981b62bb5c87 851 sendMes.setArgs("i", 0);
casiotone401 1:981b62bb5c87 852 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 853
casiotone401 1:981b62bb5c87 854 ++currentStep;
casiotone401 1:981b62bb5c87 855
casiotone401 1:981b62bb5c87 856 if (gCtrlSW[2]) // 4step break
casiotone401 1:981b62bb5c87 857 {
casiotone401 1:981b62bb5c87 858 resetCount = 3;
casiotone401 1:981b62bb5c87 859
casiotone401 1:981b62bb5c87 860 } else {
casiotone401 1:981b62bb5c87 861
casiotone401 1:981b62bb5c87 862 resetCount = gCtrl[7] * 15;
casiotone401 1:981b62bb5c87 863 }
casiotone401 1:981b62bb5c87 864
casiotone401 1:981b62bb5c87 865 if (_resetCount != resetCount)
casiotone401 1:981b62bb5c87 866 {
casiotone401 1:981b62bb5c87 867 sendMes.setTopAddress(BEATS_COUNTER_ADDRESS);
casiotone401 1:981b62bb5c87 868 sendMes.setArgs("i", (resetCount + 1));
casiotone401 1:981b62bb5c87 869 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 870 }
casiotone401 1:981b62bb5c87 871
casiotone401 1:981b62bb5c87 872 if (currentStep > resetCount) // reset
casiotone401 1:981b62bb5c87 873 {
casiotone401 1:981b62bb5c87 874 currentStep = 0;
casiotone401 1:981b62bb5c87 875 }
casiotone401 1:981b62bb5c87 876
casiotone401 1:981b62bb5c87 877 // current step indeicator ON
casiotone401 1:981b62bb5c87 878 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, BEATSSEQ));
casiotone401 1:981b62bb5c87 879 sendMes.setArgs("i", 1);
casiotone401 1:981b62bb5c87 880 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 881
casiotone401 1:981b62bb5c87 882 // check Pulse Count & Gate Mode
casiotone401 1:981b62bb5c87 883 stepCount = (gPulseCountBeats[currentStep] * 7);
casiotone401 1:981b62bb5c87 884
casiotone401 1:981b62bb5c87 885 for (ch = 0; ch < 8; ++ch)
casiotone401 1:981b62bb5c87 886 {
casiotone401 1:981b62bb5c87 887 if (gBeatsMatrix[ch][currentStep])
casiotone401 1:981b62bb5c87 888 {
casiotone401 1:981b62bb5c87 889 if (gCtrlSW[5]) //random Vel Mode /ctrlsw6
casiotone401 1:981b62bb5c87 890 {
casiotone401 1:981b62bb5c87 891 if (ch == 0 || ch == 2)
casiotone401 1:981b62bb5c87 892 {
casiotone401 1:981b62bb5c87 893
casiotone401 1:981b62bb5c87 894 rndVel = 95 - (rand() % 14); // random velocity ch1, ch3
casiotone401 1:981b62bb5c87 895
casiotone401 1:981b62bb5c87 896 } else if (ch == 1 || ch == 3) {
casiotone401 1:981b62bb5c87 897
casiotone401 1:981b62bb5c87 898 rndVel = 80 - (rand() % 10); // random velocity ch2, ch4
casiotone401 1:981b62bb5c87 899
casiotone401 1:981b62bb5c87 900 } else {
casiotone401 1:981b62bb5c87 901
casiotone401 1:981b62bb5c87 902 rndVel = 80;
casiotone401 1:981b62bb5c87 903 }
casiotone401 1:981b62bb5c87 904
casiotone401 1:981b62bb5c87 905 } else {
casiotone401 1:981b62bb5c87 906
casiotone401 1:981b62bb5c87 907 rndVel = 95;
casiotone401 1:981b62bb5c87 908 }
casiotone401 1:981b62bb5c87 909
casiotone401 1:981b62bb5c87 910 if (gBeatsMatrix[8][currentStep]) // ch9 accent Velocity +20
casiotone401 1:981b62bb5c87 911 {
casiotone401 1:981b62bb5c87 912 rndVel += 32;
casiotone401 1:981b62bb5c87 913 }
casiotone401 1:981b62bb5c87 914
casiotone401 1:981b62bb5c87 915 midi.sendControlChange(0x07, (gBeatsLevel[ch] * rndVel), (ch + 1)); // volca sample Level
casiotone401 1:981b62bb5c87 916
casiotone401 1:981b62bb5c87 917 if (decay[ch] != gBeatsDecay[ch])
casiotone401 1:981b62bb5c87 918 {
casiotone401 1:981b62bb5c87 919 decay[ch] = gBeatsDecay[ch];
casiotone401 1:981b62bb5c87 920 midi.sendControlChange(0x30, (decay[ch] * 127), (ch + 1)); // volca sample Amp EG Decay
casiotone401 1:981b62bb5c87 921 }
casiotone401 1:981b62bb5c87 922
casiotone401 1:981b62bb5c87 923 midi.sendNoteOn(0, 127, (ch + 1)); // volca sample trriger on
casiotone401 1:981b62bb5c87 924
casiotone401 1:981b62bb5c87 925 if (!gatesOff && ch < 4)
casiotone401 1:981b62bb5c87 926 {
casiotone401 1:981b62bb5c87 927 gGATES[ch] = true;
casiotone401 1:981b62bb5c87 928 }
casiotone401 1:981b62bb5c87 929 }
casiotone401 1:981b62bb5c87 930 }
casiotone401 1:981b62bb5c87 931 }
casiotone401 1:981b62bb5c87 932
casiotone401 1:981b62bb5c87 933 stepFoward = false;
casiotone401 1:981b62bb5c87 934 }
casiotone401 1:981b62bb5c87 935
casiotone401 1:981b62bb5c87 936 }
casiotone401 1:981b62bb5c87 937
casiotone401 1:981b62bb5c87 938 //-------------------------------------------------------------
casiotone401 1:981b62bb5c87 939 // shift cv seq ch1 ~ ch4 m185 seq ch5 ~ ch8
casiotone401 1:981b62bb5c87 940
casiotone401 1:981b62bb5c87 941 void PolyCVSeq(int trigger, bool reset)
casiotone401 1:981b62bb5c87 942 {
casiotone401 1:981b62bb5c87 943 ShiftCVSeq(trigger, reset, CV_CHANNEL4);
casiotone401 1:981b62bb5c87 944 PolyM185Seq(trigger, reset, CV_CHANNEL8);
casiotone401 1:981b62bb5c87 945 }
casiotone401 1:981b62bb5c87 946
casiotone401 1:981b62bb5c87 947 //-------------------------------------------------------------
casiotone401 1:981b62bb5c87 948 // Send Sequencer Status to touchOSC
casiotone401 1:981b62bb5c87 949
casiotone401 1:981b62bb5c87 950 void SendCtrlState(uint8_t step, uint8_t gateMode, uint8_t stepCount, uint8_t mode)
casiotone401 0:cd43a974c54c 951 {
casiotone401 0:cd43a974c54c 952 char pulseAddress[10] = PULSE_COUNT_ADDRESS;
casiotone401 1:981b62bb5c87 953 char beatsPulseAddress[10] = BEATS_PULSE_COUNT_ADDRESS;
casiotone401 0:cd43a974c54c 954 char gateModeAddress[10] = GATE_MODE_ADDRESS;
casiotone401 1:981b62bb5c87 955 char gate185ModeAddress[10] = GATE185_MODE_ADDRESS;
casiotone401 0:cd43a974c54c 956 char currentStep[2];
casiotone401 0:cd43a974c54c 957
casiotone401 0:cd43a974c54c 958 sprintf(currentStep, "%d", step + 1);
casiotone401 0:cd43a974c54c 959
casiotone401 0:cd43a974c54c 960 if(stepCount != 8)
casiotone401 0:cd43a974c54c 961 {
casiotone401 1:981b62bb5c87 962 if (mode == BEATSSEQ)
casiotone401 1:981b62bb5c87 963 {
casiotone401 1:981b62bb5c87 964 strcat(beatsPulseAddress, currentStep);
casiotone401 1:981b62bb5c87 965 sendMes.setTopAddress(beatsPulseAddress);
casiotone401 1:981b62bb5c87 966
casiotone401 1:981b62bb5c87 967 } else {
casiotone401 1:981b62bb5c87 968
casiotone401 1:981b62bb5c87 969 strcat(pulseAddress, currentStep);
casiotone401 1:981b62bb5c87 970 sendMes.setTopAddress(pulseAddress);
casiotone401 1:981b62bb5c87 971 }
casiotone401 1:981b62bb5c87 972
casiotone401 0:cd43a974c54c 973 sendMes.setArgs("i", (stepCount + 1));
casiotone401 0:cd43a974c54c 974 osc.sendOsc(&sendMes);
casiotone401 0:cd43a974c54c 975 }
casiotone401 1:981b62bb5c87 976
casiotone401 1:981b62bb5c87 977 if (mode != BEATSSEQ)
casiotone401 1:981b62bb5c87 978 {
casiotone401 1:981b62bb5c87 979 switch (mode)
casiotone401 0:cd43a974c54c 980 {
casiotone401 1:981b62bb5c87 981 case SHIFTSEQ:
casiotone401 0:cd43a974c54c 982
casiotone401 1:981b62bb5c87 983 strcat(gateModeAddress, currentStep);
casiotone401 1:981b62bb5c87 984 sendMes.setTopAddress(gateModeAddress);
casiotone401 0:cd43a974c54c 985 break;
casiotone401 1:981b62bb5c87 986
casiotone401 1:981b62bb5c87 987 case M185SEQ:
casiotone401 0:cd43a974c54c 988
casiotone401 1:981b62bb5c87 989 strcat(gate185ModeAddress, currentStep);
casiotone401 1:981b62bb5c87 990 sendMes.setTopAddress(gate185ModeAddress);
casiotone401 0:cd43a974c54c 991 break;
casiotone401 0:cd43a974c54c 992
casiotone401 1:981b62bb5c87 993 default:
casiotone401 0:cd43a974c54c 994 break;
casiotone401 0:cd43a974c54c 995 }
casiotone401 0:cd43a974c54c 996
casiotone401 1:981b62bb5c87 997 switch (gateMode)
casiotone401 1:981b62bb5c87 998 {
casiotone401 1:981b62bb5c87 999 case SINGLE:
casiotone401 1:981b62bb5c87 1000
casiotone401 1:981b62bb5c87 1001 sendMes.setArgs("s", "|");
casiotone401 1:981b62bb5c87 1002
casiotone401 1:981b62bb5c87 1003 break;
casiotone401 1:981b62bb5c87 1004
casiotone401 1:981b62bb5c87 1005 case MUTE:
casiotone401 1:981b62bb5c87 1006
casiotone401 1:981b62bb5c87 1007 sendMes.setArgs("s", "O");
casiotone401 1:981b62bb5c87 1008
casiotone401 1:981b62bb5c87 1009 break;
casiotone401 1:981b62bb5c87 1010
casiotone401 1:981b62bb5c87 1011 case MULTI:
casiotone401 1:981b62bb5c87 1012
casiotone401 1:981b62bb5c87 1013 sendMes.setArgs("s", "||");
casiotone401 1:981b62bb5c87 1014
casiotone401 1:981b62bb5c87 1015 break;
casiotone401 1:981b62bb5c87 1016
casiotone401 1:981b62bb5c87 1017 case HOLD:
casiotone401 1:981b62bb5c87 1018
casiotone401 1:981b62bb5c87 1019 sendMes.setArgs("s", "|-");
casiotone401 1:981b62bb5c87 1020
casiotone401 1:981b62bb5c87 1021 break;
casiotone401 1:981b62bb5c87 1022 }
casiotone401 1:981b62bb5c87 1023
casiotone401 1:981b62bb5c87 1024 osc.sendOsc(&sendMes);
casiotone401 1:981b62bb5c87 1025 }
casiotone401 1:981b62bb5c87 1026
casiotone401 0:cd43a974c54c 1027 }
casiotone401 0:cd43a974c54c 1028
casiotone401 0:cd43a974c54c 1029