OSCtoCV Library
OSCtoCV_Euclidean.cpp@2:9fa7540890c9, 2016-01-28 (annotated)
- Committer:
- casiotone401
- Date:
- Thu Jan 28 14:11:50 2016 +0000
- Revision:
- 2:9fa7540890c9
- Parent:
- 1:981b62bb5c87
minor change
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
casiotone401 | 0:cd43a974c54c | 1 | /* |
casiotone401 | 0:cd43a974c54c | 2 | OSCtoCV_Euclidean.cpp |
casiotone401 | 0:cd43a974c54c | 3 | */ |
casiotone401 | 0:cd43a974c54c | 4 | |
casiotone401 | 0:cd43a974c54c | 5 | #include "mbed.h" |
casiotone401 | 0:cd43a974c54c | 6 | #include "OSCtoCV_Euclidean.h" |
casiotone401 | 0:cd43a974c54c | 7 | #include "OSCtoCV.h" |
casiotone401 | 0:cd43a974c54c | 8 | |
casiotone401 | 0:cd43a974c54c | 9 | |
casiotone401 | 0:cd43a974c54c | 10 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 11 | // Global Variables |
casiotone401 | 0:cd43a974c54c | 12 | |
casiotone401 | 0:cd43a974c54c | 13 | int channels = MAXCHANNELS; |
casiotone401 | 0:cd43a974c54c | 14 | unsigned int beat_holder[MAXCHANNELS]; |
casiotone401 | 0:cd43a974c54c | 15 | unsigned int channelbeats[MAXCHANNELS][5]; |
casiotone401 | 0:cd43a974c54c | 16 | |
casiotone401 | 0:cd43a974c54c | 17 | bool pulses_active = false; // is active while a beat pulse is playing |
casiotone401 | 0:cd43a974c54c | 18 | bool lights_active = false; |
casiotone401 | 0:cd43a974c54c | 19 | int pulse_length = TRIGGER_DURATION; //pulse length |
casiotone401 | 0:cd43a974c54c | 20 | |
casiotone401 | 0:cd43a974c54c | 21 | unsigned int last_read[MAXCHANNELS]; |
casiotone401 | 0:cd43a974c54c | 22 | unsigned int last_changed[MAXCHANNELS]; |
casiotone401 | 0:cd43a974c54c | 23 | unsigned int last_sync; |
casiotone401 | 0:cd43a974c54c | 24 | |
casiotone401 | 0:cd43a974c54c | 25 | unsigned int euc_time; |
casiotone401 | 0:cd43a974c54c | 26 | |
casiotone401 | 1:981b62bb5c87 | 27 | int masterclock; |
casiotone401 | 1:981b62bb5c87 | 28 | |
casiotone401 | 0:cd43a974c54c | 29 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 30 | // Euclidean Sequencer |
casiotone401 | 0:cd43a974c54c | 31 | |
casiotone401 | 2:9fa7540890c9 | 32 | unsigned int EuclideanSeq(int trigger, bool reset, bool gatesoff, bool auto_offset) { |
casiotone401 | 0:cd43a974c54c | 33 | /* |
casiotone401 | 0:cd43a974c54c | 34 | What's in the loop: |
casiotone401 | 0:cd43a974c54c | 35 | Update euc_time variable |
casiotone401 | 0:cd43a974c54c | 36 | Check to see if it is euc_time go go to sleep |
casiotone401 | 0:cd43a974c54c | 37 | Changes routine - update beat_holder when channelbeats changes - triggered by changes == true |
casiotone401 | 0:cd43a974c54c | 38 | Trigger routines - on trigget update displays and pulse |
casiotone401 | 0:cd43a974c54c | 39 | Read encoders |
casiotone401 | 0:cd43a974c54c | 40 | Read switches |
casiotone401 | 0:cd43a974c54c | 41 | */ |
casiotone401 | 1:981b62bb5c87 | 42 | |
casiotone401 | 1:981b62bb5c87 | 43 | int offset; |
casiotone401 | 0:cd43a974c54c | 44 | static uint8_t nn, kk, oo; |
casiotone401 | 1:981b62bb5c87 | 45 | static unsigned int cnt_auto_offset; |
casiotone401 | 0:cd43a974c54c | 46 | static uint8_t changes[MAXCHANNELS] = {0}; |
casiotone401 | 0:cd43a974c54c | 47 | static int nknob, kknob, oknob; |
casiotone401 | 0:cd43a974c54c | 48 | static int _nknob, _kknob, _oknob; |
casiotone401 | 0:cd43a974c54c | 49 | static bool triggerState = false; |
casiotone401 | 0:cd43a974c54c | 50 | |
casiotone401 | 0:cd43a974c54c | 51 | uint8_t i, ch; |
casiotone401 | 0:cd43a974c54c | 52 | uint8_t maxn = MAXSTEPS; // maximums and minimums for n and k |
casiotone401 | 0:cd43a974c54c | 53 | uint8_t minn = 1; |
casiotone401 | 0:cd43a974c54c | 54 | uint8_t mink = 1; |
casiotone401 | 0:cd43a974c54c | 55 | uint8_t mino = 0; |
casiotone401 | 0:cd43a974c54c | 56 | |
casiotone401 | 0:cd43a974c54c | 57 | static uint8_t active_channel; |
casiotone401 | 0:cd43a974c54c | 58 | |
casiotone401 | 0:cd43a974c54c | 59 | euc_time = gTimer.read_ms(); |
casiotone401 | 0:cd43a974c54c | 60 | |
casiotone401 | 0:cd43a974c54c | 61 | nn = channelbeats[active_channel][0]; |
casiotone401 | 0:cd43a974c54c | 62 | kk = channelbeats[active_channel][1]; |
casiotone401 | 0:cd43a974c54c | 63 | oo = channelbeats[active_channel][3]; |
casiotone401 | 0:cd43a974c54c | 64 | |
casiotone401 | 1:981b62bb5c87 | 65 | // Stop & Reset (gCtrlSW[0]) |
casiotone401 | 1:981b62bb5c87 | 66 | if (reset) { |
casiotone401 | 1:981b62bb5c87 | 67 | |
casiotone401 | 1:981b62bb5c87 | 68 | for (ch = 0; ch < channels; ++ch) { |
casiotone401 | 1:981b62bb5c87 | 69 | |
casiotone401 | 1:981b62bb5c87 | 70 | for (i = 0; i < MAXSTEPS; ++i) { |
casiotone401 | 1:981b62bb5c87 | 71 | |
casiotone401 | 1:981b62bb5c87 | 72 | for (ch = 0; ch < channels; ++ch) { |
casiotone401 | 1:981b62bb5c87 | 73 | sendMes.setTopAddress(SetMatrixAddress(ch * 2 + 1, i, EUCLID)); // ch * 2 + 1 |
casiotone401 | 1:981b62bb5c87 | 74 | sendMes.setArgs("i", 0); |
casiotone401 | 1:981b62bb5c87 | 75 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 76 | } |
casiotone401 | 1:981b62bb5c87 | 77 | |
casiotone401 | 1:981b62bb5c87 | 78 | } |
casiotone401 | 1:981b62bb5c87 | 79 | |
casiotone401 | 1:981b62bb5c87 | 80 | } |
casiotone401 | 1:981b62bb5c87 | 81 | |
casiotone401 | 1:981b62bb5c87 | 82 | masterclock = cnt_auto_offset = active_channel = channelbeats[ch][2] = 0; |
casiotone401 | 1:981b62bb5c87 | 83 | |
casiotone401 | 2:9fa7540890c9 | 84 | return 0; |
casiotone401 | 1:981b62bb5c87 | 85 | } |
casiotone401 | 1:981b62bb5c87 | 86 | |
casiotone401 | 0:cd43a974c54c | 87 | // UPDATE BEAT HOLDER WHEN KNOBS ARE MOVED |
casiotone401 | 0:cd43a974c54c | 88 | if (changes[active_channel]) { |
casiotone401 | 0:cd43a974c54c | 89 | |
casiotone401 | 0:cd43a974c54c | 90 | beat_holder[active_channel] = Euclid(nn, kk, oo); |
casiotone401 | 0:cd43a974c54c | 91 | |
casiotone401 | 0:cd43a974c54c | 92 | switch (changes[active_channel]) |
casiotone401 | 0:cd43a974c54c | 93 | { |
casiotone401 | 0:cd43a974c54c | 94 | case 1: |
casiotone401 | 0:cd43a974c54c | 95 | case 3: |
casiotone401 | 0:cd43a974c54c | 96 | for (int i = 0; i < MAXSTEPS; ++i) { |
casiotone401 | 0:cd43a974c54c | 97 | |
casiotone401 | 0:cd43a974c54c | 98 | if (BitRead(beat_holder[active_channel], nn - 1 - i) && (i < nn)) { |
casiotone401 | 1:981b62bb5c87 | 99 | sendMes.setTopAddress(SetMatrixAddress(active_channel * 2, i, EUCLID)); |
casiotone401 | 0:cd43a974c54c | 100 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 101 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 102 | |
casiotone401 | 0:cd43a974c54c | 103 | } else { |
casiotone401 | 0:cd43a974c54c | 104 | |
casiotone401 | 1:981b62bb5c87 | 105 | sendMes.setTopAddress(SetMatrixAddress(active_channel * 2, i, EUCLID)); |
casiotone401 | 0:cd43a974c54c | 106 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 107 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 108 | } |
casiotone401 | 0:cd43a974c54c | 109 | } |
casiotone401 | 0:cd43a974c54c | 110 | |
casiotone401 | 0:cd43a974c54c | 111 | break; |
casiotone401 | 0:cd43a974c54c | 112 | |
casiotone401 | 0:cd43a974c54c | 113 | case 2: |
casiotone401 | 0:cd43a974c54c | 114 | for (int i = 0; i < MAXSTEPS; ++i) { |
casiotone401 | 0:cd43a974c54c | 115 | |
casiotone401 | 0:cd43a974c54c | 116 | if (i < nn) { |
casiotone401 | 1:981b62bb5c87 | 117 | sendMes.setTopAddress(SetMatrixAddress(active_channel * 2, i, EUCLID)); |
casiotone401 | 0:cd43a974c54c | 118 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 119 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 120 | |
casiotone401 | 0:cd43a974c54c | 121 | } else { |
casiotone401 | 0:cd43a974c54c | 122 | |
casiotone401 | 1:981b62bb5c87 | 123 | sendMes.setTopAddress(SetMatrixAddress(active_channel * 2, i, EUCLID)); |
casiotone401 | 0:cd43a974c54c | 124 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 125 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 126 | } |
casiotone401 | 0:cd43a974c54c | 127 | } |
casiotone401 | 0:cd43a974c54c | 128 | |
casiotone401 | 0:cd43a974c54c | 129 | break; |
casiotone401 | 0:cd43a974c54c | 130 | |
casiotone401 | 0:cd43a974c54c | 131 | default: |
casiotone401 | 0:cd43a974c54c | 132 | break; |
casiotone401 | 0:cd43a974c54c | 133 | } |
casiotone401 | 0:cd43a974c54c | 134 | |
casiotone401 | 0:cd43a974c54c | 135 | changes[active_channel] = 0; |
casiotone401 | 0:cd43a974c54c | 136 | last_changed[active_channel] = gTimer.read_ms(); |
casiotone401 | 0:cd43a974c54c | 137 | } |
casiotone401 | 0:cd43a974c54c | 138 | |
casiotone401 | 0:cd43a974c54c | 139 | // ANALOG PULSE TRIGGER |
casiotone401 | 0:cd43a974c54c | 140 | if (trigger && !triggerState) { |
casiotone401 | 0:cd43a974c54c | 141 | |
casiotone401 | 0:cd43a974c54c | 142 | Sync(active_channel, gatesoff); |
casiotone401 | 0:cd43a974c54c | 143 | triggerState = true; |
casiotone401 | 1:981b62bb5c87 | 144 | |
casiotone401 | 1:981b62bb5c87 | 145 | if (auto_offset) { |
casiotone401 | 1:981b62bb5c87 | 146 | |
casiotone401 | 1:981b62bb5c87 | 147 | cnt_auto_offset++; |
casiotone401 | 1:981b62bb5c87 | 148 | |
casiotone401 | 1:981b62bb5c87 | 149 | if (cnt_auto_offset == 64) // auto offset |
casiotone401 | 1:981b62bb5c87 | 150 | { |
casiotone401 | 1:981b62bb5c87 | 151 | cnt_auto_offset = 0; |
casiotone401 | 1:981b62bb5c87 | 152 | |
casiotone401 | 1:981b62bb5c87 | 153 | for (i = 0; i < MAXCHANNELS; ++i) |
casiotone401 | 1:981b62bb5c87 | 154 | { |
casiotone401 | 1:981b62bb5c87 | 155 | offset = (MAXSTEPS / 2) - (rand() % (MAXSTEPS - 1)); |
casiotone401 | 1:981b62bb5c87 | 156 | |
casiotone401 | 1:981b62bb5c87 | 157 | if ((oo + offset) > (nn - 1)) { |
casiotone401 | 1:981b62bb5c87 | 158 | |
casiotone401 | 1:981b62bb5c87 | 159 | offset = 0; |
casiotone401 | 1:981b62bb5c87 | 160 | oo = (nn - 1); |
casiotone401 | 1:981b62bb5c87 | 161 | |
casiotone401 | 1:981b62bb5c87 | 162 | } else if ((oo + offset) < mino) { |
casiotone401 | 1:981b62bb5c87 | 163 | |
casiotone401 | 1:981b62bb5c87 | 164 | offset = 0; |
casiotone401 | 1:981b62bb5c87 | 165 | oo = mino; |
casiotone401 | 1:981b62bb5c87 | 166 | } |
casiotone401 | 1:981b62bb5c87 | 167 | |
casiotone401 | 1:981b62bb5c87 | 168 | channelbeats[i][3] = (oo + offset); |
casiotone401 | 1:981b62bb5c87 | 169 | |
casiotone401 | 1:981b62bb5c87 | 170 | last_read[i] = gTimer.read_ms(); |
casiotone401 | 1:981b62bb5c87 | 171 | changes[i] = 3; // o change = 3 |
casiotone401 | 1:981b62bb5c87 | 172 | } |
casiotone401 | 1:981b62bb5c87 | 173 | } |
casiotone401 | 1:981b62bb5c87 | 174 | |
casiotone401 | 1:981b62bb5c87 | 175 | } |
casiotone401 | 1:981b62bb5c87 | 176 | |
casiotone401 | 1:981b62bb5c87 | 177 | |
casiotone401 | 0:cd43a974c54c | 178 | } else if (!trigger) { |
casiotone401 | 0:cd43a974c54c | 179 | |
casiotone401 | 0:cd43a974c54c | 180 | triggerState = false; |
casiotone401 | 0:cd43a974c54c | 181 | } |
casiotone401 | 0:cd43a974c54c | 182 | |
casiotone401 | 0:cd43a974c54c | 183 | // READ K KNOB |
casiotone401 | 0:cd43a974c54c | 184 | kknob = EncodeReadK(active_channel); |
casiotone401 | 0:cd43a974c54c | 185 | |
casiotone401 | 0:cd43a974c54c | 186 | if (_kknob != kknob) { |
casiotone401 | 0:cd43a974c54c | 187 | |
casiotone401 | 0:cd43a974c54c | 188 | _kknob = kknob; |
casiotone401 | 0:cd43a974c54c | 189 | |
casiotone401 | 0:cd43a974c54c | 190 | if (kknob != 0 && (euc_time - last_read[active_channel] > READ_DELAY)) { |
casiotone401 | 0:cd43a974c54c | 191 | |
casiotone401 | 0:cd43a974c54c | 192 | if ((kk + kknob) > nn) { |
casiotone401 | 0:cd43a974c54c | 193 | |
casiotone401 | 0:cd43a974c54c | 194 | kknob = 0; |
casiotone401 | 0:cd43a974c54c | 195 | kk = nn; |
casiotone401 | 0:cd43a974c54c | 196 | |
casiotone401 | 0:cd43a974c54c | 197 | } else if ((kk + kknob) < mink) { |
casiotone401 | 0:cd43a974c54c | 198 | |
casiotone401 | 0:cd43a974c54c | 199 | kknob = 0; |
casiotone401 | 0:cd43a974c54c | 200 | kk = mink; |
casiotone401 | 0:cd43a974c54c | 201 | }; |
casiotone401 | 0:cd43a974c54c | 202 | |
casiotone401 | 0:cd43a974c54c | 203 | kk = channelbeats[active_channel][1] = (kk + kknob); // update with encoder reading |
casiotone401 | 0:cd43a974c54c | 204 | |
casiotone401 | 0:cd43a974c54c | 205 | last_read[active_channel] = gTimer.read_ms(); |
casiotone401 | 0:cd43a974c54c | 206 | changes[active_channel] = 1; // k change = 1 |
casiotone401 | 0:cd43a974c54c | 207 | } |
casiotone401 | 0:cd43a974c54c | 208 | } |
casiotone401 | 0:cd43a974c54c | 209 | |
casiotone401 | 0:cd43a974c54c | 210 | // READ N KNOB |
casiotone401 | 0:cd43a974c54c | 211 | nknob = EncodeReadN(active_channel); |
casiotone401 | 0:cd43a974c54c | 212 | |
casiotone401 | 0:cd43a974c54c | 213 | if (_nknob != nknob) { |
casiotone401 | 0:cd43a974c54c | 214 | |
casiotone401 | 0:cd43a974c54c | 215 | _nknob = nknob; |
casiotone401 | 0:cd43a974c54c | 216 | |
casiotone401 | 0:cd43a974c54c | 217 | if (nknob != 0 && (euc_time - last_read[active_channel] > READ_DELAY)) { |
casiotone401 | 0:cd43a974c54c | 218 | |
casiotone401 | 0:cd43a974c54c | 219 | if ((nn + nknob) > maxn) { |
casiotone401 | 0:cd43a974c54c | 220 | |
casiotone401 | 0:cd43a974c54c | 221 | nknob = 0; |
casiotone401 | 0:cd43a974c54c | 222 | nn = maxn; |
casiotone401 | 0:cd43a974c54c | 223 | |
casiotone401 | 0:cd43a974c54c | 224 | } else if ((nn + nknob) < minn) { |
casiotone401 | 0:cd43a974c54c | 225 | |
casiotone401 | 0:cd43a974c54c | 226 | nknob = 0; |
casiotone401 | 0:cd43a974c54c | 227 | nn = minn; |
casiotone401 | 0:cd43a974c54c | 228 | }; |
casiotone401 | 0:cd43a974c54c | 229 | |
casiotone401 | 0:cd43a974c54c | 230 | if (kk > (nn + nknob)) {// check if new n is lower than k + reduce K if it is |
casiotone401 | 0:cd43a974c54c | 231 | channelbeats[active_channel][1] = (nn + nknob); |
casiotone401 | 0:cd43a974c54c | 232 | }; |
casiotone401 | 0:cd43a974c54c | 233 | |
casiotone401 | 0:cd43a974c54c | 234 | if (oo > (nn + nknob - 1)) {// check if new n is lower than o + reduce o if it is |
casiotone401 | 0:cd43a974c54c | 235 | channelbeats[active_channel][3] = (nn + nknob - 1); |
casiotone401 | 0:cd43a974c54c | 236 | }; |
casiotone401 | 0:cd43a974c54c | 237 | |
casiotone401 | 0:cd43a974c54c | 238 | nn = channelbeats[active_channel][0] = (nn + nknob); // update with encoder reading |
casiotone401 | 0:cd43a974c54c | 239 | oo = channelbeats[active_channel][3]; |
casiotone401 | 0:cd43a974c54c | 240 | |
casiotone401 | 0:cd43a974c54c | 241 | last_read[active_channel] = gTimer.read_ms(); |
casiotone401 | 0:cd43a974c54c | 242 | changes[active_channel] = 2; // n change = 2 |
casiotone401 | 0:cd43a974c54c | 243 | } |
casiotone401 | 0:cd43a974c54c | 244 | |
casiotone401 | 0:cd43a974c54c | 245 | } |
casiotone401 | 0:cd43a974c54c | 246 | |
casiotone401 | 0:cd43a974c54c | 247 | // READ O KNOB |
casiotone401 | 0:cd43a974c54c | 248 | oknob = EncodeReadO(active_channel); |
casiotone401 | 0:cd43a974c54c | 249 | |
casiotone401 | 0:cd43a974c54c | 250 | if (_oknob != oknob) { |
casiotone401 | 0:cd43a974c54c | 251 | |
casiotone401 | 0:cd43a974c54c | 252 | _oknob = oknob; |
casiotone401 | 0:cd43a974c54c | 253 | |
casiotone401 | 0:cd43a974c54c | 254 | if (oknob != 0 && (euc_time - last_read[active_channel] > READ_DELAY)) { |
casiotone401 | 0:cd43a974c54c | 255 | // Sense check o encoder reading to prevent crashes |
casiotone401 | 0:cd43a974c54c | 256 | |
casiotone401 | 0:cd43a974c54c | 257 | if ((oo + oknob) > (nn - 1)) { |
casiotone401 | 0:cd43a974c54c | 258 | |
casiotone401 | 0:cd43a974c54c | 259 | oknob = 0; |
casiotone401 | 0:cd43a974c54c | 260 | oo = (nn - 1); |
casiotone401 | 0:cd43a974c54c | 261 | |
casiotone401 | 0:cd43a974c54c | 262 | } else if ((oo + oknob) < mino) { |
casiotone401 | 0:cd43a974c54c | 263 | |
casiotone401 | 0:cd43a974c54c | 264 | oknob = 0; |
casiotone401 | 0:cd43a974c54c | 265 | oo = mino; |
casiotone401 | 0:cd43a974c54c | 266 | } |
casiotone401 | 0:cd43a974c54c | 267 | |
casiotone401 | 0:cd43a974c54c | 268 | channelbeats[active_channel][3] = (oo + oknob); |
casiotone401 | 0:cd43a974c54c | 269 | |
casiotone401 | 0:cd43a974c54c | 270 | last_read[active_channel] = gTimer.read_ms(); |
casiotone401 | 0:cd43a974c54c | 271 | changes[active_channel] = 3; // o change = 3 |
casiotone401 | 0:cd43a974c54c | 272 | } |
casiotone401 | 0:cd43a974c54c | 273 | |
casiotone401 | 0:cd43a974c54c | 274 | } |
casiotone401 | 0:cd43a974c54c | 275 | |
casiotone401 | 0:cd43a974c54c | 276 | // ENABLE RESET BUTTON ** ADD FLASH RESET HERE *** |
casiotone401 | 0:cd43a974c54c | 277 | if (gCtrlSW[1] && channelbeats[active_channel][2]) { |
casiotone401 | 0:cd43a974c54c | 278 | |
casiotone401 | 0:cd43a974c54c | 279 | for (ch = 0; ch < channels; ++ch) { |
casiotone401 | 0:cd43a974c54c | 280 | channelbeats[ch][2] = 0; |
casiotone401 | 0:cd43a974c54c | 281 | } |
casiotone401 | 0:cd43a974c54c | 282 | } |
casiotone401 | 0:cd43a974c54c | 283 | |
casiotone401 | 0:cd43a974c54c | 284 | // TURN OFF ANY LIGHTS THAT ARE ON |
casiotone401 | 0:cd43a974c54c | 285 | if ((euc_time - last_sync) > pulse_length && lights_active) { |
casiotone401 | 1:981b62bb5c87 | 286 | |
casiotone401 | 0:cd43a974c54c | 287 | for (ch = 0; ch < channels; ++ch) { |
casiotone401 | 1:981b62bb5c87 | 288 | sendMes.setTopAddress(SetMatrixAddress((MAXCHANNELS * 2), 3 - ch, EUCLID)); |
casiotone401 | 0:cd43a974c54c | 289 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 290 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 291 | |
casiotone401 | 1:981b62bb5c87 | 292 | sendMes.setTopAddress(SetMatrixAddress((MAXCHANNELS * 2), 5, EUCLID)); |
casiotone401 | 0:cd43a974c54c | 293 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 294 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 295 | |
casiotone401 | 1:981b62bb5c87 | 296 | } |
casiotone401 | 1:981b62bb5c87 | 297 | |
casiotone401 | 0:cd43a974c54c | 298 | lights_active = false; |
casiotone401 | 0:cd43a974c54c | 299 | } |
casiotone401 | 0:cd43a974c54c | 300 | |
casiotone401 | 0:cd43a974c54c | 301 | // FINISH ANY PULSES THAT ARE ACTIVE - PULSES LAST 1/4 AS LONG AS LIGHTS |
casiotone401 | 0:cd43a974c54c | 302 | if (euc_time - last_sync > (pulse_length / 4) && pulses_active) { |
casiotone401 | 0:cd43a974c54c | 303 | |
casiotone401 | 0:cd43a974c54c | 304 | for (ch = 0; ch < channels; ++ch) { |
casiotone401 | 0:cd43a974c54c | 305 | |
casiotone401 | 0:cd43a974c54c | 306 | if (!gatesoff) |
casiotone401 | 0:cd43a974c54c | 307 | { |
casiotone401 | 0:cd43a974c54c | 308 | gGATES[ch] = false; |
casiotone401 | 0:cd43a974c54c | 309 | gCLOCKOUT = false; |
casiotone401 | 0:cd43a974c54c | 310 | //digitalWrite(sparepin, LOW); |
casiotone401 | 0:cd43a974c54c | 311 | } |
casiotone401 | 0:cd43a974c54c | 312 | } |
casiotone401 | 0:cd43a974c54c | 313 | |
casiotone401 | 0:cd43a974c54c | 314 | pulses_active = false; |
casiotone401 | 0:cd43a974c54c | 315 | } |
casiotone401 | 0:cd43a974c54c | 316 | |
casiotone401 | 0:cd43a974c54c | 317 | ++active_channel; |
casiotone401 | 0:cd43a974c54c | 318 | active_channel &= (channels - 1); |
casiotone401 | 2:9fa7540890c9 | 319 | |
casiotone401 | 2:9fa7540890c9 | 320 | return triggerState; |
casiotone401 | 0:cd43a974c54c | 321 | } |
casiotone401 | 0:cd43a974c54c | 322 | |
casiotone401 | 0:cd43a974c54c | 323 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 324 | // Init Euclidean Sequencer |
casiotone401 | 0:cd43a974c54c | 325 | |
casiotone401 | 0:cd43a974c54c | 326 | void InitEuclideanSeq(void) { |
casiotone401 | 0:cd43a974c54c | 327 | // Initialize Euclid Sequencer |
casiotone401 | 0:cd43a974c54c | 328 | channelbeats[0][0] = 16; |
casiotone401 | 0:cd43a974c54c | 329 | channelbeats[0][1] = 8; |
casiotone401 | 0:cd43a974c54c | 330 | channelbeats[0][2] = 0; |
casiotone401 | 0:cd43a974c54c | 331 | channelbeats[0][3] = 0; |
casiotone401 | 0:cd43a974c54c | 332 | |
casiotone401 | 0:cd43a974c54c | 333 | channelbeats[1][0] = 16; |
casiotone401 | 0:cd43a974c54c | 334 | channelbeats[1][1] = 9; |
casiotone401 | 0:cd43a974c54c | 335 | channelbeats[1][2] = 0; |
casiotone401 | 0:cd43a974c54c | 336 | channelbeats[1][3] = 0; |
casiotone401 | 0:cd43a974c54c | 337 | |
casiotone401 | 0:cd43a974c54c | 338 | channelbeats[2][0] = 16; |
casiotone401 | 0:cd43a974c54c | 339 | channelbeats[2][1] = 7; |
casiotone401 | 0:cd43a974c54c | 340 | channelbeats[2][2] = 0; |
casiotone401 | 0:cd43a974c54c | 341 | channelbeats[2][3] = 0; |
casiotone401 | 0:cd43a974c54c | 342 | |
casiotone401 | 0:cd43a974c54c | 343 | channelbeats[3][0] = 16; |
casiotone401 | 0:cd43a974c54c | 344 | channelbeats[3][1] = 9; |
casiotone401 | 0:cd43a974c54c | 345 | channelbeats[3][2] = 0; |
casiotone401 | 0:cd43a974c54c | 346 | channelbeats[3][3] = 0; |
casiotone401 | 0:cd43a974c54c | 347 | |
casiotone401 | 0:cd43a974c54c | 348 | for (int i = 0; i < channels; ++i) |
casiotone401 | 0:cd43a974c54c | 349 | { |
casiotone401 | 0:cd43a974c54c | 350 | beat_holder[i] = Euclid(channelbeats[i][0], channelbeats[i][1], channelbeats[i][3]); |
casiotone401 | 0:cd43a974c54c | 351 | } |
casiotone401 | 0:cd43a974c54c | 352 | } |
casiotone401 | 0:cd43a974c54c | 353 | |
casiotone401 | 0:cd43a974c54c | 354 | |
casiotone401 | 0:cd43a974c54c | 355 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 356 | // Euclid calculation function |
casiotone401 | 0:cd43a974c54c | 357 | |
casiotone401 | 0:cd43a974c54c | 358 | unsigned int Euclid(int n, int k, int o) { // inputs: n=total, k=beats, o = offset |
casiotone401 | 0:cd43a974c54c | 359 | int pauses = (n - k); |
casiotone401 | 0:cd43a974c54c | 360 | int pulses = k; |
casiotone401 | 0:cd43a974c54c | 361 | int offset = o; |
casiotone401 | 0:cd43a974c54c | 362 | int steps = n; |
casiotone401 | 0:cd43a974c54c | 363 | int per_pulse = (pauses / k); |
casiotone401 | 0:cd43a974c54c | 364 | int remainder = (pauses % pulses); |
casiotone401 | 0:cd43a974c54c | 365 | unsigned int workbeat[n]; |
casiotone401 | 0:cd43a974c54c | 366 | unsigned int outbeat; |
casiotone401 | 0:cd43a974c54c | 367 | uint16_t outbeat2; |
casiotone401 | 0:cd43a974c54c | 368 | int workbeat_count = n; |
casiotone401 | 0:cd43a974c54c | 369 | int a_remainder, b_remainder; |
casiotone401 | 0:cd43a974c54c | 370 | int groupa, groupb; |
casiotone401 | 0:cd43a974c54c | 371 | int i, j; |
casiotone401 | 0:cd43a974c54c | 372 | int trim_count; |
casiotone401 | 0:cd43a974c54c | 373 | |
casiotone401 | 0:cd43a974c54c | 374 | for (i = 0; i < n; ++i) { // Populate workbeat with unsorted pulses and pauses |
casiotone401 | 0:cd43a974c54c | 375 | |
casiotone401 | 0:cd43a974c54c | 376 | if (i < pulses) { |
casiotone401 | 0:cd43a974c54c | 377 | |
casiotone401 | 0:cd43a974c54c | 378 | workbeat[i] = 1; |
casiotone401 | 0:cd43a974c54c | 379 | |
casiotone401 | 0:cd43a974c54c | 380 | } else { |
casiotone401 | 0:cd43a974c54c | 381 | |
casiotone401 | 0:cd43a974c54c | 382 | workbeat[i] = 0; |
casiotone401 | 0:cd43a974c54c | 383 | } |
casiotone401 | 0:cd43a974c54c | 384 | } |
casiotone401 | 0:cd43a974c54c | 385 | |
casiotone401 | 0:cd43a974c54c | 386 | if (per_pulse > 0 && remainder < 2) { // Handle easy cases where there is no or only one remainer |
casiotone401 | 0:cd43a974c54c | 387 | |
casiotone401 | 0:cd43a974c54c | 388 | for (i = 0; i < pulses; ++i) { |
casiotone401 | 0:cd43a974c54c | 389 | |
casiotone401 | 0:cd43a974c54c | 390 | for (j = (workbeat_count - 1); j > (workbeat_count - per_pulse - 1); --j) { |
casiotone401 | 0:cd43a974c54c | 391 | workbeat[i] = ConcatBin(workbeat[i], workbeat[j]); |
casiotone401 | 0:cd43a974c54c | 392 | } |
casiotone401 | 0:cd43a974c54c | 393 | |
casiotone401 | 0:cd43a974c54c | 394 | workbeat_count = (workbeat_count - per_pulse); |
casiotone401 | 0:cd43a974c54c | 395 | |
casiotone401 | 0:cd43a974c54c | 396 | } |
casiotone401 | 0:cd43a974c54c | 397 | |
casiotone401 | 0:cd43a974c54c | 398 | outbeat = 0; // Concatenate workbeat into outbeat - according to workbeat_count |
casiotone401 | 0:cd43a974c54c | 399 | |
casiotone401 | 0:cd43a974c54c | 400 | for (i = 0; i < workbeat_count; ++i) { |
casiotone401 | 0:cd43a974c54c | 401 | outbeat = ConcatBin(outbeat, workbeat[i]); |
casiotone401 | 0:cd43a974c54c | 402 | } |
casiotone401 | 0:cd43a974c54c | 403 | |
casiotone401 | 0:cd43a974c54c | 404 | |
casiotone401 | 0:cd43a974c54c | 405 | if (offset != 0) { |
casiotone401 | 0:cd43a974c54c | 406 | |
casiotone401 | 0:cd43a974c54c | 407 | outbeat2 = BitReadOffset(offset, outbeat, steps); // Add offset to the step pattern |
casiotone401 | 0:cd43a974c54c | 408 | |
casiotone401 | 0:cd43a974c54c | 409 | } else { |
casiotone401 | 0:cd43a974c54c | 410 | |
casiotone401 | 0:cd43a974c54c | 411 | outbeat2 = outbeat; |
casiotone401 | 0:cd43a974c54c | 412 | } |
casiotone401 | 0:cd43a974c54c | 413 | |
casiotone401 | 0:cd43a974c54c | 414 | return outbeat2; |
casiotone401 | 0:cd43a974c54c | 415 | |
casiotone401 | 0:cd43a974c54c | 416 | } else { |
casiotone401 | 0:cd43a974c54c | 417 | |
casiotone401 | 0:cd43a974c54c | 418 | groupa = pulses; |
casiotone401 | 0:cd43a974c54c | 419 | groupb = pauses; |
casiotone401 | 0:cd43a974c54c | 420 | |
casiotone401 | 0:cd43a974c54c | 421 | while (groupb > 1) { //main recursive loop |
casiotone401 | 0:cd43a974c54c | 422 | |
casiotone401 | 0:cd43a974c54c | 423 | if (groupa > groupb) { // more Group A than Group B |
casiotone401 | 0:cd43a974c54c | 424 | |
casiotone401 | 0:cd43a974c54c | 425 | a_remainder = (groupa - groupb); // what will be left of groupa once groupB is interleaved |
casiotone401 | 0:cd43a974c54c | 426 | trim_count = 0; |
casiotone401 | 0:cd43a974c54c | 427 | |
casiotone401 | 0:cd43a974c54c | 428 | for (i = 0; i < (groupa - a_remainder); ++i) { //count through the matching sets of A, ignoring remaindered |
casiotone401 | 0:cd43a974c54c | 429 | workbeat[i] = ConcatBin(workbeat[i], workbeat[workbeat_count - 1 - i]); |
casiotone401 | 0:cd43a974c54c | 430 | ++trim_count; |
casiotone401 | 0:cd43a974c54c | 431 | } |
casiotone401 | 0:cd43a974c54c | 432 | |
casiotone401 | 0:cd43a974c54c | 433 | workbeat_count = (workbeat_count - trim_count); |
casiotone401 | 0:cd43a974c54c | 434 | |
casiotone401 | 0:cd43a974c54c | 435 | groupa = groupb; |
casiotone401 | 0:cd43a974c54c | 436 | groupb = a_remainder; |
casiotone401 | 0:cd43a974c54c | 437 | |
casiotone401 | 0:cd43a974c54c | 438 | } else if (groupb > groupa) { // More Group B than Group A |
casiotone401 | 0:cd43a974c54c | 439 | |
casiotone401 | 0:cd43a974c54c | 440 | b_remainder = (groupb - groupa); // what will be left of group once group A is interleaved |
casiotone401 | 0:cd43a974c54c | 441 | trim_count = 0; |
casiotone401 | 0:cd43a974c54c | 442 | |
casiotone401 | 0:cd43a974c54c | 443 | for (i = workbeat_count-1; i >= (groupa + b_remainder); --i) { //count from right back through the Bs |
casiotone401 | 0:cd43a974c54c | 444 | workbeat[workbeat_count - i - 1] = ConcatBin(workbeat[workbeat_count - 1 - i], workbeat[i]); |
casiotone401 | 0:cd43a974c54c | 445 | ++trim_count; |
casiotone401 | 0:cd43a974c54c | 446 | } |
casiotone401 | 0:cd43a974c54c | 447 | |
casiotone401 | 0:cd43a974c54c | 448 | workbeat_count = (workbeat_count - trim_count); |
casiotone401 | 0:cd43a974c54c | 449 | groupb = b_remainder; |
casiotone401 | 0:cd43a974c54c | 450 | |
casiotone401 | 0:cd43a974c54c | 451 | } else if (groupa == groupb) { // groupa = groupb |
casiotone401 | 0:cd43a974c54c | 452 | |
casiotone401 | 0:cd43a974c54c | 453 | trim_count = 0; |
casiotone401 | 0:cd43a974c54c | 454 | |
casiotone401 | 0:cd43a974c54c | 455 | for (i = 0; i < groupa; ++i) { |
casiotone401 | 0:cd43a974c54c | 456 | workbeat[i] = ConcatBin(workbeat[i], workbeat[workbeat_count - 1 - i]); |
casiotone401 | 0:cd43a974c54c | 457 | ++trim_count; |
casiotone401 | 0:cd43a974c54c | 458 | } |
casiotone401 | 0:cd43a974c54c | 459 | |
casiotone401 | 0:cd43a974c54c | 460 | workbeat_count = (workbeat_count - trim_count); |
casiotone401 | 0:cd43a974c54c | 461 | groupb = 0; |
casiotone401 | 0:cd43a974c54c | 462 | |
casiotone401 | 0:cd43a974c54c | 463 | } |
casiotone401 | 0:cd43a974c54c | 464 | } |
casiotone401 | 0:cd43a974c54c | 465 | |
casiotone401 | 0:cd43a974c54c | 466 | outbeat = 0; // Concatenate workbeat into outbeat - according to workbeat_count |
casiotone401 | 0:cd43a974c54c | 467 | |
casiotone401 | 0:cd43a974c54c | 468 | for (i = 0; i < workbeat_count; ++i) { |
casiotone401 | 0:cd43a974c54c | 469 | |
casiotone401 | 0:cd43a974c54c | 470 | outbeat = ConcatBin(outbeat, workbeat[i]); |
casiotone401 | 0:cd43a974c54c | 471 | } |
casiotone401 | 0:cd43a974c54c | 472 | |
casiotone401 | 0:cd43a974c54c | 473 | if (offset != 0) { |
casiotone401 | 0:cd43a974c54c | 474 | |
casiotone401 | 0:cd43a974c54c | 475 | outbeat2 = BitReadOffset(offset, outbeat, steps); // Add offset to the step pattern |
casiotone401 | 0:cd43a974c54c | 476 | |
casiotone401 | 0:cd43a974c54c | 477 | } else { |
casiotone401 | 0:cd43a974c54c | 478 | |
casiotone401 | 0:cd43a974c54c | 479 | outbeat2 = outbeat; |
casiotone401 | 0:cd43a974c54c | 480 | } |
casiotone401 | 0:cd43a974c54c | 481 | |
casiotone401 | 0:cd43a974c54c | 482 | return outbeat2; |
casiotone401 | 0:cd43a974c54c | 483 | } |
casiotone401 | 0:cd43a974c54c | 484 | } |
casiotone401 | 0:cd43a974c54c | 485 | |
casiotone401 | 0:cd43a974c54c | 486 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 487 | // Reads a bit of a number |
casiotone401 | 0:cd43a974c54c | 488 | |
casiotone401 | 0:cd43a974c54c | 489 | int BitRead(uint16_t b, int bitPos) { |
casiotone401 | 0:cd43a974c54c | 490 | int x; |
casiotone401 | 0:cd43a974c54c | 491 | |
casiotone401 | 0:cd43a974c54c | 492 | x = b & (1 << bitPos); |
casiotone401 | 0:cd43a974c54c | 493 | |
casiotone401 | 0:cd43a974c54c | 494 | return x == 0 ? 0 : 1; |
casiotone401 | 0:cd43a974c54c | 495 | } |
casiotone401 | 0:cd43a974c54c | 496 | |
casiotone401 | 0:cd43a974c54c | 497 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 498 | // Function to right rotate n by d bits |
casiotone401 | 0:cd43a974c54c | 499 | |
casiotone401 | 0:cd43a974c54c | 500 | uint16_t BitReadOffset(int shift, uint16_t value, uint16_t pattern_length) { |
casiotone401 | 0:cd43a974c54c | 501 | uint16_t mask = ((1 << pattern_length) - 1); |
casiotone401 | 0:cd43a974c54c | 502 | value &= mask; |
casiotone401 | 0:cd43a974c54c | 503 | |
casiotone401 | 0:cd43a974c54c | 504 | return ((value >> shift) | (value << (pattern_length - shift))) & mask; |
casiotone401 | 0:cd43a974c54c | 505 | } |
casiotone401 | 0:cd43a974c54c | 506 | |
casiotone401 | 0:cd43a974c54c | 507 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 508 | // Function to find the binary length of a number by counting bitwise |
casiotone401 | 0:cd43a974c54c | 509 | |
casiotone401 | 0:cd43a974c54c | 510 | int findlength(unsigned int bnry) { |
casiotone401 | 0:cd43a974c54c | 511 | bool lengthfound = false; |
casiotone401 | 0:cd43a974c54c | 512 | int i; |
casiotone401 | 0:cd43a974c54c | 513 | int length = 1; // no number can have a length of zero - single 0 has a length of one, but no 1s for the sytem to count |
casiotone401 | 0:cd43a974c54c | 514 | |
casiotone401 | 0:cd43a974c54c | 515 | for (i = 32; i >= 0; i--) { |
casiotone401 | 0:cd43a974c54c | 516 | |
casiotone401 | 0:cd43a974c54c | 517 | if ((BitRead(bnry, i)) && !lengthfound) { |
casiotone401 | 0:cd43a974c54c | 518 | length = (i + 1); |
casiotone401 | 0:cd43a974c54c | 519 | lengthfound = true; |
casiotone401 | 0:cd43a974c54c | 520 | } |
casiotone401 | 0:cd43a974c54c | 521 | |
casiotone401 | 0:cd43a974c54c | 522 | } |
casiotone401 | 0:cd43a974c54c | 523 | |
casiotone401 | 0:cd43a974c54c | 524 | return length; |
casiotone401 | 0:cd43a974c54c | 525 | } |
casiotone401 | 0:cd43a974c54c | 526 | |
casiotone401 | 0:cd43a974c54c | 527 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 528 | // Function to concatenate two binary numbers bitwise |
casiotone401 | 0:cd43a974c54c | 529 | |
casiotone401 | 0:cd43a974c54c | 530 | unsigned int ConcatBin(unsigned int bina, unsigned int binb) { |
casiotone401 | 0:cd43a974c54c | 531 | int binb_len = findlength(binb); |
casiotone401 | 0:cd43a974c54c | 532 | unsigned int sum = (bina << binb_len); |
casiotone401 | 0:cd43a974c54c | 533 | |
casiotone401 | 0:cd43a974c54c | 534 | sum = sum | binb; |
casiotone401 | 0:cd43a974c54c | 535 | |
casiotone401 | 0:cd43a974c54c | 536 | return sum; |
casiotone401 | 0:cd43a974c54c | 537 | } |
casiotone401 | 0:cd43a974c54c | 538 | |
casiotone401 | 0:cd43a974c54c | 539 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 540 | // routine triggered by each beat |
casiotone401 | 0:cd43a974c54c | 541 | |
casiotone401 | 0:cd43a974c54c | 542 | void Sync(int active_channel, bool gatesoff) { |
casiotone401 | 0:cd43a974c54c | 543 | int read_head, erase; |
casiotone401 | 0:cd43a974c54c | 544 | int rand_vel, rand_len; |
casiotone401 | 0:cd43a974c54c | 545 | int ch, i; |
casiotone401 | 1:981b62bb5c87 | 546 | |
casiotone401 | 0:cd43a974c54c | 547 | if (masterclock % 2 == 0) { |
casiotone401 | 1:981b62bb5c87 | 548 | sendMes.setTopAddress(SetMatrixAddress((MAXCHANNELS * 2), 7, EUCLID)); |
casiotone401 | 0:cd43a974c54c | 549 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 550 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 551 | |
casiotone401 | 0:cd43a974c54c | 552 | } else { |
casiotone401 | 0:cd43a974c54c | 553 | |
casiotone401 | 1:981b62bb5c87 | 554 | sendMes.setTopAddress(SetMatrixAddress((MAXCHANNELS * 2), 7, EUCLID)); |
casiotone401 | 0:cd43a974c54c | 555 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 556 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 557 | } |
casiotone401 | 0:cd43a974c54c | 558 | |
casiotone401 | 0:cd43a974c54c | 559 | // Cycle through channels |
casiotone401 | 0:cd43a974c54c | 560 | for (ch = 0; ch < channels; ++ch) { |
casiotone401 | 0:cd43a974c54c | 561 | |
casiotone401 | 0:cd43a974c54c | 562 | read_head = (channelbeats[ch][0] - channelbeats[ch][2] - 1); |
casiotone401 | 0:cd43a974c54c | 563 | |
casiotone401 | 0:cd43a974c54c | 564 | if (ch != active_channel || (euc_time - last_changed[active_channel]) > DISPLAY_UPDATE) { |
casiotone401 | 0:cd43a974c54c | 565 | |
casiotone401 | 0:cd43a974c54c | 566 | if (channelbeats[ch][2] < MAXSTEPS) { |
casiotone401 | 0:cd43a974c54c | 567 | |
casiotone401 | 0:cd43a974c54c | 568 | for (i = 0; i < MAXSTEPS; ++i) { |
casiotone401 | 0:cd43a974c54c | 569 | |
casiotone401 | 0:cd43a974c54c | 570 | if (BitRead(beat_holder[ch],channelbeats[ch][0] - 1 - i) && i < channelbeats[ch][0]) { |
casiotone401 | 0:cd43a974c54c | 571 | |
casiotone401 | 1:981b62bb5c87 | 572 | sendMes.setTopAddress(SetMatrixAddress(ch * 2, i, EUCLID)); |
casiotone401 | 0:cd43a974c54c | 573 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 574 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 575 | |
casiotone401 | 0:cd43a974c54c | 576 | } else { |
casiotone401 | 0:cd43a974c54c | 577 | |
casiotone401 | 1:981b62bb5c87 | 578 | sendMes.setTopAddress(SetMatrixAddress(ch * 2, i, EUCLID)); |
casiotone401 | 0:cd43a974c54c | 579 | sendMes.setArgs("i", 0); |
casiotone401 | 0:cd43a974c54c | 580 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 581 | } |
casiotone401 | 0:cd43a974c54c | 582 | |
casiotone401 | 0:cd43a974c54c | 583 | } |
casiotone401 | 0:cd43a974c54c | 584 | } |
casiotone401 | 0:cd43a974c54c | 585 | } |
casiotone401 | 0:cd43a974c54c | 586 | |
casiotone401 | 1:981b62bb5c87 | 587 | if (!masterclock) { |
casiotone401 | 1:981b62bb5c87 | 588 | |
casiotone401 | 1:981b62bb5c87 | 589 | erase = MAXSTEPS - 1; |
casiotone401 | 1:981b62bb5c87 | 590 | |
casiotone401 | 1:981b62bb5c87 | 591 | } else { |
casiotone401 | 0:cd43a974c54c | 592 | |
casiotone401 | 1:981b62bb5c87 | 593 | erase = masterclock - 1; |
casiotone401 | 1:981b62bb5c87 | 594 | } |
casiotone401 | 1:981b62bb5c87 | 595 | |
casiotone401 | 1:981b62bb5c87 | 596 | sendMes.setTopAddress(SetMatrixAddress((ch * 2) + 1, erase, EUCLID)); |
casiotone401 | 1:981b62bb5c87 | 597 | sendMes.setArgs("i", 0); |
casiotone401 | 1:981b62bb5c87 | 598 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 599 | |
casiotone401 | 1:981b62bb5c87 | 600 | sendMes.setTopAddress(SetMatrixAddress((ch * 2) + 1, masterclock, EUCLID)); |
casiotone401 | 1:981b62bb5c87 | 601 | sendMes.setArgs("i", 1); |
casiotone401 | 1:981b62bb5c87 | 602 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 603 | |
casiotone401 | 0:cd43a974c54c | 604 | // turn on pulses on channels where a beat is present |
casiotone401 | 0:cd43a974c54c | 605 | if (BitRead(beat_holder[ch], read_head)) { |
casiotone401 | 0:cd43a974c54c | 606 | |
casiotone401 | 0:cd43a974c54c | 607 | if (!gatesoff) |
casiotone401 | 0:cd43a974c54c | 608 | { |
casiotone401 | 0:cd43a974c54c | 609 | gGATES[ch] = true; // pulse out |
casiotone401 | 0:cd43a974c54c | 610 | } |
casiotone401 | 1:981b62bb5c87 | 611 | |
casiotone401 | 1:981b62bb5c87 | 612 | sendMes.setTopAddress(SetMatrixAddress((MAXCHANNELS * 2), 3 - ch, EUCLID)); |
casiotone401 | 0:cd43a974c54c | 613 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 614 | osc.sendOsc(&sendMes); |
casiotone401 | 1:981b62bb5c87 | 615 | |
casiotone401 | 0:cd43a974c54c | 616 | lights_active = pulses_active = true; |
casiotone401 | 0:cd43a974c54c | 617 | |
casiotone401 | 0:cd43a974c54c | 618 | if (!ch || (ch == 2)) { |
casiotone401 | 0:cd43a974c54c | 619 | |
casiotone401 | 1:981b62bb5c87 | 620 | rand_vel = 127 - (rand() % 20); // random velocity ch1, ch3 |
casiotone401 | 0:cd43a974c54c | 621 | |
casiotone401 | 0:cd43a974c54c | 622 | } else { |
casiotone401 | 0:cd43a974c54c | 623 | |
casiotone401 | 1:981b62bb5c87 | 624 | rand_vel = 95 - (rand() % 10); // random velocity ch2, ch4 |
casiotone401 | 0:cd43a974c54c | 625 | } |
casiotone401 | 0:cd43a974c54c | 626 | |
casiotone401 | 1:981b62bb5c87 | 627 | rand_len = 127 - (rand() % 17); // random Amp EG Decay |
casiotone401 | 0:cd43a974c54c | 628 | |
casiotone401 | 0:cd43a974c54c | 629 | midi.sendControlChange(0x07, rand_vel, (ch + 1)); // volca sample Vol |
casiotone401 | 0:cd43a974c54c | 630 | midi.sendControlChange(0x30, rand_len, (ch + 1)); // volca sample Amp EG Decay |
casiotone401 | 0:cd43a974c54c | 631 | midi.sendNoteOn(0, 127, (ch + 1)); // volca sample trriger on |
casiotone401 | 0:cd43a974c54c | 632 | } |
casiotone401 | 0:cd43a974c54c | 633 | |
casiotone401 | 0:cd43a974c54c | 634 | // send off pulses to spare output for the first channel |
casiotone401 | 0:cd43a974c54c | 635 | if (!(BitRead(beat_holder[ch], read_head)) && !ch) { // only relates to first channel |
casiotone401 | 0:cd43a974c54c | 636 | |
casiotone401 | 0:cd43a974c54c | 637 | if (!gatesoff) |
casiotone401 | 0:cd43a974c54c | 638 | { |
casiotone401 | 0:cd43a974c54c | 639 | gCLOCKOUT = true; |
casiotone401 | 0:cd43a974c54c | 640 | } |
casiotone401 | 0:cd43a974c54c | 641 | |
casiotone401 | 1:981b62bb5c87 | 642 | sendMes.setTopAddress(SetMatrixAddress((MAXCHANNELS * 2), 5, EUCLID)); |
casiotone401 | 0:cd43a974c54c | 643 | sendMes.setArgs("i", 1); |
casiotone401 | 0:cd43a974c54c | 644 | osc.sendOsc(&sendMes); |
casiotone401 | 0:cd43a974c54c | 645 | |
casiotone401 | 0:cd43a974c54c | 646 | lights_active = pulses_active = true; |
casiotone401 | 0:cd43a974c54c | 647 | } |
casiotone401 | 0:cd43a974c54c | 648 | |
casiotone401 | 0:cd43a974c54c | 649 | // move counter to next position, ready for next pulse |
casiotone401 | 0:cd43a974c54c | 650 | ++channelbeats[ch][2]; |
casiotone401 | 0:cd43a974c54c | 651 | |
casiotone401 | 0:cd43a974c54c | 652 | if ((channelbeats[ch][2]) >= (channelbeats[ch][0])) { |
casiotone401 | 0:cd43a974c54c | 653 | channelbeats[ch][2] = 0; |
casiotone401 | 0:cd43a974c54c | 654 | } |
casiotone401 | 0:cd43a974c54c | 655 | } |
casiotone401 | 0:cd43a974c54c | 656 | |
casiotone401 | 0:cd43a974c54c | 657 | ++masterclock; |
casiotone401 | 0:cd43a974c54c | 658 | masterclock &= (MAXSTEPS - 1); |
casiotone401 | 0:cd43a974c54c | 659 | |
casiotone401 | 0:cd43a974c54c | 660 | pulse_length = ((euc_time - last_sync) / 5); |
casiotone401 | 0:cd43a974c54c | 661 | last_sync = euc_time; |
casiotone401 | 0:cd43a974c54c | 662 | } |
casiotone401 | 0:cd43a974c54c | 663 | |
casiotone401 | 0:cd43a974c54c | 664 | /* 3 functions to read each encoder |
casiotone401 | 0:cd43a974c54c | 665 | returns +1, 0 or -1 dependent on direction |
casiotone401 | 0:cd43a974c54c | 666 | Contains no internal debounce, so calls should be delayed |
casiotone401 | 0:cd43a974c54c | 667 | */ |
casiotone401 | 0:cd43a974c54c | 668 | |
casiotone401 | 0:cd43a974c54c | 669 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 670 | // Check Euclidean Seq N(length) Value |
casiotone401 | 0:cd43a974c54c | 671 | |
casiotone401 | 0:cd43a974c54c | 672 | int EncodeReadN(int ch) { |
casiotone401 | 0:cd43a974c54c | 673 | static float _enc[4]; |
casiotone401 | 0:cd43a974c54c | 674 | int result = 0; |
casiotone401 | 0:cd43a974c54c | 675 | |
casiotone401 | 0:cd43a974c54c | 676 | switch (ch) |
casiotone401 | 0:cd43a974c54c | 677 | { |
casiotone401 | 0:cd43a974c54c | 678 | case 0: |
casiotone401 | 0:cd43a974c54c | 679 | |
casiotone401 | 0:cd43a974c54c | 680 | if (gEucA[0] == 0) { |
casiotone401 | 0:cd43a974c54c | 681 | _enc[ch] = result = 0; |
casiotone401 | 0:cd43a974c54c | 682 | |
casiotone401 | 0:cd43a974c54c | 683 | } else if (gEucA[0] < _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 684 | result = -1; |
casiotone401 | 0:cd43a974c54c | 685 | _enc[ch] = gEucA[0]; |
casiotone401 | 0:cd43a974c54c | 686 | |
casiotone401 | 0:cd43a974c54c | 687 | } else if (gEucA[0] > _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 688 | result = 1; |
casiotone401 | 0:cd43a974c54c | 689 | _enc[ch] = gEucA[0]; |
casiotone401 | 0:cd43a974c54c | 690 | } |
casiotone401 | 0:cd43a974c54c | 691 | |
casiotone401 | 0:cd43a974c54c | 692 | break; |
casiotone401 | 0:cd43a974c54c | 693 | |
casiotone401 | 0:cd43a974c54c | 694 | case 1: |
casiotone401 | 0:cd43a974c54c | 695 | |
casiotone401 | 0:cd43a974c54c | 696 | if (gEucA[3] == 0) { |
casiotone401 | 0:cd43a974c54c | 697 | _enc[ch] = result = 0; |
casiotone401 | 0:cd43a974c54c | 698 | |
casiotone401 | 0:cd43a974c54c | 699 | } else if (gEucA[3] < _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 700 | result = -1; |
casiotone401 | 0:cd43a974c54c | 701 | _enc[ch] = gEucA[3]; |
casiotone401 | 0:cd43a974c54c | 702 | |
casiotone401 | 0:cd43a974c54c | 703 | } else if (gEucA[3] > _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 704 | result = 1; |
casiotone401 | 0:cd43a974c54c | 705 | _enc[ch] = gEucA[3]; |
casiotone401 | 0:cd43a974c54c | 706 | } |
casiotone401 | 0:cd43a974c54c | 707 | |
casiotone401 | 0:cd43a974c54c | 708 | break; |
casiotone401 | 0:cd43a974c54c | 709 | |
casiotone401 | 0:cd43a974c54c | 710 | case 2: |
casiotone401 | 0:cd43a974c54c | 711 | |
casiotone401 | 0:cd43a974c54c | 712 | if (gEucB[0] == 0) { |
casiotone401 | 0:cd43a974c54c | 713 | _enc[ch] = result = 0; |
casiotone401 | 0:cd43a974c54c | 714 | |
casiotone401 | 0:cd43a974c54c | 715 | } else if (gEucB[0] < _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 716 | result = -1; |
casiotone401 | 0:cd43a974c54c | 717 | _enc[ch] = gEucB[0]; |
casiotone401 | 0:cd43a974c54c | 718 | |
casiotone401 | 0:cd43a974c54c | 719 | } else if (gEucB[0] > _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 720 | result = 1; |
casiotone401 | 0:cd43a974c54c | 721 | _enc[ch] = gEucB[0]; |
casiotone401 | 0:cd43a974c54c | 722 | } |
casiotone401 | 0:cd43a974c54c | 723 | |
casiotone401 | 0:cd43a974c54c | 724 | break; |
casiotone401 | 0:cd43a974c54c | 725 | |
casiotone401 | 0:cd43a974c54c | 726 | case 3: |
casiotone401 | 0:cd43a974c54c | 727 | |
casiotone401 | 0:cd43a974c54c | 728 | if (gEucB[3] == 0) { |
casiotone401 | 0:cd43a974c54c | 729 | _enc[ch] = result = 0; |
casiotone401 | 0:cd43a974c54c | 730 | |
casiotone401 | 0:cd43a974c54c | 731 | } else if (gEucB[3] < _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 732 | result = -1; |
casiotone401 | 0:cd43a974c54c | 733 | _enc[ch] = gEucB[3]; |
casiotone401 | 0:cd43a974c54c | 734 | |
casiotone401 | 0:cd43a974c54c | 735 | } else if (gEucB[3] > _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 736 | result = 1; |
casiotone401 | 0:cd43a974c54c | 737 | _enc[ch] = gEucB[3]; |
casiotone401 | 0:cd43a974c54c | 738 | } |
casiotone401 | 0:cd43a974c54c | 739 | |
casiotone401 | 0:cd43a974c54c | 740 | break; |
casiotone401 | 0:cd43a974c54c | 741 | |
casiotone401 | 0:cd43a974c54c | 742 | default: |
casiotone401 | 0:cd43a974c54c | 743 | break; |
casiotone401 | 0:cd43a974c54c | 744 | } |
casiotone401 | 0:cd43a974c54c | 745 | |
casiotone401 | 0:cd43a974c54c | 746 | return result; |
casiotone401 | 0:cd43a974c54c | 747 | } |
casiotone401 | 0:cd43a974c54c | 748 | |
casiotone401 | 0:cd43a974c54c | 749 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 750 | // Check Euclidean Seq K(Density) Value |
casiotone401 | 0:cd43a974c54c | 751 | |
casiotone401 | 0:cd43a974c54c | 752 | int EncodeReadK(int ch) { |
casiotone401 | 0:cd43a974c54c | 753 | static float _enc[4]; |
casiotone401 | 0:cd43a974c54c | 754 | int result = 0; |
casiotone401 | 0:cd43a974c54c | 755 | |
casiotone401 | 0:cd43a974c54c | 756 | switch (ch) |
casiotone401 | 0:cd43a974c54c | 757 | { |
casiotone401 | 0:cd43a974c54c | 758 | case 0: |
casiotone401 | 0:cd43a974c54c | 759 | |
casiotone401 | 0:cd43a974c54c | 760 | if (gEucA[1] == 0) { |
casiotone401 | 0:cd43a974c54c | 761 | _enc[ch] = result = 0; |
casiotone401 | 0:cd43a974c54c | 762 | |
casiotone401 | 0:cd43a974c54c | 763 | } else if (gEucA[1] < _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 764 | result = -1; |
casiotone401 | 0:cd43a974c54c | 765 | _enc[ch] = gEucA[1]; |
casiotone401 | 0:cd43a974c54c | 766 | |
casiotone401 | 0:cd43a974c54c | 767 | } else if (gEucA[1] > _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 768 | result = 1; |
casiotone401 | 0:cd43a974c54c | 769 | _enc[ch] = gEucA[1]; |
casiotone401 | 0:cd43a974c54c | 770 | } |
casiotone401 | 0:cd43a974c54c | 771 | |
casiotone401 | 0:cd43a974c54c | 772 | break; |
casiotone401 | 0:cd43a974c54c | 773 | |
casiotone401 | 0:cd43a974c54c | 774 | case 1: |
casiotone401 | 0:cd43a974c54c | 775 | |
casiotone401 | 0:cd43a974c54c | 776 | if (gEucA[4] == 0) { |
casiotone401 | 0:cd43a974c54c | 777 | _enc[ch] = result = 0; |
casiotone401 | 0:cd43a974c54c | 778 | |
casiotone401 | 0:cd43a974c54c | 779 | } else if (gEucA[4] < _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 780 | result = -4; |
casiotone401 | 0:cd43a974c54c | 781 | _enc[ch] = gEucA[4]; |
casiotone401 | 0:cd43a974c54c | 782 | |
casiotone401 | 0:cd43a974c54c | 783 | } else if (gEucA[4] > _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 784 | result = 4; |
casiotone401 | 0:cd43a974c54c | 785 | _enc[ch] = gEucA[4]; |
casiotone401 | 0:cd43a974c54c | 786 | } |
casiotone401 | 0:cd43a974c54c | 787 | |
casiotone401 | 0:cd43a974c54c | 788 | break; |
casiotone401 | 0:cd43a974c54c | 789 | |
casiotone401 | 0:cd43a974c54c | 790 | case 2: |
casiotone401 | 0:cd43a974c54c | 791 | |
casiotone401 | 0:cd43a974c54c | 792 | if (gEucB[1] == 0) { |
casiotone401 | 0:cd43a974c54c | 793 | _enc[ch] = result = 0; |
casiotone401 | 0:cd43a974c54c | 794 | |
casiotone401 | 0:cd43a974c54c | 795 | } else if (gEucB[1] < _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 796 | result = -1; |
casiotone401 | 0:cd43a974c54c | 797 | _enc[ch] = gEucB[1]; |
casiotone401 | 0:cd43a974c54c | 798 | |
casiotone401 | 0:cd43a974c54c | 799 | } else if (gEucB[1] > _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 800 | result = 1; |
casiotone401 | 0:cd43a974c54c | 801 | _enc[ch] = gEucB[1]; |
casiotone401 | 0:cd43a974c54c | 802 | } |
casiotone401 | 0:cd43a974c54c | 803 | |
casiotone401 | 0:cd43a974c54c | 804 | break; |
casiotone401 | 0:cd43a974c54c | 805 | |
casiotone401 | 0:cd43a974c54c | 806 | case 3: |
casiotone401 | 0:cd43a974c54c | 807 | |
casiotone401 | 0:cd43a974c54c | 808 | if (gEucB[4] == 0) { |
casiotone401 | 0:cd43a974c54c | 809 | _enc[ch] = result = 0; |
casiotone401 | 0:cd43a974c54c | 810 | |
casiotone401 | 0:cd43a974c54c | 811 | } else if (gEucB[4] < _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 812 | result = -1; |
casiotone401 | 0:cd43a974c54c | 813 | _enc[ch] = gEucB[4]; |
casiotone401 | 0:cd43a974c54c | 814 | |
casiotone401 | 0:cd43a974c54c | 815 | } else if (gEucB[4] > _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 816 | result = 1; |
casiotone401 | 0:cd43a974c54c | 817 | _enc[ch] = gEucB[4]; |
casiotone401 | 0:cd43a974c54c | 818 | } |
casiotone401 | 0:cd43a974c54c | 819 | |
casiotone401 | 0:cd43a974c54c | 820 | break; |
casiotone401 | 0:cd43a974c54c | 821 | |
casiotone401 | 0:cd43a974c54c | 822 | default: |
casiotone401 | 0:cd43a974c54c | 823 | break; |
casiotone401 | 0:cd43a974c54c | 824 | } |
casiotone401 | 0:cd43a974c54c | 825 | |
casiotone401 | 0:cd43a974c54c | 826 | return result; |
casiotone401 | 0:cd43a974c54c | 827 | } |
casiotone401 | 0:cd43a974c54c | 828 | |
casiotone401 | 0:cd43a974c54c | 829 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 830 | // Check Euclidean Seq O(Offset) Value |
casiotone401 | 0:cd43a974c54c | 831 | |
casiotone401 | 0:cd43a974c54c | 832 | int EncodeReadO(int ch) { |
casiotone401 | 0:cd43a974c54c | 833 | static float _enc[4]; |
casiotone401 | 0:cd43a974c54c | 834 | int result = 0; |
casiotone401 | 0:cd43a974c54c | 835 | |
casiotone401 | 0:cd43a974c54c | 836 | switch (ch) |
casiotone401 | 0:cd43a974c54c | 837 | { |
casiotone401 | 0:cd43a974c54c | 838 | case 0: |
casiotone401 | 0:cd43a974c54c | 839 | |
casiotone401 | 0:cd43a974c54c | 840 | if (gEucA[2] == 0) { |
casiotone401 | 0:cd43a974c54c | 841 | _enc[ch] = result = 0; |
casiotone401 | 0:cd43a974c54c | 842 | |
casiotone401 | 0:cd43a974c54c | 843 | } else if (gEucA[2] < _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 844 | result = -1; |
casiotone401 | 0:cd43a974c54c | 845 | _enc[ch] = gEucA[2]; |
casiotone401 | 0:cd43a974c54c | 846 | |
casiotone401 | 0:cd43a974c54c | 847 | } else if (gEucA[2] > _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 848 | result = 1; |
casiotone401 | 0:cd43a974c54c | 849 | _enc[ch] = gEucA[2]; |
casiotone401 | 0:cd43a974c54c | 850 | } |
casiotone401 | 0:cd43a974c54c | 851 | |
casiotone401 | 0:cd43a974c54c | 852 | break; |
casiotone401 | 0:cd43a974c54c | 853 | |
casiotone401 | 0:cd43a974c54c | 854 | case 1: |
casiotone401 | 0:cd43a974c54c | 855 | |
casiotone401 | 0:cd43a974c54c | 856 | if (gEucA[5] == 0) { |
casiotone401 | 0:cd43a974c54c | 857 | _enc[ch] = result = 0; |
casiotone401 | 0:cd43a974c54c | 858 | |
casiotone401 | 0:cd43a974c54c | 859 | } else if (gEucA[5] < _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 860 | result = -1; |
casiotone401 | 0:cd43a974c54c | 861 | _enc[ch] = gEucA[5]; |
casiotone401 | 0:cd43a974c54c | 862 | |
casiotone401 | 0:cd43a974c54c | 863 | } else if (gEucA[5] > _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 864 | result = 1; |
casiotone401 | 0:cd43a974c54c | 865 | _enc[ch] = gEucA[5]; |
casiotone401 | 0:cd43a974c54c | 866 | } |
casiotone401 | 0:cd43a974c54c | 867 | |
casiotone401 | 0:cd43a974c54c | 868 | break; |
casiotone401 | 0:cd43a974c54c | 869 | |
casiotone401 | 0:cd43a974c54c | 870 | case 2: |
casiotone401 | 0:cd43a974c54c | 871 | |
casiotone401 | 0:cd43a974c54c | 872 | if (gEucB[2] == 0) { |
casiotone401 | 0:cd43a974c54c | 873 | _enc[ch] = result = 0; |
casiotone401 | 0:cd43a974c54c | 874 | |
casiotone401 | 0:cd43a974c54c | 875 | } else if (gEucB[2] < _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 876 | result = -1; |
casiotone401 | 0:cd43a974c54c | 877 | _enc[ch] = gEucB[2]; |
casiotone401 | 0:cd43a974c54c | 878 | |
casiotone401 | 0:cd43a974c54c | 879 | } else if (gEucB[2] > _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 880 | result = 1; |
casiotone401 | 0:cd43a974c54c | 881 | _enc[ch] = gEucB[2]; |
casiotone401 | 0:cd43a974c54c | 882 | } |
casiotone401 | 0:cd43a974c54c | 883 | |
casiotone401 | 0:cd43a974c54c | 884 | break; |
casiotone401 | 0:cd43a974c54c | 885 | |
casiotone401 | 0:cd43a974c54c | 886 | case 3: |
casiotone401 | 0:cd43a974c54c | 887 | |
casiotone401 | 0:cd43a974c54c | 888 | if (gEucB[5] == 0) { |
casiotone401 | 0:cd43a974c54c | 889 | _enc[ch] = result = 0; |
casiotone401 | 0:cd43a974c54c | 890 | |
casiotone401 | 0:cd43a974c54c | 891 | } else if (gEucB[5] < _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 892 | result = -1; |
casiotone401 | 0:cd43a974c54c | 893 | _enc[ch] = gEucB[5]; |
casiotone401 | 0:cd43a974c54c | 894 | |
casiotone401 | 0:cd43a974c54c | 895 | } else if (gEucB[5] > _enc[ch]) { |
casiotone401 | 0:cd43a974c54c | 896 | result = 1; |
casiotone401 | 0:cd43a974c54c | 897 | _enc[ch] = gEucB[5]; |
casiotone401 | 0:cd43a974c54c | 898 | } |
casiotone401 | 0:cd43a974c54c | 899 | |
casiotone401 | 0:cd43a974c54c | 900 | break; |
casiotone401 | 0:cd43a974c54c | 901 | |
casiotone401 | 0:cd43a974c54c | 902 | default: |
casiotone401 | 0:cd43a974c54c | 903 | break; |
casiotone401 | 0:cd43a974c54c | 904 | } |
casiotone401 | 0:cd43a974c54c | 905 | |
casiotone401 | 0:cd43a974c54c | 906 | return result; |
casiotone401 | 0:cd43a974c54c | 907 | } |