OSCtoCV Library

Dependents:   OSCtoCVConverter

Committer:
casiotone401
Date:
Thu Feb 25 11:21:37 2016 +0000
Revision:
6:7fb15b1b5459
Parent:
4:fe335dc8d53d
minor change

Who changed what in which revision?

UserRevisionLine numberNew contents of line
casiotone401 0:cd43a974c54c 1 /*
casiotone401 0:cd43a974c54c 2 OSCtoCV_GateSequencer.cpp
casiotone401 0:cd43a974c54c 3 */
casiotone401 0:cd43a974c54c 4
casiotone401 0:cd43a974c54c 5 #include "mbed.h"
casiotone401 0:cd43a974c54c 6 #include "OSCtoCV_GateSequencer.h"
casiotone401 0:cd43a974c54c 7 #include "OSCtoCV.h"
casiotone401 0:cd43a974c54c 8
casiotone401 0:cd43a974c54c 9 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 10 // Gate Sequencer beat(Note values) length(Gate time) invert(invert Gate)
casiotone401 0:cd43a974c54c 11
casiotone401 6:7fb15b1b5459 12 int GateSeq(uint16_t bpm, uint16_t beat, uint8_t ch, float length, bool invert, bool gatesOff, bool syncoff)
casiotone401 0:cd43a974c54c 13 {
casiotone401 0:cd43a974c54c 14 int i;
casiotone401 0:cd43a974c54c 15 static int gatetime[GATE_TOTAL], oldgatetime[GATE_TOTAL];
casiotone401 0:cd43a974c54c 16 static int _bpm, bar, sync24, oldsynctime;
casiotone401 0:cd43a974c54c 17
casiotone401 0:cd43a974c54c 18 int time = gTimer.read_us();
casiotone401 0:cd43a974c54c 19
casiotone401 0:cd43a974c54c 20 if (_bpm != bpm)
casiotone401 0:cd43a974c54c 21 {
casiotone401 0:cd43a974c54c 22 if (!bpm)
casiotone401 0:cd43a974c54c 23 {
casiotone401 0:cd43a974c54c 24 beat = NRESET;
casiotone401 0:cd43a974c54c 25
casiotone401 0:cd43a974c54c 26 } else {
casiotone401 0:cd43a974c54c 27
casiotone401 0:cd43a974c54c 28 bar = (60.0f / bpm) * 4000000;
casiotone401 6:7fb15b1b5459 29 //sync24 = (bar / 4) / 24; // sync24 not tested
casiotone401 0:cd43a974c54c 30
casiotone401 0:cd43a974c54c 31 _bpm = bpm;
casiotone401 0:cd43a974c54c 32 }
casiotone401 0:cd43a974c54c 33 }
casiotone401 0:cd43a974c54c 34
casiotone401 0:cd43a974c54c 35 switch (beat) // Calculate Note values
casiotone401 0:cd43a974c54c 36 {
casiotone401 0:cd43a974c54c 37 case NDOT2:
casiotone401 0:cd43a974c54c 38
casiotone401 0:cd43a974c54c 39 gatetime[ch] = (bar / 4) * 3;
casiotone401 0:cd43a974c54c 40 break;
casiotone401 0:cd43a974c54c 41
casiotone401 0:cd43a974c54c 42 case NDOT4:
casiotone401 0:cd43a974c54c 43
casiotone401 0:cd43a974c54c 44 gatetime[ch] = (bar / 8) * 3;
casiotone401 0:cd43a974c54c 45 break;
casiotone401 0:cd43a974c54c 46
casiotone401 0:cd43a974c54c 47 case NDOT8:
casiotone401 0:cd43a974c54c 48
casiotone401 0:cd43a974c54c 49 gatetime[ch] = (bar / 16) * 3;
casiotone401 0:cd43a974c54c 50 break;
casiotone401 0:cd43a974c54c 51
casiotone401 0:cd43a974c54c 52 case NDOT16:
casiotone401 0:cd43a974c54c 53
casiotone401 0:cd43a974c54c 54 gatetime[ch] = (bar / 32) * 3;
casiotone401 0:cd43a974c54c 55 break;
casiotone401 0:cd43a974c54c 56
casiotone401 0:cd43a974c54c 57 case NDOT32:
casiotone401 0:cd43a974c54c 58
casiotone401 0:cd43a974c54c 59 gatetime[ch] = (bar / 64) * 3;
casiotone401 0:cd43a974c54c 60 break;
casiotone401 0:cd43a974c54c 61
casiotone401 0:cd43a974c54c 62 case NRESET:
casiotone401 0:cd43a974c54c 63
casiotone401 0:cd43a974c54c 64 gTimer.reset();
casiotone401 0:cd43a974c54c 65
casiotone401 0:cd43a974c54c 66 for (i = 0; i < GATE_TOTAL; ++i) // Reset
casiotone401 0:cd43a974c54c 67 {
casiotone401 0:cd43a974c54c 68 oldsynctime = oldgatetime[i] = gatetime[i] = NRESET;
casiotone401 0:cd43a974c54c 69 }
casiotone401 0:cd43a974c54c 70
casiotone401 0:cd43a974c54c 71 return 0;
casiotone401 0:cd43a974c54c 72
casiotone401 0:cd43a974c54c 73 default:
casiotone401 0:cd43a974c54c 74
casiotone401 0:cd43a974c54c 75 gatetime[ch] = bar / beat;
casiotone401 6:7fb15b1b5459 76 sync24 = bar / 16;
casiotone401 0:cd43a974c54c 77 break;
casiotone401 0:cd43a974c54c 78 }
casiotone401 0:cd43a974c54c 79
casiotone401 0:cd43a974c54c 80 if (time > oldsynctime + sync24) // sync24 not tested
casiotone401 0:cd43a974c54c 81 {
casiotone401 0:cd43a974c54c 82 if (!syncoff)
casiotone401 0:cd43a974c54c 83 {
casiotone401 0:cd43a974c54c 84 oldsynctime = time;
casiotone401 0:cd43a974c54c 85 gCLOCKOUT = true;
casiotone401 0:cd43a974c54c 86
casiotone401 0:cd43a974c54c 87 midi.sendRealTime(Clock); // MIDI Clock
casiotone401 0:cd43a974c54c 88 }
casiotone401 0:cd43a974c54c 89
casiotone401 0:cd43a974c54c 90 } else if (time > oldsynctime - (sync24 - 2)) {
casiotone401 0:cd43a974c54c 91
casiotone401 0:cd43a974c54c 92 if (!syncoff)
casiotone401 0:cd43a974c54c 93 {
casiotone401 0:cd43a974c54c 94 gCLOCKOUT = false;
casiotone401 0:cd43a974c54c 95 }
casiotone401 0:cd43a974c54c 96 }
casiotone401 0:cd43a974c54c 97
casiotone401 0:cd43a974c54c 98 if (ch == GATE_TOTAL)
casiotone401 0:cd43a974c54c 99 {
casiotone401 0:cd43a974c54c 100 return -1;
casiotone401 0:cd43a974c54c 101
casiotone401 0:cd43a974c54c 102 } else if (time > oldgatetime[ch] + gatetime[ch] && !invert) {
casiotone401 0:cd43a974c54c 103
casiotone401 0:cd43a974c54c 104 oldgatetime[ch] = time;
casiotone401 0:cd43a974c54c 105
casiotone401 1:981b62bb5c87 106 if (!gatesOff)
casiotone401 0:cd43a974c54c 107 {
casiotone401 0:cd43a974c54c 108 gGATES[ch] = true;
casiotone401 0:cd43a974c54c 109
casiotone401 0:cd43a974c54c 110 } else if (ch == SUBGATE) {
casiotone401 0:cd43a974c54c 111
casiotone401 0:cd43a974c54c 112 gSUBGATE = true;
casiotone401 0:cd43a974c54c 113 }
casiotone401 0:cd43a974c54c 114
casiotone401 0:cd43a974c54c 115 return 1;
casiotone401 0:cd43a974c54c 116
casiotone401 0:cd43a974c54c 117 } else if (time > oldgatetime[ch] + gatetime[ch] && invert) {
casiotone401 0:cd43a974c54c 118
casiotone401 0:cd43a974c54c 119 oldgatetime[ch] = time;
casiotone401 0:cd43a974c54c 120
casiotone401 1:981b62bb5c87 121 if (!gatesOff)
casiotone401 0:cd43a974c54c 122 {
casiotone401 0:cd43a974c54c 123 gGATES[ch] = false;
casiotone401 0:cd43a974c54c 124
casiotone401 0:cd43a974c54c 125 } else if (ch == SUBGATE) {
casiotone401 0:cd43a974c54c 126
casiotone401 0:cd43a974c54c 127 gSUBGATE = false;
casiotone401 0:cd43a974c54c 128 }
casiotone401 0:cd43a974c54c 129
casiotone401 0:cd43a974c54c 130 return 0;
casiotone401 0:cd43a974c54c 131
casiotone401 0:cd43a974c54c 132 } else if (time > oldgatetime[ch] + (gatetime[ch] - gatetime[ch] / length) && !invert) {
casiotone401 0:cd43a974c54c 133
casiotone401 1:981b62bb5c87 134 if (!gatesOff)
casiotone401 0:cd43a974c54c 135 {
casiotone401 0:cd43a974c54c 136 gGATES[ch] = false;
casiotone401 0:cd43a974c54c 137
casiotone401 0:cd43a974c54c 138 } else if (ch == SUBGATE) {
casiotone401 0:cd43a974c54c 139
casiotone401 0:cd43a974c54c 140 gSUBGATE = false;
casiotone401 0:cd43a974c54c 141 }
casiotone401 0:cd43a974c54c 142
casiotone401 0:cd43a974c54c 143 return 0;
casiotone401 0:cd43a974c54c 144
casiotone401 0:cd43a974c54c 145 } else if (time > oldgatetime[ch] + (gatetime[ch] - gatetime[ch] / length) && invert) {
casiotone401 0:cd43a974c54c 146
casiotone401 1:981b62bb5c87 147 if (!gatesOff)
casiotone401 0:cd43a974c54c 148 {
casiotone401 0:cd43a974c54c 149 gGATES[ch] = true;
casiotone401 0:cd43a974c54c 150
casiotone401 0:cd43a974c54c 151 } else if (ch == SUBGATE) {
casiotone401 0:cd43a974c54c 152
casiotone401 0:cd43a974c54c 153 gSUBGATE = true;
casiotone401 0:cd43a974c54c 154 }
casiotone401 0:cd43a974c54c 155
casiotone401 0:cd43a974c54c 156 return 1;
casiotone401 0:cd43a974c54c 157
casiotone401 0:cd43a974c54c 158 } else {
casiotone401 0:cd43a974c54c 159
casiotone401 0:cd43a974c54c 160 return -1;
casiotone401 0:cd43a974c54c 161 }
casiotone401 0:cd43a974c54c 162 }