OSCtoCV Library

Dependents:   OSCtoCVConverter

Committer:
casiotone401
Date:
Sun Jan 17 09:30:32 2016 +0000
Revision:
0:cd43a974c54c
Child:
1:981b62bb5c87
added random, lfo mode

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 0:cd43a974c54c 12 void ShiftCVSeq(int trigger, bool reset)
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 0:cd43a974c54c 26 static int jitterCount;
casiotone401 0:cd43a974c54c 27 static int jitter;
casiotone401 0:cd43a974c54c 28
casiotone401 0:cd43a974c54c 29 qmode = (gCtrl[1] * (SCALE_NUM - 1.0f)); // Sequencer Quantize Mode (gCtrl[1])
casiotone401 0:cd43a974c54c 30 amode = SCALE_AOUT * qmode;
casiotone401 0:cd43a974c54c 31
casiotone401 0:cd43a974c54c 32 gAOUT.write_u16(amode);
casiotone401 0:cd43a974c54c 33
casiotone401 0:cd43a974c54c 34 switch (qmode)
casiotone401 0:cd43a974c54c 35 {
casiotone401 0:cd43a974c54c 36 case Lin:
casiotone401 0:cd43a974c54c 37
casiotone401 0:cd43a974c54c 38 glidecv[0] = glidecv[0] * gSlide[currentStep] + gSeq_cv[currentStep] * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 39
casiotone401 0:cd43a974c54c 40 break;
casiotone401 0:cd43a974c54c 41
casiotone401 0:cd43a974c54c 42 case Chr:
casiotone401 0:cd43a974c54c 43
casiotone401 0:cd43a974c54c 44 qcv = calibMap1[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES1 - 1))];
casiotone401 0:cd43a974c54c 45
casiotone401 0:cd43a974c54c 46 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 47
casiotone401 0:cd43a974c54c 48 break;
casiotone401 0:cd43a974c54c 49
casiotone401 0:cd43a974c54c 50 case Maj:
casiotone401 0:cd43a974c54c 51
casiotone401 0:cd43a974c54c 52 qcv = calibMap2[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES2 - 1))];
casiotone401 0:cd43a974c54c 53
casiotone401 0:cd43a974c54c 54 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 55
casiotone401 0:cd43a974c54c 56 break;
casiotone401 0:cd43a974c54c 57
casiotone401 0:cd43a974c54c 58 case M7:
casiotone401 0:cd43a974c54c 59
casiotone401 0:cd43a974c54c 60 qcv = calibMap3[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES3 - 1))];
casiotone401 0:cd43a974c54c 61
casiotone401 0:cd43a974c54c 62 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 63
casiotone401 0:cd43a974c54c 64 break;
casiotone401 0:cd43a974c54c 65
casiotone401 0:cd43a974c54c 66 case Min7:
casiotone401 0:cd43a974c54c 67
casiotone401 0:cd43a974c54c 68 qcv = calibMap4[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES4 - 1))];
casiotone401 0:cd43a974c54c 69
casiotone401 0:cd43a974c54c 70 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 71
casiotone401 0:cd43a974c54c 72 break;
casiotone401 0:cd43a974c54c 73
casiotone401 0:cd43a974c54c 74 case Dor:
casiotone401 0:cd43a974c54c 75
casiotone401 0:cd43a974c54c 76 qcv = calibMap5[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES5 - 1))];
casiotone401 0:cd43a974c54c 77
casiotone401 0:cd43a974c54c 78 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 79
casiotone401 0:cd43a974c54c 80 break;
casiotone401 0:cd43a974c54c 81
casiotone401 0:cd43a974c54c 82 case Min:
casiotone401 0:cd43a974c54c 83
casiotone401 0:cd43a974c54c 84 qcv = calibMap6[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES6 - 1))];
casiotone401 0:cd43a974c54c 85
casiotone401 0:cd43a974c54c 86 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 87
casiotone401 0:cd43a974c54c 88 break;
casiotone401 0:cd43a974c54c 89
casiotone401 0:cd43a974c54c 90 case S5th:
casiotone401 0:cd43a974c54c 91
casiotone401 0:cd43a974c54c 92 qcv = calibMap7[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES7 - 1))];
casiotone401 0:cd43a974c54c 93
casiotone401 0:cd43a974c54c 94 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 95
casiotone401 0:cd43a974c54c 96 break;
casiotone401 0:cd43a974c54c 97
casiotone401 0:cd43a974c54c 98 case Wht:
casiotone401 0:cd43a974c54c 99
casiotone401 0:cd43a974c54c 100 qcv = calibMap8[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES8 - 1))];
casiotone401 0:cd43a974c54c 101
casiotone401 0:cd43a974c54c 102 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 103
casiotone401 0:cd43a974c54c 104 break;
casiotone401 0:cd43a974c54c 105 }
casiotone401 0:cd43a974c54c 106
casiotone401 0:cd43a974c54c 107 if (!gCtrlSW[4])
casiotone401 0:cd43a974c54c 108 {
casiotone401 0:cd43a974c54c 109 jitter = 0;
casiotone401 0:cd43a974c54c 110
casiotone401 0:cd43a974c54c 111 } else if (gCtrlSW[4] && jitterCount % 64 == 0) { // ASR Analog Mode
casiotone401 0:cd43a974c54c 112
casiotone401 0:cd43a974c54c 113 jitter = (rand() % 100 - 50);
casiotone401 0:cd43a974c54c 114 }
casiotone401 0:cd43a974c54c 115
casiotone401 0:cd43a974c54c 116 cv = (unsigned int)(glidecv[0] + jitter);
casiotone401 0:cd43a974c54c 117
casiotone401 0:cd43a974c54c 118 UpdateCV(WRITE_UPDATE_N, 0, &cv);
casiotone401 0:cd43a974c54c 119
casiotone401 0:cd43a974c54c 120 for (i = 1; i < 8; ++i)
casiotone401 0:cd43a974c54c 121 {
casiotone401 0:cd43a974c54c 122 glidecv[i] = glidecv[i] * gSlide[currentStep] + shiftcv[i] * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 123 cv = (unsigned int)(glidecv[i] + jitter);
casiotone401 0:cd43a974c54c 124
casiotone401 0:cd43a974c54c 125 UpdateCV(WRITE_UPDATE_N, i, &cv);
casiotone401 0:cd43a974c54c 126 }
casiotone401 0:cd43a974c54c 127
casiotone401 0:cd43a974c54c 128 if (trigger && !triggerState) // trigger ON
casiotone401 0:cd43a974c54c 129 {
casiotone401 0:cd43a974c54c 130 stepFoward = triggerState = true;
casiotone401 0:cd43a974c54c 131
casiotone401 0:cd43a974c54c 132 } else if (!trigger) { // trigger OFF
casiotone401 0:cd43a974c54c 133
casiotone401 0:cd43a974c54c 134 if (gateMode != HOLD)
casiotone401 0:cd43a974c54c 135 {
casiotone401 0:cd43a974c54c 136 gGATES[0] = false;
casiotone401 0:cd43a974c54c 137 }
casiotone401 0:cd43a974c54c 138
casiotone401 0:cd43a974c54c 139 triggerState = false;
casiotone401 0:cd43a974c54c 140 }
casiotone401 0:cd43a974c54c 141
casiotone401 0:cd43a974c54c 142 // check & update touchOSC ctrl parameter
casiotone401 0:cd43a974c54c 143 if (_gateMode[ch] != (gGateMode[ch] * 3))
casiotone401 0:cd43a974c54c 144 {
casiotone401 0:cd43a974c54c 145 _gateMode[ch] = (gGateMode[ch] * 3);
casiotone401 0:cd43a974c54c 146
casiotone401 0:cd43a974c54c 147 if (_gateMode[ch] == MULTI)
casiotone401 0:cd43a974c54c 148 {
casiotone401 0:cd43a974c54c 149 _gateMode[ch] = HOLD;
casiotone401 0:cd43a974c54c 150 }
casiotone401 0:cd43a974c54c 151
casiotone401 0:cd43a974c54c 152 SendCtrlState(ch, _gateMode[ch], 8);
casiotone401 0:cd43a974c54c 153 }
casiotone401 0:cd43a974c54c 154
casiotone401 0:cd43a974c54c 155 if (reset && !_reset) // Stop & Reset
casiotone401 0:cd43a974c54c 156 {
casiotone401 0:cd43a974c54c 157 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false));
casiotone401 0:cd43a974c54c 158 sendMes.setArgs("i", 0);
casiotone401 0:cd43a974c54c 159 osc.sendOsc(&sendMes);
casiotone401 0:cd43a974c54c 160
casiotone401 0:cd43a974c54c 161 currentStep = 0;
casiotone401 0:cd43a974c54c 162
casiotone401 0:cd43a974c54c 163 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false));
casiotone401 0:cd43a974c54c 164 sendMes.setArgs("i", 1);
casiotone401 0:cd43a974c54c 165 osc.sendOsc(&sendMes);
casiotone401 0:cd43a974c54c 166
casiotone401 0:cd43a974c54c 167 _reset = true;
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 0:cd43a974c54c 184 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false));
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 0:cd43a974c54c 190 if (gCtrlSW[2])
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 0:cd43a974c54c 211 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false));
casiotone401 0:cd43a974c54c 212 sendMes.setArgs("i", 1);
casiotone401 0:cd43a974c54c 213 osc.sendOsc(&sendMes);
casiotone401 0:cd43a974c54c 214
casiotone401 0:cd43a974c54c 215 if (currentStep < 8)
casiotone401 0:cd43a974c54c 216 {
casiotone401 0:cd43a974c54c 217 UpdateCVMeter(currentStep, &cv);
casiotone401 0:cd43a974c54c 218
casiotone401 0:cd43a974c54c 219 } else {
casiotone401 0:cd43a974c54c 220
casiotone401 0:cd43a974c54c 221 UpdateCVMeter((currentStep - 8), &cv);
casiotone401 0:cd43a974c54c 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 0:cd43a974c54c 238 gGATES[2] = gGATES[3] = true;
casiotone401 0:cd43a974c54c 239
casiotone401 0:cd43a974c54c 240 } else {
casiotone401 0:cd43a974c54c 241
casiotone401 0:cd43a974c54c 242 gGATES[2] = gGATES[3] = 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 0:cd43a974c54c 258 void M185Seq(int trigger, bool reset)
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 0:cd43a974c54c 274
casiotone401 0:cd43a974c54c 275 qmode = (gCtrl[1] * (SCALE_NUM - 1)); // Sequencer Quantize Mode (gCtrl[1])
casiotone401 0:cd43a974c54c 276 amode = SCALE_AOUT * qmode;
casiotone401 0:cd43a974c54c 277
casiotone401 0:cd43a974c54c 278 gAOUT.write_u16(amode);
casiotone401 0:cd43a974c54c 279
casiotone401 0:cd43a974c54c 280 switch (qmode)
casiotone401 0:cd43a974c54c 281 {
casiotone401 0:cd43a974c54c 282 case Lin:
casiotone401 0:cd43a974c54c 283
casiotone401 0:cd43a974c54c 284 glidecv[0] = glidecv[0] * gSlide[currentStep] + gSeq_cv[currentStep] * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 285
casiotone401 0:cd43a974c54c 286 break;
casiotone401 0:cd43a974c54c 287
casiotone401 0:cd43a974c54c 288 case Chr:
casiotone401 0:cd43a974c54c 289
casiotone401 0:cd43a974c54c 290 qcv = calibMap1[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES1 - 1))];
casiotone401 0:cd43a974c54c 291
casiotone401 0:cd43a974c54c 292 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 293
casiotone401 0:cd43a974c54c 294 break;
casiotone401 0:cd43a974c54c 295
casiotone401 0:cd43a974c54c 296 case Maj:
casiotone401 0:cd43a974c54c 297
casiotone401 0:cd43a974c54c 298 qcv = calibMap2[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES2 - 1))];
casiotone401 0:cd43a974c54c 299
casiotone401 0:cd43a974c54c 300 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 301
casiotone401 0:cd43a974c54c 302 break;
casiotone401 0:cd43a974c54c 303
casiotone401 0:cd43a974c54c 304 case M7:
casiotone401 0:cd43a974c54c 305
casiotone401 0:cd43a974c54c 306 qcv = calibMap3[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES3 - 1))];
casiotone401 0:cd43a974c54c 307
casiotone401 0:cd43a974c54c 308 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 309
casiotone401 0:cd43a974c54c 310 break;
casiotone401 0:cd43a974c54c 311
casiotone401 0:cd43a974c54c 312 case Min7:
casiotone401 0:cd43a974c54c 313
casiotone401 0:cd43a974c54c 314 qcv = calibMap4[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES4 - 1))];
casiotone401 0:cd43a974c54c 315
casiotone401 0:cd43a974c54c 316 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 317
casiotone401 0:cd43a974c54c 318 break;
casiotone401 0:cd43a974c54c 319
casiotone401 0:cd43a974c54c 320 case Dor:
casiotone401 0:cd43a974c54c 321
casiotone401 0:cd43a974c54c 322 qcv = calibMap5[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES5 - 1))];
casiotone401 0:cd43a974c54c 323
casiotone401 0:cd43a974c54c 324 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 325
casiotone401 0:cd43a974c54c 326 break;
casiotone401 0:cd43a974c54c 327
casiotone401 0:cd43a974c54c 328 case Min:
casiotone401 0:cd43a974c54c 329
casiotone401 0:cd43a974c54c 330 qcv = calibMap6[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES6 - 1))];
casiotone401 0:cd43a974c54c 331
casiotone401 0:cd43a974c54c 332 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 333
casiotone401 0:cd43a974c54c 334 break;
casiotone401 0:cd43a974c54c 335
casiotone401 0:cd43a974c54c 336 case S5th:
casiotone401 0:cd43a974c54c 337
casiotone401 0:cd43a974c54c 338 qcv = calibMap7[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES7 - 1))];
casiotone401 0:cd43a974c54c 339
casiotone401 0:cd43a974c54c 340 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 341
casiotone401 0:cd43a974c54c 342 break;
casiotone401 0:cd43a974c54c 343
casiotone401 0:cd43a974c54c 344 case Wht:
casiotone401 0:cd43a974c54c 345
casiotone401 0:cd43a974c54c 346 qcv = calibMap8[(unsigned int)MapFloat(gSeq_cv[currentStep], 0, SCALING_N, 0, (QUAN_RES8 - 1))];
casiotone401 0:cd43a974c54c 347
casiotone401 0:cd43a974c54c 348 glidecv[0] = glidecv[0] * gSlide[currentStep] + (qcv * SCALING_N) * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 349
casiotone401 0:cd43a974c54c 350 break;
casiotone401 0:cd43a974c54c 351 }
casiotone401 0:cd43a974c54c 352
casiotone401 0:cd43a974c54c 353 cv = (unsigned int)glidecv[0];
casiotone401 0:cd43a974c54c 354
casiotone401 0:cd43a974c54c 355 UpdateCV(WRITE_UPDATE_N, 0, &cv);
casiotone401 0:cd43a974c54c 356
casiotone401 0:cd43a974c54c 357 for (i = 1; i < 8; ++i)
casiotone401 0:cd43a974c54c 358 {
casiotone401 0:cd43a974c54c 359 glidecv[i] = glidecv[i] * gSlide[currentStep] + shiftcv[i] * (1.0f - gSlide[currentStep]);
casiotone401 0:cd43a974c54c 360 cv = (unsigned int)glidecv[i];
casiotone401 0:cd43a974c54c 361
casiotone401 0:cd43a974c54c 362 UpdateCV(WRITE_UPDATE_N, i, &cv);
casiotone401 0:cd43a974c54c 363 }
casiotone401 0:cd43a974c54c 364
casiotone401 0:cd43a974c54c 365 if (trigger && !triggerState) // trigger ON
casiotone401 0:cd43a974c54c 366 {
casiotone401 0:cd43a974c54c 367 if (gateMode == MULTI)
casiotone401 0:cd43a974c54c 368 {
casiotone401 0:cd43a974c54c 369 gGATES[0] = true;
casiotone401 0:cd43a974c54c 370
casiotone401 0:cd43a974c54c 371 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false));
casiotone401 0:cd43a974c54c 372 sendMes.setArgs("i", 1);
casiotone401 0:cd43a974c54c 373 osc.sendOsc(&sendMes);
casiotone401 0:cd43a974c54c 374 }
casiotone401 0:cd43a974c54c 375
casiotone401 0:cd43a974c54c 376 stepFoward = triggerState = true;
casiotone401 0:cd43a974c54c 377
casiotone401 0:cd43a974c54c 378 } else if (!trigger) { // trigger OFF
casiotone401 0:cd43a974c54c 379
casiotone401 0:cd43a974c54c 380 if (gateMode != HOLD)
casiotone401 0:cd43a974c54c 381 {
casiotone401 0:cd43a974c54c 382 gGATES[0] = false;
casiotone401 0:cd43a974c54c 383 }
casiotone401 0:cd43a974c54c 384
casiotone401 0:cd43a974c54c 385 if (gateMode == MULTI)
casiotone401 0:cd43a974c54c 386 {
casiotone401 0:cd43a974c54c 387 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false));
casiotone401 0:cd43a974c54c 388 sendMes.setArgs("i", 0);
casiotone401 0:cd43a974c54c 389 osc.sendOsc(&sendMes);
casiotone401 0:cd43a974c54c 390 }
casiotone401 0:cd43a974c54c 391
casiotone401 0:cd43a974c54c 392 triggerState = false;
casiotone401 0:cd43a974c54c 393 }
casiotone401 0:cd43a974c54c 394
casiotone401 0:cd43a974c54c 395 // check & update touchOSC ctrl parameter
casiotone401 0:cd43a974c54c 396 if (_gateMode[ch] != gGateMode[ch] * 3 || _pulseCount[ch] != gPulseCount[ch] * 7)
casiotone401 0:cd43a974c54c 397 {
casiotone401 0:cd43a974c54c 398 _gateMode[ch] = (gGateMode[ch] * 3);
casiotone401 0:cd43a974c54c 399 _pulseCount[ch] = (gPulseCount[ch] * 7);
casiotone401 0:cd43a974c54c 400
casiotone401 0:cd43a974c54c 401 SendCtrlState(ch, _gateMode[ch], _pulseCount[ch]);
casiotone401 0:cd43a974c54c 402 }
casiotone401 0:cd43a974c54c 403
casiotone401 0:cd43a974c54c 404 if (reset && !_reset) // Stop & Reset
casiotone401 0:cd43a974c54c 405 {
casiotone401 0:cd43a974c54c 406 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false));
casiotone401 0:cd43a974c54c 407 sendMes.setArgs("i", 0);
casiotone401 0:cd43a974c54c 408 osc.sendOsc(&sendMes);
casiotone401 0:cd43a974c54c 409
casiotone401 0:cd43a974c54c 410 currentStep = 0;
casiotone401 0:cd43a974c54c 411
casiotone401 0:cd43a974c54c 412 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false));
casiotone401 0:cd43a974c54c 413 sendMes.setArgs("i", 1);
casiotone401 0:cd43a974c54c 414 osc.sendOsc(&sendMes);
casiotone401 0:cd43a974c54c 415
casiotone401 0:cd43a974c54c 416 _reset = true;
casiotone401 0:cd43a974c54c 417
casiotone401 0:cd43a974c54c 418 } else if (!reset) {
casiotone401 0:cd43a974c54c 419
casiotone401 0:cd43a974c54c 420 _reset = false;
casiotone401 0:cd43a974c54c 421 }
casiotone401 0:cd43a974c54c 422
casiotone401 0:cd43a974c54c 423 if (stepFoward)
casiotone401 0:cd43a974c54c 424 {
casiotone401 0:cd43a974c54c 425 if (gateMode != HOLD) // shift CV
casiotone401 0:cd43a974c54c 426 {
casiotone401 0:cd43a974c54c 427 for (j = 1; j < 8; ++j)
casiotone401 0:cd43a974c54c 428 {
casiotone401 0:cd43a974c54c 429 shiftcv[j] = glidecv[j-1];
casiotone401 0:cd43a974c54c 430 }
casiotone401 0:cd43a974c54c 431 }
casiotone401 0:cd43a974c54c 432
casiotone401 0:cd43a974c54c 433 --stepCount;
casiotone401 0:cd43a974c54c 434
casiotone401 0:cd43a974c54c 435 if (stepCount == -1)
casiotone401 0:cd43a974c54c 436 {
casiotone401 0:cd43a974c54c 437 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false));
casiotone401 0:cd43a974c54c 438 sendMes.setArgs("i", 0);
casiotone401 0:cd43a974c54c 439 osc.sendOsc(&sendMes);
casiotone401 0:cd43a974c54c 440
casiotone401 0:cd43a974c54c 441 ++currentStep;
casiotone401 0:cd43a974c54c 442
casiotone401 0:cd43a974c54c 443 if (gCtrlSW[2])
casiotone401 0:cd43a974c54c 444 {
casiotone401 0:cd43a974c54c 445 resetCount = 3;
casiotone401 0:cd43a974c54c 446
casiotone401 0:cd43a974c54c 447 } else {
casiotone401 0:cd43a974c54c 448
casiotone401 0:cd43a974c54c 449 resetCount = gCtrl[4] * 7;
casiotone401 0:cd43a974c54c 450 }
casiotone401 0:cd43a974c54c 451
casiotone401 0:cd43a974c54c 452 if (_resetCount != resetCount)
casiotone401 0:cd43a974c54c 453 {
casiotone401 0:cd43a974c54c 454 sendMes.setTopAddress(RESET_COUNTER_ADDRESS);
casiotone401 0:cd43a974c54c 455 sendMes.setArgs("i", (resetCount + 1));
casiotone401 0:cd43a974c54c 456 osc.sendOsc(&sendMes);
casiotone401 0:cd43a974c54c 457 }
casiotone401 0:cd43a974c54c 458
casiotone401 0:cd43a974c54c 459 if (currentStep > resetCount) // reset
casiotone401 0:cd43a974c54c 460 {
casiotone401 0:cd43a974c54c 461 currentStep = 0;
casiotone401 0:cd43a974c54c 462 }
casiotone401 0:cd43a974c54c 463
casiotone401 0:cd43a974c54c 464 sendMes.setTopAddress(SetMatrixAddress(0, currentStep, false));
casiotone401 0:cd43a974c54c 465 sendMes.setArgs("i", 1);
casiotone401 0:cd43a974c54c 466 osc.sendOsc(&sendMes);
casiotone401 0:cd43a974c54c 467
casiotone401 0:cd43a974c54c 468 UpdateCVMeter(currentStep, &cv);
casiotone401 0:cd43a974c54c 469
casiotone401 0:cd43a974c54c 470 // check Pulse Count & Gate Mode
casiotone401 0:cd43a974c54c 471 stepCount = (gPulseCount[currentStep] * 7);
casiotone401 0:cd43a974c54c 472
casiotone401 0:cd43a974c54c 473 gateMode = (gGateMode[currentStep] * 3);
casiotone401 0:cd43a974c54c 474
casiotone401 0:cd43a974c54c 475 if (gateMode != MUTE)
casiotone401 0:cd43a974c54c 476 {
casiotone401 0:cd43a974c54c 477 gGATES[0] = true;
casiotone401 0:cd43a974c54c 478 }
casiotone401 0:cd43a974c54c 479
casiotone401 0:cd43a974c54c 480 }
casiotone401 0:cd43a974c54c 481
casiotone401 0:cd43a974c54c 482 stepFoward = false;
casiotone401 0:cd43a974c54c 483 }
casiotone401 0:cd43a974c54c 484
casiotone401 0:cd43a974c54c 485 ++ch;
casiotone401 0:cd43a974c54c 486 ch &= 0x07;
casiotone401 0:cd43a974c54c 487 }
casiotone401 0:cd43a974c54c 488
casiotone401 0:cd43a974c54c 489 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 490 // Send M185 Sequencer Status to touchOSC
casiotone401 0:cd43a974c54c 491
casiotone401 0:cd43a974c54c 492 void SendCtrlState(uint8_t step, uint8_t gateMode, uint8_t stepCount)
casiotone401 0:cd43a974c54c 493 {
casiotone401 0:cd43a974c54c 494 char pulseAddress[10] = PULSE_COUNT_ADDRESS;
casiotone401 0:cd43a974c54c 495 char gateModeAddress[10] = GATE_MODE_ADDRESS;
casiotone401 0:cd43a974c54c 496 char currentStep[2];
casiotone401 0:cd43a974c54c 497
casiotone401 0:cd43a974c54c 498 sprintf(currentStep, "%d", step + 1);
casiotone401 0:cd43a974c54c 499
casiotone401 0:cd43a974c54c 500 if(stepCount != 8)
casiotone401 0:cd43a974c54c 501 {
casiotone401 0:cd43a974c54c 502 strcat(pulseAddress, currentStep);
casiotone401 0:cd43a974c54c 503 sendMes.setTopAddress(pulseAddress);
casiotone401 0:cd43a974c54c 504 sendMes.setArgs("i", (stepCount + 1));
casiotone401 0:cd43a974c54c 505 osc.sendOsc(&sendMes);
casiotone401 0:cd43a974c54c 506 }
casiotone401 0:cd43a974c54c 507
casiotone401 0:cd43a974c54c 508 strcat(gateModeAddress, currentStep);
casiotone401 0:cd43a974c54c 509 sendMes.setTopAddress(gateModeAddress);
casiotone401 0:cd43a974c54c 510
casiotone401 0:cd43a974c54c 511 switch (gateMode)
casiotone401 0:cd43a974c54c 512 {
casiotone401 0:cd43a974c54c 513 case SINGLE:
casiotone401 0:cd43a974c54c 514
casiotone401 0:cd43a974c54c 515 sendMes.setArgs("s", "|");
casiotone401 0:cd43a974c54c 516
casiotone401 0:cd43a974c54c 517 break;
casiotone401 0:cd43a974c54c 518
casiotone401 0:cd43a974c54c 519 case MUTE:
casiotone401 0:cd43a974c54c 520
casiotone401 0:cd43a974c54c 521 sendMes.setArgs("s", "O");
casiotone401 0:cd43a974c54c 522
casiotone401 0:cd43a974c54c 523 break;
casiotone401 0:cd43a974c54c 524
casiotone401 0:cd43a974c54c 525 case MULTI:
casiotone401 0:cd43a974c54c 526
casiotone401 0:cd43a974c54c 527 sendMes.setArgs("s", "||");
casiotone401 0:cd43a974c54c 528
casiotone401 0:cd43a974c54c 529 break;
casiotone401 0:cd43a974c54c 530
casiotone401 0:cd43a974c54c 531 case HOLD:
casiotone401 0:cd43a974c54c 532
casiotone401 0:cd43a974c54c 533 sendMes.setArgs("s", "|-");
casiotone401 0:cd43a974c54c 534
casiotone401 0:cd43a974c54c 535 break;
casiotone401 0:cd43a974c54c 536 }
casiotone401 0:cd43a974c54c 537
casiotone401 0:cd43a974c54c 538 osc.sendOsc(&sendMes);
casiotone401 0:cd43a974c54c 539 }
casiotone401 0:cd43a974c54c 540
casiotone401 0:cd43a974c54c 541