OSC-CV Converter

Dependencies:   Bonjour OSCReceiver TextLCD mbed mbed-rpc BurstSPI DebouncedInterrupt FastIO MIDI OSC OSCtoCV ClockControl

OSC to CV Converter

http://gtbts.tumblr.com/post/125663817741/osc-to-cv-converter-ver2-mbed-osctocv

/media/uploads/casiotone401/tumblr_nsg7y4pkfg1qlle9fo1_540.png

Committer:
casiotone401
Date:
Thu May 26 10:46:48 2016 +0000
Revision:
31:0595b7456780
Parent:
29:8b61b87b9676
bugfix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
casiotone401 0:a4d93cd4c30d 1 //-------------------------------------------------------------
casiotone401 20:a44f4a024902 2 // TI DAC8568 OSCtoCV Converter
casiotone401 0:a4d93cd4c30d 3 //
casiotone401 0:a4d93cd4c30d 4 // DAC8568 16bit Octal DAC http://www.ti.com/product/dac8568
casiotone401 0:a4d93cd4c30d 5 //
casiotone401 0:a4d93cd4c30d 6 // referred to
casiotone401 0:a4d93cd4c30d 7 // xshige's OSCReceiver
casiotone401 0:a4d93cd4c30d 8 // http://mbed.org/users/xshige/programs/OSCReceiver/
casiotone401 0:a4d93cd4c30d 9 // radiojunkbox's OSC-CV_Example
casiotone401 0:a4d93cd4c30d 10 // http://mbed.org/users/radiojunkbox/code/KAMUI_OSC-CV_Example/
casiotone401 0:a4d93cd4c30d 11 // Robin Price's Homebrew midi-cv box
casiotone401 0:a4d93cd4c30d 12 // http://crx091081gb.net/?p=69
casiotone401 0:a4d93cd4c30d 13 // Masahiro Hattori's TextLCD Module Functions
casiotone401 0:a4d93cd4c30d 14 // http://www.eleclabo.com/denshi/device/lcd1602/gcram.html
casiotone401 0:a4d93cd4c30d 15 // Dirk-Willem van Gulik's BonjourLib
casiotone401 0:a4d93cd4c30d 16 // http://mbed.org/users/dirkx/code/BonjourLib/file/bb6472f455e8/services/mDNS
casiotone401 0:a4d93cd4c30d 17 //
casiotone401 0:a4d93cd4c30d 18 // Released under the MIT License: http://mbed.org/license/mit
casiotone401 0:a4d93cd4c30d 19 //-------------------------------------------------------------
casiotone401 0:a4d93cd4c30d 20
casiotone401 0:a4d93cd4c30d 21 #pragma O3
casiotone401 0:a4d93cd4c30d 22 #pragma Otime
casiotone401 0:a4d93cd4c30d 23
casiotone401 0:a4d93cd4c30d 24 #include "mbed.h"
casiotone401 15:3e4bc47d6a39 25 #include "FastIO.h"
casiotone401 20:a44f4a024902 26 //#include "FastAnalogIn.h"
casiotone401 15:3e4bc47d6a39 27 #include "DebouncedInterrupt.h"
casiotone401 0:a4d93cd4c30d 28 #include "TextLCD.h" //edit "writeCommand" "writeData" protected -> public
casiotone401 0:a4d93cd4c30d 29 #include "EthernetNetIf.h"
casiotone401 0:a4d93cd4c30d 30 #include "HTTPServer.h"
casiotone401 0:a4d93cd4c30d 31 #include "mDNSResponder.h" // mDNS response to announce oneselve
casiotone401 0:a4d93cd4c30d 32 #include "UDPSocket.h"
casiotone401 0:a4d93cd4c30d 33 #include "OSCReceiver.h"
casiotone401 15:3e4bc47d6a39 34 #include "mbedOSC.h"
casiotone401 15:3e4bc47d6a39 35 #include "MIDI.h"
casiotone401 24:99045b0f7c4a 36 #include "ClockControl.h" // https://developer.mbed.org/users/JST2011/code/ClockControl/
casiotone401 20:a44f4a024902 37 #include "OSCtoCV.h"
casiotone401 20:a44f4a024902 38 #include "OSCtoCV_Sequencer.h"
casiotone401 20:a44f4a024902 39 #include "OSCtoCV_GateSequencer.h"
casiotone401 20:a44f4a024902 40 #include "OSCtoCV_Euclidean.h"
casiotone401 21:2273c3676f1b 41 #include "OSCtoCV_Random.h"
casiotone401 21:2273c3676f1b 42 #include "OSCtoCV_LFO.h"
casiotone401 20:a44f4a024902 43
casiotone401 0:a4d93cd4c30d 44 #include <stdlib.h>
casiotone401 0:a4d93cd4c30d 45 #include <ctype.h>
casiotone401 1:fd4f70088311 46 #include <math.h>
casiotone401 0:a4d93cd4c30d 47
casiotone401 0:a4d93cd4c30d 48 //-------------------------------------------------------------
casiotone401 20:a44f4a024902 49 // Macros
casiotone401 0:a4d93cd4c30d 50
casiotone401 26:8673d5254f7d 51 #define MODE_CLB 0 // Calibration (for VCO Tuning)
casiotone401 15:3e4bc47d6a39 52 #define MODE_OSC 1 // Mode OSCtoCV
casiotone401 15:3e4bc47d6a39 53 #define MODE_SEQ 2 // Mode Shift Sequencer
casiotone401 15:3e4bc47d6a39 54 #define MODE_185 3 // Mode M185 Sequencer
casiotone401 24:99045b0f7c4a 55 #define MODE_437 4 // Mode 437 Sequencer
casiotone401 24:99045b0f7c4a 56 #define MODE_EUC 5 // Mode Euclidean Sequencer
casiotone401 24:99045b0f7c4a 57 #define MODE_RND 6 // Mode xshift Random Generator
casiotone401 24:99045b0f7c4a 58 #define MODE_LFO 7 // Mode Stepped LFO
casiotone401 15:3e4bc47d6a39 59
casiotone401 24:99045b0f7c4a 60 #define MODE_TOTAL 8 // Modes
casiotone401 0:a4d93cd4c30d 61
casiotone401 0:a4d93cd4c30d 62 //-------------------------------------------------------------
casiotone401 0:a4d93cd4c30d 63 // Functions
casiotone401 0:a4d93cd4c30d 64
casiotone401 15:3e4bc47d6a39 65 void InitOSCCV(void);
casiotone401 4:b9f5ae574447 66 inline void NetPoll(void);
casiotone401 20:a44f4a024902 67 void CalibrationCV(void);
casiotone401 15:3e4bc47d6a39 68 inline void SetCV(void);
casiotone401 15:3e4bc47d6a39 69 inline int CheckBPM(void);
casiotone401 29:8b61b87b9676 70 inline float CheckGlide(void);
casiotone401 29:8b61b87b9676 71 inline float CheckDuration(void);
casiotone401 20:a44f4a024902 72 void CheckModeSW(void);
casiotone401 29:8b61b87b9676 73 inline void UpdateLCD();
casiotone401 0:a4d93cd4c30d 74 void WriteCustomChar(unsigned char, unsigned char*);
casiotone401 0:a4d93cd4c30d 75 int SetupEthNetIf(void);
casiotone401 4:b9f5ae574447 76 inline void onUDPSocketEvent(UDPSocketEvent);
casiotone401 20:a44f4a024902 77
casiotone401 0:a4d93cd4c30d 78
casiotone401 0:a4d93cd4c30d 79 //-------------------------------------------------------------
casiotone401 20:a44f4a024902 80 // Global Variables
casiotone401 0:a4d93cd4c30d 81
casiotone401 0:a4d93cd4c30d 82 // CV Meter Custom Character
casiotone401 0:a4d93cd4c30d 83 unsigned char str1[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F};
casiotone401 0:a4d93cd4c30d 84 unsigned char str2[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F};
casiotone401 0:a4d93cd4c30d 85 unsigned char str3[8] = {0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F};
casiotone401 0:a4d93cd4c30d 86 unsigned char str4[8] = {0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F};
casiotone401 0:a4d93cd4c30d 87 unsigned char str5[8] = {0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F};
casiotone401 0:a4d93cd4c30d 88 unsigned char str6[8] = {0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F};
casiotone401 0:a4d93cd4c30d 89 unsigned char str7[8] = {0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F};
casiotone401 0:a4d93cd4c30d 90 unsigned char str8[8] = {0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F};
casiotone401 0:a4d93cd4c30d 91
casiotone401 20:a44f4a024902 92 // OSCtoCV Converter Mode
casiotone401 20:a44f4a024902 93 int gMode;
casiotone401 15:3e4bc47d6a39 94
casiotone401 20:a44f4a024902 95 // UDP Socket
casiotone401 20:a44f4a024902 96 UDPSocket gUdp;
casiotone401 15:3e4bc47d6a39 97
casiotone401 0:a4d93cd4c30d 98 //-------------------------------------------------------------
casiotone401 0:a4d93cd4c30d 99 // main
casiotone401 0:a4d93cd4c30d 100
casiotone401 0:a4d93cd4c30d 101 int main()
casiotone401 0:a4d93cd4c30d 102 {
casiotone401 29:8b61b87b9676 103 float duration;
casiotone401 15:3e4bc47d6a39 104 int bpm;
casiotone401 20:a44f4a024902 105
casiotone401 29:8b61b87b9676 106 InitOSCCV();
casiotone401 24:99045b0f7c4a 107
casiotone401 24:99045b0f7c4a 108 // Init LCD
casiotone401 29:8b61b87b9676 109 UpdateLCD();
casiotone401 24:99045b0f7c4a 110
casiotone401 15:3e4bc47d6a39 111 // Main loop
casiotone401 15:3e4bc47d6a39 112 while (1)
casiotone401 24:99045b0f7c4a 113 {
casiotone401 29:8b61b87b9676 114 UpdateLCD(); // Check Text LCD Mode Status
casiotone401 15:3e4bc47d6a39 115
casiotone401 29:8b61b87b9676 116 CheckGlide(); // check glide value
casiotone401 15:3e4bc47d6a39 117
casiotone401 17:55e5136790a6 118 bpm = CheckBPM(); // check current BPM
casiotone401 17:55e5136790a6 119
casiotone401 29:8b61b87b9676 120 duration = CheckDuration(); // check current duration(Gate length)
casiotone401 27:65e873bf8307 121
casiotone401 15:3e4bc47d6a39 122 switch (gMode)
casiotone401 15:3e4bc47d6a39 123 {
casiotone401 15:3e4bc47d6a39 124 case MODE_OSC: // OSCtoCV mode
casiotone401 15:3e4bc47d6a39 125
casiotone401 15:3e4bc47d6a39 126 SetCV();
casiotone401 15:3e4bc47d6a39 127 break;
casiotone401 15:3e4bc47d6a39 128
casiotone401 15:3e4bc47d6a39 129 case MODE_SEQ: // Shift Sequencer mode
casiotone401 15:3e4bc47d6a39 130
casiotone401 15:3e4bc47d6a39 131 GateSeq(bpm, N8TH, GATE2, 3, NON_INVERT, GATESOUT_ON, SYNC_OFF);
casiotone401 15:3e4bc47d6a39 132
casiotone401 15:3e4bc47d6a39 133 if (gCtrlSW[3])
casiotone401 24:99045b0f7c4a 134 { // euclid sequencer auto offset
casiotone401 29:8b61b87b9676 135 ShiftCVSeq(EuclideanSeq(GateSeq(bpm, N16TH, SUBGATE, (duration * 12.0f), NON_INVERT, GATESOUT_OFF, SYNC_ON), gCtrlSW[0], GATESOUT_OFF, true), gCtrlSW[0], CV_CHANNEL8);
casiotone401 24:99045b0f7c4a 136
casiotone401 24:99045b0f7c4a 137 } else {
casiotone401 25:6b29d7e631cb 138
casiotone401 29:8b61b87b9676 139 ShiftCVSeq(BeatsSeq(GateSeq(bpm, N16TH, SUBGATE, (duration * 8.0f), NON_INVERT, GATESOUT_OFF, SYNC_ON), gCtrlSW[0], GATESOUT_OFF), gCtrlSW[0], CV_CHANNEL8);
casiotone401 15:3e4bc47d6a39 140 }
casiotone401 15:3e4bc47d6a39 141 break;
casiotone401 15:3e4bc47d6a39 142
casiotone401 15:3e4bc47d6a39 143 case MODE_185: // M185 Sequencer mode
casiotone401 15:3e4bc47d6a39 144
casiotone401 25:6b29d7e631cb 145
casiotone401 24:99045b0f7c4a 146 GateSeq(bpm, N8TH, GATE2, 3, NON_INVERT, GATESOUT_ON, SYNC_OFF);
casiotone401 24:99045b0f7c4a 147
casiotone401 24:99045b0f7c4a 148 if (gCtrlSW[3])
casiotone401 24:99045b0f7c4a 149 { // euclid sequencer auto offset
casiotone401 29:8b61b87b9676 150 M185Seq(EuclideanSeq(GateSeq(bpm, N16TH, SUBGATE, (duration * 12.0f), NON_INVERT, GATESOUT_OFF, SYNC_ON), gCtrlSW[0], GATESOUT_OFF, true), gCtrlSW[0], CV_CHANNEL8);
casiotone401 25:6b29d7e631cb 151
casiotone401 24:99045b0f7c4a 152 } else {
casiotone401 25:6b29d7e631cb 153
casiotone401 29:8b61b87b9676 154 M185Seq(BeatsSeq(GateSeq(bpm, N16TH, SUBGATE, (duration * 8.0f), NON_INVERT, GATESOUT_OFF, SYNC_ON), gCtrlSW[0], GATESOUT_OFF), gCtrlSW[0], CV_CHANNEL8);
casiotone401 24:99045b0f7c4a 155 }
casiotone401 24:99045b0f7c4a 156 break;
casiotone401 24:99045b0f7c4a 157
casiotone401 24:99045b0f7c4a 158 case MODE_437: // F437 sequencer
casiotone401 25:6b29d7e631cb 159
casiotone401 15:3e4bc47d6a39 160 GateSeq(bpm, N8TH, GATE2, 3, NON_INVERT, GATESOUT_ON, SYNC_OFF);
casiotone401 15:3e4bc47d6a39 161
casiotone401 15:3e4bc47d6a39 162 if (gCtrlSW[3])
casiotone401 24:99045b0f7c4a 163 { // euclid sequencer auto offset
casiotone401 29:8b61b87b9676 164 PolyCVSeq(EuclideanSeq(GateSeq(bpm, N16TH, SUBGATE, (duration * 12.0f), NON_INVERT, GATESOUT_OFF, SYNC_ON), gCtrlSW[0], GATESOUT_OFF, true), gCtrlSW[0]);
casiotone401 25:6b29d7e631cb 165
casiotone401 24:99045b0f7c4a 166 } else {
casiotone401 25:6b29d7e631cb 167
casiotone401 29:8b61b87b9676 168 PolyCVSeq(BeatsSeq(GateSeq(bpm, N16TH, SUBGATE, (duration * 8.0f), NON_INVERT, GATESOUT_OFF, SYNC_ON), gCtrlSW[0], GATESOUT_OFF), gCtrlSW[0]);
casiotone401 15:3e4bc47d6a39 169 }
casiotone401 15:3e4bc47d6a39 170 break;
casiotone401 24:99045b0f7c4a 171
casiotone401 15:3e4bc47d6a39 172 case MODE_EUC: // Euclidean Sequencer mode
casiotone401 15:3e4bc47d6a39 173
casiotone401 29:8b61b87b9676 174 ShiftCVSeq(GateSeq(bpm, N1ST, SUBGATE, (duration * 5.0f), NON_INVERT, GATESOUT_OFF, SYNC_OFF), gCtrlSW[0], CV_CHANNEL8);
casiotone401 24:99045b0f7c4a 175 EuclideanSeq(GateSeq(bpm, N16TH, GATE1, 3, NON_INVERT, GATESOUT_OFF, SYNC_OFF), gCtrlSW[0], GATESOUT_ON, false);
casiotone401 15:3e4bc47d6a39 176 break;
casiotone401 24:99045b0f7c4a 177
casiotone401 21:2273c3676f1b 178 case MODE_RND: // Random CV Generator mode
casiotone401 24:99045b0f7c4a 179
casiotone401 29:8b61b87b9676 180 RandomCVGenerator(GateSeq(bpm, N32TH, GATE1, (duration * 5.0f), NON_INVERT, GATESOUT_OFF, SYNC_ON));
casiotone401 21:2273c3676f1b 181 break;
casiotone401 21:2273c3676f1b 182
casiotone401 21:2273c3676f1b 183 case MODE_LFO: // Stepped LFO mode
casiotone401 24:99045b0f7c4a 184
casiotone401 27:65e873bf8307 185 SteppedLFO(CV_CHANNEL1, false); // LFO out ch1 ~ ch8
casiotone401 21:2273c3676f1b 186 break;
casiotone401 24:99045b0f7c4a 187
casiotone401 15:3e4bc47d6a39 188 default: // CV Calibration mode
casiotone401 15:3e4bc47d6a39 189
casiotone401 15:3e4bc47d6a39 190 CalibrationCV();
casiotone401 15:3e4bc47d6a39 191 break;
casiotone401 15:3e4bc47d6a39 192 }
casiotone401 15:3e4bc47d6a39 193
casiotone401 15:3e4bc47d6a39 194 }
casiotone401 15:3e4bc47d6a39 195 }
casiotone401 15:3e4bc47d6a39 196
casiotone401 15:3e4bc47d6a39 197 //-------------------------------------------------------------
casiotone401 20:a44f4a024902 198 // Ethernet Polling
casiotone401 20:a44f4a024902 199
casiotone401 20:a44f4a024902 200 inline void NetPoll()
casiotone401 20:a44f4a024902 201 {
casiotone401 20:a44f4a024902 202 Net::poll();
casiotone401 20:a44f4a024902 203 }
casiotone401 20:a44f4a024902 204
casiotone401 20:a44f4a024902 205 //-------------------------------------------------------------
casiotone401 15:3e4bc47d6a39 206 // Initialize OSCtoCV
casiotone401 15:3e4bc47d6a39 207
casiotone401 15:3e4bc47d6a39 208 void InitOSCCV()
casiotone401 15:3e4bc47d6a39 209 {
casiotone401 20:a44f4a024902 210
casiotone401 24:99045b0f7c4a 211 // Set System Frequency 120Mhz
casiotone401 24:99045b0f7c4a 212 setSystemFrequency(0x3, 0x1, 15, 1);
casiotone401 20:a44f4a024902 213 wait(0.5);
casiotone401 20:a44f4a024902 214
casiotone401 20:a44f4a024902 215 // Setup Ethernet
casiotone401 20:a44f4a024902 216 SetupEthNetIf();
casiotone401 20:a44f4a024902 217
casiotone401 20:a44f4a024902 218 // Announce mdnsResponder (Bonjour)
casiotone401 20:a44f4a024902 219 HTTPServer svr;
casiotone401 20:a44f4a024902 220 mDNSResponder mdns;
casiotone401 20:a44f4a024902 221
casiotone401 20:a44f4a024902 222 svr.addHandler<SimpleHandler>("/");
casiotone401 20:a44f4a024902 223 svr.bind(INPUT_PORT);
casiotone401 20:a44f4a024902 224 IpAddr ip = gEth.getIp();
casiotone401 20:a44f4a024902 225 mdns.announce(ip, "OSCtoCV", "_osc._udp", INPUT_PORT, "mbed(OSCtoCV)", (char *[]) {"path=/",NULL});
casiotone401 20:a44f4a024902 226
casiotone401 15:3e4bc47d6a39 227 // Write custom char LCD CGRAM
casiotone401 15:3e4bc47d6a39 228 WriteCustomChar(0x00, str1);
casiotone401 15:3e4bc47d6a39 229 WriteCustomChar(0x01, str2);
casiotone401 15:3e4bc47d6a39 230 WriteCustomChar(0x02, str3);
casiotone401 15:3e4bc47d6a39 231 WriteCustomChar(0x03, str4);
casiotone401 15:3e4bc47d6a39 232 WriteCustomChar(0x04, str5);
casiotone401 15:3e4bc47d6a39 233 WriteCustomChar(0x05, str6);
casiotone401 15:3e4bc47d6a39 234 WriteCustomChar(0x06, str7);
casiotone401 15:3e4bc47d6a39 235 WriteCustomChar(0x07, str8);
casiotone401 15:3e4bc47d6a39 236
casiotone401 15:3e4bc47d6a39 237 // Init SPI
casiotone401 15:3e4bc47d6a39 238 gLDAC = _ENABLE;
casiotone401 27:65e873bf8307 239 gSPI.format(8, 1); // Data word length 8bit, Mode=1
casiotone401 15:3e4bc47d6a39 240 gSPI.frequency(SPI_RATE);
casiotone401 15:3e4bc47d6a39 241
casiotone401 15:3e4bc47d6a39 242 UpdateCV(CLR, 0, 0); // Ignore CLR Pin
casiotone401 24:99045b0f7c4a 243
casiotone401 24:99045b0f7c4a 244 // Init Euclidean Sequencer
casiotone401 24:99045b0f7c4a 245 InitEuclideanSeq();
casiotone401 24:99045b0f7c4a 246
casiotone401 24:99045b0f7c4a 247 // Init Glide value
casiotone401 24:99045b0f7c4a 248 gGlide = gAIN.read();
casiotone401 29:8b61b87b9676 249
casiotone401 29:8b61b87b9676 250 // Init Mode
casiotone401 29:8b61b87b9676 251 gMode = MODE_CLB;
casiotone401 29:8b61b87b9676 252
casiotone401 29:8b61b87b9676 253 // Init Sequencer Data
casiotone401 29:8b61b87b9676 254 for (int i = 0; i < 16; ++i)
casiotone401 29:8b61b87b9676 255 {
casiotone401 29:8b61b87b9676 256 if (i < 8)
casiotone401 29:8b61b87b9676 257 {
casiotone401 29:8b61b87b9676 258 g185_cv[i] = (calibMap1[69] * SCALING_N);
casiotone401 29:8b61b87b9676 259 gBeatsLevel[i] = gBeatsDecay[i] = 1;
casiotone401 29:8b61b87b9676 260 }
casiotone401 29:8b61b87b9676 261
casiotone401 29:8b61b87b9676 262 gSeq_cv[i] = (calibMap1[69] * SCALING_N);
casiotone401 29:8b61b87b9676 263 }
casiotone401 29:8b61b87b9676 264
casiotone401 15:3e4bc47d6a39 265 // Set OSC message for sending
casiotone401 15:3e4bc47d6a39 266 sendMes.setIp(touchOSCAddress);
casiotone401 15:3e4bc47d6a39 267 sendMes.setPort(touchOSCPort);
casiotone401 3:ca15241dd6b4 268
casiotone401 29:8b61b87b9676 269 gSW.attach(&CheckModeSW, IRQ_RISE, 20); // InterruptIn rising edge(ModeSW)
casiotone401 17:55e5136790a6 270 wait(0.5);
casiotone401 15:3e4bc47d6a39 271
casiotone401 17:55e5136790a6 272 gPoller.attach_us(&NetPoll, POLLING_INTERVAL); // Ticker Polling
casiotone401 27:65e873bf8307 273 wait(0.2);
casiotone401 0:a4d93cd4c30d 274 }
casiotone401 0:a4d93cd4c30d 275
casiotone401 0:a4d93cd4c30d 276 //-------------------------------------------------------------
casiotone401 15:3e4bc47d6a39 277 // Calibration Mode
casiotone401 15:3e4bc47d6a39 278
casiotone401 20:a44f4a024902 279 void CalibrationCV()
casiotone401 14:977f3c5a4b4e 280 {
casiotone401 14:977f3c5a4b4e 281 static int ch;
casiotone401 14:977f3c5a4b4e 282 unsigned int cv;
casiotone401 14:977f3c5a4b4e 283
casiotone401 29:8b61b87b9676 284 cv = (unsigned int)(calibMap1[69] * SCALING_N); // A880.0Hz
casiotone401 14:977f3c5a4b4e 285
casiotone401 29:8b61b87b9676 286 gSUBGATE = gGATES[0] = gGATES[1] = gGATES[2] = gGATES[3] = true;
casiotone401 29:8b61b87b9676 287
casiotone401 29:8b61b87b9676 288 UpdateCV(WRITE_UPDATE_N, ch, &cv);
casiotone401 27:65e873bf8307 289 UpdateCVMeter(ch, &cv);
casiotone401 27:65e873bf8307 290
casiotone401 27:65e873bf8307 291 ++ch;
casiotone401 27:65e873bf8307 292 ch &= 0x07;
casiotone401 14:977f3c5a4b4e 293 }
casiotone401 14:977f3c5a4b4e 294
casiotone401 14:977f3c5a4b4e 295 //-------------------------------------------------------------
casiotone401 14:977f3c5a4b4e 296 // Calculate CV
casiotone401 14:977f3c5a4b4e 297
casiotone401 15:3e4bc47d6a39 298 inline void SetCV()
casiotone401 14:977f3c5a4b4e 299 {
casiotone401 27:65e873bf8307 300 static int ch, mcount;
casiotone401 14:977f3c5a4b4e 301 static float glidecv[8];
casiotone401 14:977f3c5a4b4e 302 unsigned int cv;
casiotone401 14:977f3c5a4b4e 303 static float qcv;
casiotone401 14:977f3c5a4b4e 304
casiotone401 27:65e873bf8307 305 switch (CheckQuantizeMode())
casiotone401 14:977f3c5a4b4e 306 {
casiotone401 14:977f3c5a4b4e 307 case Lin:
casiotone401 14:977f3c5a4b4e 308
casiotone401 14:977f3c5a4b4e 309 glidecv[ch] = glidecv[ch] * gGlide + gOSC_cv[ch] * (1.0f - gGlide);
casiotone401 14:977f3c5a4b4e 310 break;
casiotone401 14:977f3c5a4b4e 311
casiotone401 14:977f3c5a4b4e 312 case Chr:
casiotone401 15:3e4bc47d6a39 313
casiotone401 15:3e4bc47d6a39 314 qcv = calibMap1[(unsigned int)MapFloat(gOSC_cv[ch], 0, SCALING_N, 0, (QUAN_RES1 - 1))];
casiotone401 14:977f3c5a4b4e 315
casiotone401 14:977f3c5a4b4e 316 glidecv[ch] = glidecv[ch] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide);
casiotone401 14:977f3c5a4b4e 317 break;
casiotone401 14:977f3c5a4b4e 318
casiotone401 15:3e4bc47d6a39 319 case Maj:
casiotone401 15:3e4bc47d6a39 320
casiotone401 15:3e4bc47d6a39 321 qcv = calibMap2[(unsigned int)MapFloat(gOSC_cv[ch], 0, SCALING_N, 0, (QUAN_RES2 - 1))];
casiotone401 15:3e4bc47d6a39 322
casiotone401 14:977f3c5a4b4e 323 glidecv[ch] = glidecv[ch] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide);
casiotone401 14:977f3c5a4b4e 324 break;
casiotone401 15:3e4bc47d6a39 325
casiotone401 15:3e4bc47d6a39 326 case M7:
casiotone401 14:977f3c5a4b4e 327
casiotone401 15:3e4bc47d6a39 328 qcv = calibMap3[(unsigned int)MapFloat(gOSC_cv[ch], 0, SCALING_N, 0, (QUAN_RES3 - 1))];
casiotone401 14:977f3c5a4b4e 329
casiotone401 14:977f3c5a4b4e 330 glidecv[ch] = glidecv[ch] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide);
casiotone401 15:3e4bc47d6a39 331 break;
casiotone401 15:3e4bc47d6a39 332
casiotone401 15:3e4bc47d6a39 333 case Min7:
casiotone401 15:3e4bc47d6a39 334
casiotone401 15:3e4bc47d6a39 335 qcv = calibMap4[(unsigned int)MapFloat(gOSC_cv[ch], 0, SCALING_N, 0, (QUAN_RES4 - 1))];
casiotone401 15:3e4bc47d6a39 336
casiotone401 15:3e4bc47d6a39 337 glidecv[ch] = glidecv[ch] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide);
casiotone401 15:3e4bc47d6a39 338 break;
casiotone401 15:3e4bc47d6a39 339
casiotone401 15:3e4bc47d6a39 340 case Dor:
casiotone401 15:3e4bc47d6a39 341
casiotone401 15:3e4bc47d6a39 342 qcv = calibMap5[(unsigned int)MapFloat(gOSC_cv[ch], 0, SCALING_N, 0, (QUAN_RES5 - 1))];
casiotone401 15:3e4bc47d6a39 343
casiotone401 15:3e4bc47d6a39 344 glidecv[ch] = glidecv[ch] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide);
casiotone401 15:3e4bc47d6a39 345
casiotone401 15:3e4bc47d6a39 346 break;
casiotone401 15:3e4bc47d6a39 347
casiotone401 15:3e4bc47d6a39 348 case Min:
casiotone401 15:3e4bc47d6a39 349
casiotone401 15:3e4bc47d6a39 350 qcv = calibMap6[(unsigned int)MapFloat(gOSC_cv[ch], 0, SCALING_N, 0, (QUAN_RES6 - 1))];
casiotone401 15:3e4bc47d6a39 351
casiotone401 15:3e4bc47d6a39 352 glidecv[ch] = glidecv[ch] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide);
casiotone401 15:3e4bc47d6a39 353 break;
casiotone401 15:3e4bc47d6a39 354
casiotone401 15:3e4bc47d6a39 355 case S5th:
casiotone401 15:3e4bc47d6a39 356
casiotone401 15:3e4bc47d6a39 357 qcv = calibMap7[(unsigned int)MapFloat(gOSC_cv[ch], 0, SCALING_N, 0, (QUAN_RES7 - 1))];
casiotone401 15:3e4bc47d6a39 358
casiotone401 15:3e4bc47d6a39 359 glidecv[ch] = glidecv[ch] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide);
casiotone401 15:3e4bc47d6a39 360 break;
casiotone401 15:3e4bc47d6a39 361
casiotone401 15:3e4bc47d6a39 362 case Wht:
casiotone401 15:3e4bc47d6a39 363
casiotone401 15:3e4bc47d6a39 364 qcv = calibMap8[(unsigned int)MapFloat(gOSC_cv[ch], 0, SCALING_N, 0, (QUAN_RES8 - 1))];
casiotone401 15:3e4bc47d6a39 365
casiotone401 15:3e4bc47d6a39 366 glidecv[ch] = glidecv[ch] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide);
casiotone401 14:977f3c5a4b4e 367 break;
casiotone401 14:977f3c5a4b4e 368 }
casiotone401 17:55e5136790a6 369
casiotone401 17:55e5136790a6 370 cv = (unsigned int)glidecv[ch];
casiotone401 17:55e5136790a6 371
casiotone401 17:55e5136790a6 372 UpdateCV(WRITE_UPDATE_N, ch, &cv);
casiotone401 14:977f3c5a4b4e 373
casiotone401 17:55e5136790a6 374 if (mcount == 0x1F)
casiotone401 17:55e5136790a6 375 {
casiotone401 17:55e5136790a6 376 UpdateCVMeter(ch, &cv);
casiotone401 17:55e5136790a6 377 }
casiotone401 17:55e5136790a6 378
casiotone401 17:55e5136790a6 379 ++ch;
casiotone401 17:55e5136790a6 380
casiotone401 17:55e5136790a6 381 if (ch &= 0x07)
casiotone401 17:55e5136790a6 382 {
casiotone401 17:55e5136790a6 383 ++mcount;
casiotone401 17:55e5136790a6 384 mcount &= 0x3F;
casiotone401 17:55e5136790a6 385 }
casiotone401 14:977f3c5a4b4e 386 }
casiotone401 14:977f3c5a4b4e 387
casiotone401 15:3e4bc47d6a39 388
casiotone401 5:e305509d53f3 389 //-------------------------------------------------------------
casiotone401 15:3e4bc47d6a39 390 // Check BPM
casiotone401 15:3e4bc47d6a39 391
casiotone401 15:3e4bc47d6a39 392 inline int CheckBPM()
casiotone401 15:3e4bc47d6a39 393 {
casiotone401 15:3e4bc47d6a39 394 static int _bpm = -1;
casiotone401 15:3e4bc47d6a39 395 int bpm;
casiotone401 14:977f3c5a4b4e 396
casiotone401 15:3e4bc47d6a39 397 if (gCtrlSW[0])
casiotone401 14:977f3c5a4b4e 398 {
casiotone401 15:3e4bc47d6a39 399 bpm = 0;
casiotone401 15:3e4bc47d6a39 400
casiotone401 15:3e4bc47d6a39 401 return bpm;
casiotone401 0:a4d93cd4c30d 402 }
casiotone401 3:ca15241dd6b4 403
casiotone401 20:a44f4a024902 404 if (gCtrl[0]) {
casiotone401 15:3e4bc47d6a39 405
casiotone401 15:3e4bc47d6a39 406 bpm = (gCtrl[0] * 240 + 5);
casiotone401 15:3e4bc47d6a39 407
casiotone401 29:8b61b87b9676 408 if (bpm != _bpm)
casiotone401 15:3e4bc47d6a39 409 {
casiotone401 15:3e4bc47d6a39 410 _bpm = bpm;
casiotone401 15:3e4bc47d6a39 411
casiotone401 15:3e4bc47d6a39 412 sendMes.setTopAddress("/bpm");
casiotone401 15:3e4bc47d6a39 413 sendMes.setArgs("i", bpm);
casiotone401 15:3e4bc47d6a39 414 osc.sendOsc(&sendMes);
casiotone401 27:65e873bf8307 415
casiotone401 27:65e873bf8307 416 sendMes.setTopAddress("/ctrl1");
casiotone401 27:65e873bf8307 417 sendMes.setArgs("f", gCtrl[0]);
casiotone401 27:65e873bf8307 418 osc.sendOsc(&sendMes);
casiotone401 15:3e4bc47d6a39 419 }
casiotone401 15:3e4bc47d6a39 420 }
casiotone401 15:3e4bc47d6a39 421
casiotone401 15:3e4bc47d6a39 422 return bpm;
casiotone401 15:3e4bc47d6a39 423 }
casiotone401 15:3e4bc47d6a39 424
casiotone401 15:3e4bc47d6a39 425 //-------------------------------------------------------------
casiotone401 29:8b61b87b9676 426 // Check Glide Value
casiotone401 29:8b61b87b9676 427
casiotone401 29:8b61b87b9676 428 inline float CheckGlide()
casiotone401 29:8b61b87b9676 429 {
casiotone401 29:8b61b87b9676 430 static float _pot;
casiotone401 29:8b61b87b9676 431 float pot = 0;
casiotone401 29:8b61b87b9676 432
casiotone401 29:8b61b87b9676 433 pot = gAIN.read(); // Update glide value
casiotone401 29:8b61b87b9676 434
casiotone401 29:8b61b87b9676 435 if (!pot) // when (glide pot value == 0) && MODE_OSC
casiotone401 29:8b61b87b9676 436 { // use gCtrl[3] value
casiotone401 29:8b61b87b9676 437 if (abs(gCtrl[3] - _pot) > 0.01f)
casiotone401 29:8b61b87b9676 438 {
casiotone401 29:8b61b87b9676 439 _pot = gGlide = gCtrl[3];
casiotone401 29:8b61b87b9676 440
casiotone401 29:8b61b87b9676 441 gLCD.locate( 9, 1 );
casiotone401 29:8b61b87b9676 442 gLCD.printf("G>>%3.2f", gGlide);
casiotone401 29:8b61b87b9676 443 }
casiotone401 29:8b61b87b9676 444
casiotone401 29:8b61b87b9676 445 } else if (abs(pot - _pot) > 0.01f) {
casiotone401 29:8b61b87b9676 446
casiotone401 29:8b61b87b9676 447 _pot = gGlide = pot;
casiotone401 29:8b61b87b9676 448
casiotone401 29:8b61b87b9676 449 gLCD.locate( 9, 1 );
casiotone401 29:8b61b87b9676 450 gLCD.printf("G>>%3.2f", gGlide);
casiotone401 29:8b61b87b9676 451 }
casiotone401 29:8b61b87b9676 452
casiotone401 29:8b61b87b9676 453 return pot;
casiotone401 29:8b61b87b9676 454 }
casiotone401 29:8b61b87b9676 455
casiotone401 29:8b61b87b9676 456 //-------------------------------------------------------------
casiotone401 29:8b61b87b9676 457 // Check Duration Value
casiotone401 29:8b61b87b9676 458
casiotone401 29:8b61b87b9676 459 inline float CheckDuration()
casiotone401 29:8b61b87b9676 460 {
casiotone401 29:8b61b87b9676 461 static float _duration = 0.6f;
casiotone401 29:8b61b87b9676 462
casiotone401 29:8b61b87b9676 463 if (_duration != gCtrl[6]) // check current gate duration
casiotone401 29:8b61b87b9676 464 {
casiotone401 29:8b61b87b9676 465 sendMes.setTopAddress("/ctrl7");
casiotone401 29:8b61b87b9676 466 sendMes.setArgs("f", gCtrl[6]);
casiotone401 29:8b61b87b9676 467 osc.sendOsc(&sendMes);
casiotone401 29:8b61b87b9676 468
casiotone401 29:8b61b87b9676 469 _duration = gCtrl[6];
casiotone401 29:8b61b87b9676 470 }
casiotone401 29:8b61b87b9676 471
casiotone401 29:8b61b87b9676 472 return gCtrl[6];
casiotone401 29:8b61b87b9676 473 }
casiotone401 29:8b61b87b9676 474
casiotone401 29:8b61b87b9676 475 //-------------------------------------------------------------
casiotone401 15:3e4bc47d6a39 476 // Check Mode SW
casiotone401 15:3e4bc47d6a39 477
casiotone401 20:a44f4a024902 478 void CheckModeSW()
casiotone401 15:3e4bc47d6a39 479 {
casiotone401 15:3e4bc47d6a39 480 if (gMode < MODE_TOTAL - 1)
casiotone401 15:3e4bc47d6a39 481 {
casiotone401 15:3e4bc47d6a39 482 ++gMode;
casiotone401 15:3e4bc47d6a39 483
casiotone401 15:3e4bc47d6a39 484 } else {
casiotone401 15:3e4bc47d6a39 485
casiotone401 15:3e4bc47d6a39 486 gMode = 0;
casiotone401 15:3e4bc47d6a39 487 }
casiotone401 15:3e4bc47d6a39 488
casiotone401 15:3e4bc47d6a39 489 gCLOCKOUT = gGATES[0] = gGATES[1] = gGATES[2] = gGATES[3] = false;
casiotone401 21:2273c3676f1b 490 gSubModeCount1 = gSubModeCount2 = 0;
casiotone401 15:3e4bc47d6a39 491
casiotone401 24:99045b0f7c4a 492 if (gMode != MODE_CLB || gMode != MODE_OSC)
casiotone401 15:3e4bc47d6a39 493 {
casiotone401 15:3e4bc47d6a39 494 gTimer.start(); // Sequencer Timer Start
casiotone401 15:3e4bc47d6a39 495 midi.begin(1);
casiotone401 5:e305509d53f3 496
casiotone401 15:3e4bc47d6a39 497 } else {
casiotone401 15:3e4bc47d6a39 498
casiotone401 15:3e4bc47d6a39 499 gTimer.stop(); // Sequencer Timer Stop
casiotone401 5:e305509d53f3 500 }
casiotone401 5:e305509d53f3 501
casiotone401 4:b9f5ae574447 502 }
casiotone401 4:b9f5ae574447 503
casiotone401 4:b9f5ae574447 504 //-------------------------------------------------------------
casiotone401 15:3e4bc47d6a39 505 // Print LCD Mode Status
casiotone401 15:3e4bc47d6a39 506
casiotone401 29:8b61b87b9676 507 inline void UpdateLCD()
casiotone401 15:3e4bc47d6a39 508 {
casiotone401 15:3e4bc47d6a39 509 static int _mode = -1;
casiotone401 15:3e4bc47d6a39 510 static int _qmode = -1;
casiotone401 15:3e4bc47d6a39 511 static int qmode;
casiotone401 15:3e4bc47d6a39 512
casiotone401 15:3e4bc47d6a39 513 if (_mode != gMode)
casiotone401 15:3e4bc47d6a39 514 {
casiotone401 15:3e4bc47d6a39 515 sendMes.setTopAddress("/mode");
casiotone401 15:3e4bc47d6a39 516
casiotone401 15:3e4bc47d6a39 517 switch (gMode)
casiotone401 15:3e4bc47d6a39 518 {
casiotone401 24:99045b0f7c4a 519 case MODE_CLB:
casiotone401 15:3e4bc47d6a39 520 gLCD.locate( 9, 0 );
casiotone401 15:3e4bc47d6a39 521 gLCD.printf("CLB|880");
casiotone401 15:3e4bc47d6a39 522
casiotone401 21:2273c3676f1b 523 gLCD.locate( 0, 1 );
casiotone401 21:2273c3676f1b 524 gLCD.printf("12345678 G>>%3.2f", gGlide);
casiotone401 21:2273c3676f1b 525
casiotone401 15:3e4bc47d6a39 526 sendMes.setArgs("s", "Calibration");
casiotone401 15:3e4bc47d6a39 527 osc.sendOsc(&sendMes);
casiotone401 15:3e4bc47d6a39 528
casiotone401 15:3e4bc47d6a39 529 sendMes.setTopAddress("/scale");
casiotone401 15:3e4bc47d6a39 530 sendMes.setArgs("s", "880Hz");
casiotone401 15:3e4bc47d6a39 531
casiotone401 15:3e4bc47d6a39 532 _qmode = -1;
casiotone401 15:3e4bc47d6a39 533 break;
casiotone401 15:3e4bc47d6a39 534
casiotone401 15:3e4bc47d6a39 535 case MODE_OSC:
casiotone401 15:3e4bc47d6a39 536 gLCD.locate( 9, 0 );
casiotone401 15:3e4bc47d6a39 537 gLCD.printf("OSC|");
casiotone401 15:3e4bc47d6a39 538
casiotone401 15:3e4bc47d6a39 539 sendMes.setArgs("s", "OSCtoCV");
casiotone401 15:3e4bc47d6a39 540 break;
casiotone401 15:3e4bc47d6a39 541
casiotone401 15:3e4bc47d6a39 542 case MODE_SEQ:
casiotone401 15:3e4bc47d6a39 543 gLCD.locate( 9, 0 );
casiotone401 15:3e4bc47d6a39 544 gLCD.printf("ASR|");
casiotone401 15:3e4bc47d6a39 545
casiotone401 15:3e4bc47d6a39 546 sendMes.setArgs("s", "ASR SEQ");
casiotone401 15:3e4bc47d6a39 547 break;
casiotone401 15:3e4bc47d6a39 548
casiotone401 15:3e4bc47d6a39 549 case MODE_185:
casiotone401 15:3e4bc47d6a39 550 gLCD.locate( 9, 0 );
casiotone401 15:3e4bc47d6a39 551 gLCD.printf("185|");
casiotone401 15:3e4bc47d6a39 552
casiotone401 15:3e4bc47d6a39 553 sendMes.setArgs("s", "M185 SEQ");
casiotone401 15:3e4bc47d6a39 554 break;
casiotone401 24:99045b0f7c4a 555
casiotone401 24:99045b0f7c4a 556 case MODE_437:
casiotone401 24:99045b0f7c4a 557 gLCD.locate( 9, 0 );
casiotone401 24:99045b0f7c4a 558 gLCD.printf("437|");
casiotone401 24:99045b0f7c4a 559
casiotone401 24:99045b0f7c4a 560 sendMes.setArgs("s", "F437 SEQ");
casiotone401 24:99045b0f7c4a 561
casiotone401 24:99045b0f7c4a 562 break;
casiotone401 15:3e4bc47d6a39 563
casiotone401 15:3e4bc47d6a39 564 case MODE_EUC:
casiotone401 15:3e4bc47d6a39 565 gLCD.locate( 9, 0 );
casiotone401 15:3e4bc47d6a39 566 gLCD.printf("EUC|");
casiotone401 15:3e4bc47d6a39 567
casiotone401 15:3e4bc47d6a39 568 sendMes.setArgs("s", "Euclidean SEQ");
casiotone401 15:3e4bc47d6a39 569 break;
casiotone401 24:99045b0f7c4a 570
casiotone401 24:99045b0f7c4a 571 case MODE_RND:
casiotone401 24:99045b0f7c4a 572 gLCD.locate( 9, 0 );
casiotone401 24:99045b0f7c4a 573 gLCD.printf("RND|");
casiotone401 24:99045b0f7c4a 574
casiotone401 24:99045b0f7c4a 575 sendMes.setArgs("s", "Xorshift Random");
casiotone401 24:99045b0f7c4a 576 break;
casiotone401 15:3e4bc47d6a39 577
casiotone401 24:99045b0f7c4a 578 case MODE_LFO:
casiotone401 24:99045b0f7c4a 579 gLCD.locate( 9, 0 );
casiotone401 24:99045b0f7c4a 580 gLCD.printf("LFO|");
casiotone401 24:99045b0f7c4a 581
casiotone401 24:99045b0f7c4a 582 sendMes.setArgs("s", "Stepped LFO");
casiotone401 24:99045b0f7c4a 583 break;
casiotone401 24:99045b0f7c4a 584
casiotone401 15:3e4bc47d6a39 585 default:
casiotone401 15:3e4bc47d6a39 586 break;
casiotone401 15:3e4bc47d6a39 587 }
casiotone401 15:3e4bc47d6a39 588
casiotone401 15:3e4bc47d6a39 589 osc.sendOsc(&sendMes);
casiotone401 15:3e4bc47d6a39 590 _mode = gMode;
casiotone401 15:3e4bc47d6a39 591 }
casiotone401 15:3e4bc47d6a39 592
casiotone401 27:65e873bf8307 593 qmode = (gCtrl[1] * (SCALE_TOTAL - 1));
casiotone401 15:3e4bc47d6a39 594
casiotone401 17:55e5136790a6 595 if (_qmode != qmode)
casiotone401 15:3e4bc47d6a39 596 {
casiotone401 15:3e4bc47d6a39 597 sendMes.setTopAddress("/scale");
casiotone401 15:3e4bc47d6a39 598
casiotone401 15:3e4bc47d6a39 599 switch (qmode)
casiotone401 15:3e4bc47d6a39 600 {
casiotone401 15:3e4bc47d6a39 601 case Lin:
casiotone401 15:3e4bc47d6a39 602 gLCD.locate( 13, 0 );
casiotone401 15:3e4bc47d6a39 603 gLCD.printf("lin");
casiotone401 15:3e4bc47d6a39 604
casiotone401 15:3e4bc47d6a39 605 sendMes.setArgs("s", "Linear");
casiotone401 15:3e4bc47d6a39 606 break;
casiotone401 15:3e4bc47d6a39 607
casiotone401 15:3e4bc47d6a39 608 case Chr:
casiotone401 15:3e4bc47d6a39 609 gLCD.locate( 13, 0 );
casiotone401 15:3e4bc47d6a39 610 gLCD.printf("chr");
casiotone401 15:3e4bc47d6a39 611
casiotone401 15:3e4bc47d6a39 612 sendMes.setArgs("s", "Chromatic");
casiotone401 15:3e4bc47d6a39 613 break;
casiotone401 15:3e4bc47d6a39 614
casiotone401 15:3e4bc47d6a39 615 case Maj:
casiotone401 15:3e4bc47d6a39 616 gLCD.locate( 13, 0 );
casiotone401 15:3e4bc47d6a39 617 gLCD.printf("maj");
casiotone401 15:3e4bc47d6a39 618
casiotone401 15:3e4bc47d6a39 619 sendMes.setArgs("s", "Major");
casiotone401 15:3e4bc47d6a39 620 break;
casiotone401 15:3e4bc47d6a39 621
casiotone401 15:3e4bc47d6a39 622 case M7:
casiotone401 15:3e4bc47d6a39 623 gLCD.locate( 13, 0 );
casiotone401 15:3e4bc47d6a39 624 gLCD.printf("ma7");
casiotone401 15:3e4bc47d6a39 625
casiotone401 15:3e4bc47d6a39 626 sendMes.setArgs("s", "Major7");
casiotone401 15:3e4bc47d6a39 627 break;
casiotone401 15:3e4bc47d6a39 628
casiotone401 15:3e4bc47d6a39 629 case Min7:
casiotone401 15:3e4bc47d6a39 630 gLCD.locate( 13, 0 );
casiotone401 15:3e4bc47d6a39 631 gLCD.printf("mi7");
casiotone401 15:3e4bc47d6a39 632
casiotone401 15:3e4bc47d6a39 633 sendMes.setArgs("s", "Minor7");
casiotone401 15:3e4bc47d6a39 634
casiotone401 15:3e4bc47d6a39 635 break;
casiotone401 15:3e4bc47d6a39 636
casiotone401 15:3e4bc47d6a39 637 case Dor:
casiotone401 15:3e4bc47d6a39 638 gLCD.locate( 13, 0 );
casiotone401 15:3e4bc47d6a39 639 gLCD.printf("dor");
casiotone401 15:3e4bc47d6a39 640
casiotone401 15:3e4bc47d6a39 641 sendMes.setArgs("s", "Dorian");
casiotone401 15:3e4bc47d6a39 642 break;
casiotone401 15:3e4bc47d6a39 643
casiotone401 15:3e4bc47d6a39 644 case Min:
casiotone401 15:3e4bc47d6a39 645 gLCD.locate( 13, 0 );
casiotone401 15:3e4bc47d6a39 646 gLCD.printf("min");
casiotone401 15:3e4bc47d6a39 647
casiotone401 15:3e4bc47d6a39 648 sendMes.setTopAddress("/scale");
casiotone401 15:3e4bc47d6a39 649 sendMes.setArgs("s", "Minor");
casiotone401 15:3e4bc47d6a39 650 break;
casiotone401 15:3e4bc47d6a39 651
casiotone401 15:3e4bc47d6a39 652 case S5th:
casiotone401 15:3e4bc47d6a39 653 gLCD.locate( 13, 0 );
casiotone401 15:3e4bc47d6a39 654 gLCD.printf("5th");
casiotone401 15:3e4bc47d6a39 655
casiotone401 15:3e4bc47d6a39 656 sendMes.setArgs("s", "5th");
casiotone401 15:3e4bc47d6a39 657 break;
casiotone401 15:3e4bc47d6a39 658
casiotone401 15:3e4bc47d6a39 659 case Wht:
casiotone401 15:3e4bc47d6a39 660 gLCD.locate( 13, 0 );
casiotone401 15:3e4bc47d6a39 661 gLCD.printf("wht");
casiotone401 15:3e4bc47d6a39 662
casiotone401 15:3e4bc47d6a39 663 sendMes.setArgs("s", "Whole Tone");
casiotone401 15:3e4bc47d6a39 664 break;
casiotone401 15:3e4bc47d6a39 665
casiotone401 15:3e4bc47d6a39 666 default:
casiotone401 15:3e4bc47d6a39 667 break;
casiotone401 15:3e4bc47d6a39 668 }
casiotone401 15:3e4bc47d6a39 669
casiotone401 15:3e4bc47d6a39 670 osc.sendOsc(&sendMes);
casiotone401 15:3e4bc47d6a39 671 _qmode = qmode;
casiotone401 15:3e4bc47d6a39 672 }
casiotone401 15:3e4bc47d6a39 673
casiotone401 4:b9f5ae574447 674 }
casiotone401 4:b9f5ae574447 675
casiotone401 15:3e4bc47d6a39 676
casiotone401 0:a4d93cd4c30d 677 //-------------------------------------------------------------
casiotone401 15:3e4bc47d6a39 678 // Write command Custom Char LCD CGRAM for CV Meter)
casiotone401 0:a4d93cd4c30d 679
casiotone401 0:a4d93cd4c30d 680 void WriteCustomChar(unsigned char addr, unsigned char *c)
casiotone401 0:a4d93cd4c30d 681 {
casiotone401 0:a4d93cd4c30d 682 char cnt = 0;
casiotone401 0:a4d93cd4c30d 683 addr = ((addr << 3) | 0x40);
casiotone401 0:a4d93cd4c30d 684
casiotone401 15:3e4bc47d6a39 685 while (cnt < 0x08)
casiotone401 0:a4d93cd4c30d 686 {
casiotone401 0:a4d93cd4c30d 687 gLCD.writeCommand(addr | cnt);
casiotone401 0:a4d93cd4c30d 688 gLCD.writeData(*c);
casiotone401 4:b9f5ae574447 689
casiotone401 15:3e4bc47d6a39 690 ++cnt;
casiotone401 15:3e4bc47d6a39 691 ++c;
casiotone401 0:a4d93cd4c30d 692 }
casiotone401 0:a4d93cd4c30d 693 }
casiotone401 0:a4d93cd4c30d 694
casiotone401 0:a4d93cd4c30d 695 //-------------------------------------------------------------
casiotone401 0:a4d93cd4c30d 696 // Setup Ethernet port
casiotone401 0:a4d93cd4c30d 697
casiotone401 0:a4d93cd4c30d 698 int SetupEthNetIf()
casiotone401 0:a4d93cd4c30d 699 {
casiotone401 0:a4d93cd4c30d 700 gLCD.locate( 0, 1 );
casiotone401 0:a4d93cd4c30d 701 gLCD.printf("Setting up... ");
casiotone401 0:a4d93cd4c30d 702 // printf("Setting up...\r\n");
casiotone401 0:a4d93cd4c30d 703 EthernetErr ethErr = gEth.setup();
casiotone401 0:a4d93cd4c30d 704
casiotone401 15:3e4bc47d6a39 705 if (ethErr)
casiotone401 0:a4d93cd4c30d 706 {
casiotone401 0:a4d93cd4c30d 707 gLCD.locate( 0, 1 );
casiotone401 0:a4d93cd4c30d 708 gLCD.printf("Error in setup.");
casiotone401 0:a4d93cd4c30d 709 // printf("Error %d in setup.\r\n", ethErr);
casiotone401 0:a4d93cd4c30d 710 return -1;
casiotone401 0:a4d93cd4c30d 711 }
casiotone401 0:a4d93cd4c30d 712 // printf("Setup OK\r\n");
casiotone401 0:a4d93cd4c30d 713
casiotone401 0:a4d93cd4c30d 714 // printf("IP address %d.%d.%d.%d\r\n", gEth.getIp()[0], gEth.getIp()[1], gEth.getIp()[2], gEth.getIp()[3]);
casiotone401 0:a4d93cd4c30d 715 Host broadcast(IpAddr(gEth.getIp()[0], gEth.getIp()[1], gEth.getIp()[2], 255), INPUT_PORT, NULL);
casiotone401 0:a4d93cd4c30d 716 gUdp.setOnEvent(&onUDPSocketEvent);
casiotone401 0:a4d93cd4c30d 717 gUdp.bind(broadcast);
casiotone401 4:b9f5ae574447 718
casiotone401 0:a4d93cd4c30d 719 gLCD.locate( 0, 1 );
casiotone401 0:a4d93cd4c30d 720 gLCD.printf("%03d.%03d.%03d.%03d", gEth.getIp()[0], gEth.getIp()[1], gEth.getIp()[2], gEth.getIp()[3]);
casiotone401 15:3e4bc47d6a39 721
casiotone401 4:b9f5ae574447 722 wait(1.0);
casiotone401 0:a4d93cd4c30d 723
casiotone401 0:a4d93cd4c30d 724 return 0;
casiotone401 0:a4d93cd4c30d 725 }
casiotone401 0:a4d93cd4c30d 726
casiotone401 14:977f3c5a4b4e 727
casiotone401 14:977f3c5a4b4e 728 //-------------------------------------------------------------
casiotone401 15:3e4bc47d6a39 729 // Handller receive OSC UDP Packet
casiotone401 0:a4d93cd4c30d 730
casiotone401 4:b9f5ae574447 731 inline void onUDPSocketEvent(UDPSocketEvent e)
casiotone401 0:a4d93cd4c30d 732 {
casiotone401 15:3e4bc47d6a39 733 static union OSCarg msg[10];
casiotone401 31:0595b7456780 734 static char buf[768] = {0};
casiotone401 29:8b61b87b9676 735 int recvlen;
casiotone401 29:8b61b87b9676 736 int num, numrow, len, offset;
casiotone401 14:977f3c5a4b4e 737 int messagepos = 0;
casiotone401 14:977f3c5a4b4e 738 bool bundleflag = false;
casiotone401 10:ccfeb687c3f2 739
casiotone401 10:ccfeb687c3f2 740 Host host;
casiotone401 10:ccfeb687c3f2 741
casiotone401 15:3e4bc47d6a39 742 switch (e)
casiotone401 0:a4d93cd4c30d 743 {
casiotone401 4:b9f5ae574447 744 case UDPSOCKET_READABLE: // The only event for now
casiotone401 15:3e4bc47d6a39 745
casiotone401 31:0595b7456780 746 recvlen = gUdp.recvfrom(buf, 768, &host); // packet length
casiotone401 27:65e873bf8307 747
casiotone401 27:65e873bf8307 748 if (recvlen <= 0) break;
casiotone401 27:65e873bf8307 749
casiotone401 27:65e873bf8307 750 if (!bundleflag && buf[0] == '#') // #bundle
casiotone401 27:65e873bf8307 751 {
casiotone401 27:65e873bf8307 752 messagepos += 16; // skip #bundle & timetag
casiotone401 27:65e873bf8307 753 recvlen -= 16;
casiotone401 27:65e873bf8307 754
casiotone401 27:65e873bf8307 755 bundleflag = true;
casiotone401 27:65e873bf8307 756 }
casiotone401 27:65e873bf8307 757
casiotone401 27:65e873bf8307 758 do {
casiotone401 27:65e873bf8307 759
casiotone401 15:3e4bc47d6a39 760 if (bundleflag)
casiotone401 10:ccfeb687c3f2 761 {
casiotone401 10:ccfeb687c3f2 762 messagepos += 4;
casiotone401 10:ccfeb687c3f2 763 recvlen -= 4;
casiotone401 27:65e873bf8307 764
casiotone401 31:0595b7456780 765 if (recvlen < 0)
casiotone401 10:ccfeb687c3f2 766 {
casiotone401 10:ccfeb687c3f2 767 bundleflag = false;
casiotone401 10:ccfeb687c3f2 768 break;
casiotone401 10:ccfeb687c3f2 769 }
casiotone401 10:ccfeb687c3f2 770 }
casiotone401 27:65e873bf8307 771
casiotone401 15:3e4bc47d6a39 772 if (getOSCmsg(buf + messagepos, msg) == -1) continue;
casiotone401 27:65e873bf8307 773
casiotone401 15:3e4bc47d6a39 774 len = strlength(msg[0].address);
casiotone401 27:65e873bf8307 775
casiotone401 15:3e4bc47d6a39 776 if (isdigit(msg[0].address[len-1]))
casiotone401 10:ccfeb687c3f2 777 {
casiotone401 10:ccfeb687c3f2 778 num = msg[0].address[len-1] - '0' - 1;
casiotone401 27:65e873bf8307 779
casiotone401 15:3e4bc47d6a39 780 offset = 1;
casiotone401 27:65e873bf8307 781
casiotone401 15:3e4bc47d6a39 782 if (isdigit(msg[0].address[len-2]))
casiotone401 15:3e4bc47d6a39 783 {
casiotone401 15:3e4bc47d6a39 784 offset = 2;
casiotone401 15:3e4bc47d6a39 785 num += 10;
casiotone401 15:3e4bc47d6a39 786 }
casiotone401 27:65e873bf8307 787
casiotone401 10:ccfeb687c3f2 788 } else {
casiotone401 27:65e873bf8307 789
casiotone401 10:ccfeb687c3f2 790 num = -1;
casiotone401 10:ccfeb687c3f2 791 }
casiotone401 27:65e873bf8307 792
casiotone401 31:0595b7456780 793 if (!strncmp(msg[0].address + (len - offset) - 4, "page", 4)) // touchOSC page
casiotone401 10:ccfeb687c3f2 794 {
casiotone401 31:0595b7456780 795 continue;
casiotone401 31:0595b7456780 796
casiotone401 31:0595b7456780 797 } else if (!strncmp(msg[0].address + (len - offset) - 4, "sync", 4)) {
casiotone401 31:0595b7456780 798 if (msg[2].i != 0) gCLOCKOUT = true;
casiotone401 31:0595b7456780 799 else gCLOCKOUT = false;
casiotone401 10:ccfeb687c3f2 800 continue;
casiotone401 10:ccfeb687c3f2 801
casiotone401 17:55e5136790a6 802 } else if (!strncmp(msg[0].address + (len - offset) - 4, "gate", 4) && (num != -1)) {
casiotone401 15:3e4bc47d6a39 803 if (num > 3) continue;
casiotone401 31:0595b7456780 804 if (msg[2].i != 0) gGATES[num] = true;
casiotone401 31:0595b7456780 805 else gGATES[num] = false;
casiotone401 10:ccfeb687c3f2 806 continue;
casiotone401 27:65e873bf8307 807 // (touchOSC Control push, toggle)
casiotone401 17:55e5136790a6 808 } else if (!strncmp(msg[0].address + (len - offset) - 5, "fader", 5) && (num != -1)) {
casiotone401 15:3e4bc47d6a39 809 if (num > 7) continue;
casiotone401 15:3e4bc47d6a39 810 gOSC_cv[num] = msg[2].f * (SCALING_N);
casiotone401 10:ccfeb687c3f2 811 continue;
casiotone401 15:3e4bc47d6a39 812
casiotone401 17:55e5136790a6 813 } else if (!strncmp(msg[0].address + (len - offset) - 9, "multixy1/", 9) && (num != -1)) {
casiotone401 15:3e4bc47d6a39 814 if (num > 7) continue;
casiotone401 15:3e4bc47d6a39 815 if (msg[1].typeTag[1] == 'f') gOSC_cv[num] = msg[2].f * (SCALING_N);
casiotone401 15:3e4bc47d6a39 816 if (msg[1].typeTag[1] == 'f') gOSC_cv[++num] = msg[3].f * (SCALING_N);
casiotone401 10:ccfeb687c3f2 817 continue;
casiotone401 27:65e873bf8307 818
casiotone401 24:99045b0f7c4a 819 } else if (!strncmp(msg[0].address + (len - offset) - 12, "multifader1/", 12) && (num != -1)) {
casiotone401 15:3e4bc47d6a39 820 if (num > 7) continue;
casiotone401 15:3e4bc47d6a39 821 if (msg[1].typeTag[1] == 'f') gOSC_cv[num] = msg[2].f * (SCALING_N);
casiotone401 10:ccfeb687c3f2 822 continue;
casiotone401 27:65e873bf8307 823
casiotone401 24:99045b0f7c4a 824 } else if (!strncmp(msg[0].address + (len - offset) - 5, "m185/", 5) && (num != -1)) {
casiotone401 24:99045b0f7c4a 825 if (num > 7) continue;
casiotone401 24:99045b0f7c4a 826 if (msg[1].typeTag[1] == 'f') g185_cv[num] = msg[2].f * (SCALING_N);
casiotone401 24:99045b0f7c4a 827 continue;
casiotone401 27:65e873bf8307 828
casiotone401 17:55e5136790a6 829 } else if (!strncmp(msg[0].address + (len - offset) -10, "sequencer/", 10) && (num != -1)) {
casiotone401 15:3e4bc47d6a39 830 if (num > 15) continue;
casiotone401 15:3e4bc47d6a39 831 gSeq_cv[num] = msg[2].f * (SCALING_N);
casiotone401 10:ccfeb687c3f2 832 continue;
casiotone401 27:65e873bf8307 833
casiotone401 17:55e5136790a6 834 } else if (!strncmp(msg[0].address + (len - offset) - 6, "ctrlsw", 6) && (num != -1)) {
casiotone401 15:3e4bc47d6a39 835 if (num > 7) continue;
casiotone401 31:0595b7456780 836 if (msg[2].i != 0) gCtrlSW[num] = true;
casiotone401 31:0595b7456780 837 else gCtrlSW[num] = false;
casiotone401 10:ccfeb687c3f2 838 continue;
casiotone401 27:65e873bf8307 839
casiotone401 17:55e5136790a6 840 } else if (!strncmp(msg[0].address + (len - offset) - 4, "ctrl", 4) && (num != -1)) {
casiotone401 15:3e4bc47d6a39 841 if (num > 7) continue;
casiotone401 15:3e4bc47d6a39 842 gCtrl[num] = msg[2].f;
casiotone401 15:3e4bc47d6a39 843 continue;
casiotone401 27:65e873bf8307 844
casiotone401 17:55e5136790a6 845 } else if (!strncmp(msg[0].address + (len - offset) - 9, "pulsecnt/", 9) && (num != -1)) {
casiotone401 15:3e4bc47d6a39 846 if (num > 7) continue;
casiotone401 15:3e4bc47d6a39 847 gPulseCount[num] = msg[2].f;
casiotone401 15:3e4bc47d6a39 848 continue;
casiotone401 27:65e873bf8307 849
casiotone401 17:55e5136790a6 850 } else if (!strncmp(msg[0].address + (len - offset) - 9, "gatemode/", 9) && (num != -1)) {
casiotone401 15:3e4bc47d6a39 851 if (num > 15) continue;
casiotone401 15:3e4bc47d6a39 852 gGateMode[num] = msg[2].f;
casiotone401 15:3e4bc47d6a39 853 continue;
casiotone401 27:65e873bf8307 854
casiotone401 24:99045b0f7c4a 855 } else if (!strncmp(msg[0].address + (len - offset) - 9, "g185mode/", 9) && (num != -1)) {
casiotone401 24:99045b0f7c4a 856 if (num > 7) continue;
casiotone401 24:99045b0f7c4a 857 gGateMode185[num] = msg[2].f;
casiotone401 24:99045b0f7c4a 858 continue;
casiotone401 27:65e873bf8307 859
casiotone401 17:55e5136790a6 860 } else if (!strncmp(msg[0].address + (len - offset) - 6, "slide/", 6) && (num != -1)) {
casiotone401 15:3e4bc47d6a39 861 if (num > 15) continue;
casiotone401 15:3e4bc47d6a39 862 gSlide[num] = msg[2].f;
casiotone401 15:3e4bc47d6a39 863 continue;
casiotone401 27:65e873bf8307 864
casiotone401 24:99045b0f7c4a 865 } else if (!strncmp(msg[0].address + (len - offset) - 9, "slide185/", 9) && (num != -1)) {
casiotone401 24:99045b0f7c4a 866 if (num > 7) continue;
casiotone401 24:99045b0f7c4a 867 gSlide185[num] = msg[2].f;
casiotone401 24:99045b0f7c4a 868 continue;
casiotone401 27:65e873bf8307 869
casiotone401 24:99045b0f7c4a 870 } else if (!strncmp(msg[0].address + (len - offset - 2) - 7, "accent/", 7) && (num != -1)) {
casiotone401 27:65e873bf8307 871
casiotone401 24:99045b0f7c4a 872 if (isdigit(msg[0].address[len - 3]))
casiotone401 17:55e5136790a6 873 {
casiotone401 24:99045b0f7c4a 874 num = msg[0].address[len - 3] - '0' - 1;
casiotone401 17:55e5136790a6 875 }
casiotone401 27:65e873bf8307 876
casiotone401 17:55e5136790a6 877 gAccent[num] = msg[2].i;
casiotone401 17:55e5136790a6 878 continue;
casiotone401 27:65e873bf8307 879
casiotone401 24:99045b0f7c4a 880 } else if (!strncmp(msg[0].address + (len - offset - 3) - 7, "accent/", 7) && (num != -1)) {
casiotone401 27:65e873bf8307 881
casiotone401 24:99045b0f7c4a 882 if (isdigit(msg[0].address[len - 3]))
casiotone401 17:55e5136790a6 883 {
casiotone401 24:99045b0f7c4a 884 num = msg[0].address[len - 3] - '0' - 1;
casiotone401 27:65e873bf8307 885
casiotone401 24:99045b0f7c4a 886 if (isdigit(msg[0].address[len - 4]))
casiotone401 17:55e5136790a6 887 {
casiotone401 17:55e5136790a6 888 num += 10;
casiotone401 17:55e5136790a6 889 }
casiotone401 17:55e5136790a6 890 }
casiotone401 27:65e873bf8307 891
casiotone401 17:55e5136790a6 892 gAccent[num] = msg[2].i;
casiotone401 17:55e5136790a6 893 continue;
casiotone401 27:65e873bf8307 894
casiotone401 24:99045b0f7c4a 895 } else if (!strncmp(msg[0].address + (len - offset - 3) - 6, "185acc/", 6) && (num != -1)) {
casiotone401 27:65e873bf8307 896
casiotone401 24:99045b0f7c4a 897 if (isdigit(msg[0].address[len-3]))
casiotone401 24:99045b0f7c4a 898 {
casiotone401 24:99045b0f7c4a 899 num = msg[0].address[len-3] - '0' - 1;
casiotone401 27:65e873bf8307 900
casiotone401 24:99045b0f7c4a 901 if (isdigit(msg[0].address[len - 4]))
casiotone401 24:99045b0f7c4a 902 {
casiotone401 24:99045b0f7c4a 903 num += 10;
casiotone401 24:99045b0f7c4a 904 }
casiotone401 24:99045b0f7c4a 905 }
casiotone401 27:65e873bf8307 906
casiotone401 24:99045b0f7c4a 907 gAccent185[num] = msg[2].i;
casiotone401 24:99045b0f7c4a 908 continue;
casiotone401 27:65e873bf8307 909
casiotone401 24:99045b0f7c4a 910 } else if (!strncmp(msg[0].address + (len - offset - 2) - 3, "bm/", 3) && (num != -1)) {
casiotone401 27:65e873bf8307 911
casiotone401 24:99045b0f7c4a 912 if (isdigit(msg[0].address[len - 3]))
casiotone401 24:99045b0f7c4a 913 {
casiotone401 24:99045b0f7c4a 914 num = msg[0].address[len - 3] - '0' - 1;
casiotone401 27:65e873bf8307 915
casiotone401 24:99045b0f7c4a 916 if (isdigit(msg[0].address[len - 4]))
casiotone401 24:99045b0f7c4a 917 {
casiotone401 24:99045b0f7c4a 918 num += 10;
casiotone401 24:99045b0f7c4a 919 }
casiotone401 24:99045b0f7c4a 920 }
casiotone401 27:65e873bf8307 921
casiotone401 24:99045b0f7c4a 922 if (isdigit(msg[0].address[len - 1]))
casiotone401 24:99045b0f7c4a 923 {
casiotone401 24:99045b0f7c4a 924 numrow = msg[0].address[len - 1] - '0' - 1;
casiotone401 24:99045b0f7c4a 925 }
casiotone401 27:65e873bf8307 926
casiotone401 24:99045b0f7c4a 927 gBeatsMatrix[numrow][num] = msg[2].i;
casiotone401 24:99045b0f7c4a 928 continue;
casiotone401 27:65e873bf8307 929
casiotone401 24:99045b0f7c4a 930 } else if (!strncmp(msg[0].address + (len - offset - 3) - 3, "bm/", 3) && (num != -1)) {
casiotone401 27:65e873bf8307 931
casiotone401 24:99045b0f7c4a 932 if (isdigit(msg[0].address[len - 3]))
casiotone401 24:99045b0f7c4a 933 {
casiotone401 24:99045b0f7c4a 934 num = msg[0].address[len - 3] - '0' - 1;
casiotone401 27:65e873bf8307 935
casiotone401 24:99045b0f7c4a 936 if (isdigit(msg[0].address[len - 4]))
casiotone401 24:99045b0f7c4a 937 {
casiotone401 24:99045b0f7c4a 938 num += 10;
casiotone401 24:99045b0f7c4a 939 }
casiotone401 24:99045b0f7c4a 940 }
casiotone401 27:65e873bf8307 941
casiotone401 24:99045b0f7c4a 942 if (isdigit(msg[0].address[len - 1]))
casiotone401 24:99045b0f7c4a 943 {
casiotone401 24:99045b0f7c4a 944 numrow = msg[0].address[len - 1] - '0' - 1;
casiotone401 24:99045b0f7c4a 945 }
casiotone401 27:65e873bf8307 946
casiotone401 24:99045b0f7c4a 947 gBeatsMatrix[numrow][num] = msg[2].i;
casiotone401 24:99045b0f7c4a 948 continue;
casiotone401 27:65e873bf8307 949
casiotone401 24:99045b0f7c4a 950 } else if (!strncmp(msg[0].address + (len - offset) - 4, "bpc/", 4) && (num != -1)) {
casiotone401 24:99045b0f7c4a 951 if (num > 15) continue;
casiotone401 24:99045b0f7c4a 952 gPulseCountBeats[num] = msg[2].f;
casiotone401 24:99045b0f7c4a 953 continue;
casiotone401 27:65e873bf8307 954
casiotone401 24:99045b0f7c4a 955 } else if (!strncmp(msg[0].address + (len - offset) - 4, "blv/", 4) && (num != -1)) {
casiotone401 24:99045b0f7c4a 956 if (num > 7) continue;
casiotone401 24:99045b0f7c4a 957 gBeatsLevel[num] = msg[2].f;
casiotone401 24:99045b0f7c4a 958 continue;
casiotone401 27:65e873bf8307 959
casiotone401 24:99045b0f7c4a 960 } else if (!strncmp(msg[0].address + (len - offset) - 4, "bdc/", 4) && (num != -1)) {
casiotone401 24:99045b0f7c4a 961 if (num > 7) continue;
casiotone401 24:99045b0f7c4a 962 gBeatsDecay[num] = msg[2].f;
casiotone401 24:99045b0f7c4a 963 continue;
casiotone401 27:65e873bf8307 964
casiotone401 24:99045b0f7c4a 965 } else if (!strncmp(msg[0].address + (len - offset) - 4, "euca", 4) && (num != -1)) {
casiotone401 15:3e4bc47d6a39 966 if (num > 5) continue;
casiotone401 15:3e4bc47d6a39 967 gEucA[num] = msg[2].f;
casiotone401 15:3e4bc47d6a39 968 continue;
casiotone401 27:65e873bf8307 969
casiotone401 17:55e5136790a6 970 } else if (!strncmp(msg[0].address + (len - offset) - 4, "eucb", 4) && (num != -1)) {
casiotone401 15:3e4bc47d6a39 971 if (num > 5) continue;
casiotone401 15:3e4bc47d6a39 972 gEucB[num] = msg[2].f;
casiotone401 15:3e4bc47d6a39 973 continue;
casiotone401 27:65e873bf8307 974
casiotone401 27:65e873bf8307 975 } else if (MODE_RND || MODE_LFO) {
casiotone401 20:a44f4a024902 976
casiotone401 27:65e873bf8307 977 if (!strncmp(msg[0].address + (len - offset) - 3, "acv", 3) && (num != -1)) {
casiotone401 27:65e873bf8307 978 if (num > 3) continue;
casiotone401 27:65e873bf8307 979 gArdCV[num] = msg[2].i;
casiotone401 27:65e873bf8307 980 continue;
casiotone401 27:65e873bf8307 981
casiotone401 27:65e873bf8307 982 } else if (!strncmp(msg[0].address + (len - offset) - 3, "pot", 3) && (num != -1)) {
casiotone401 27:65e873bf8307 983 if (num > 1) continue;
casiotone401 27:65e873bf8307 984 gArdPot[num] = msg[2].f;
casiotone401 27:65e873bf8307 985 continue;
casiotone401 27:65e873bf8307 986
casiotone401 27:65e873bf8307 987 } else if (!strncmp(msg[0].address + (len - offset) - 2, "sw", 2) && (num != -1)) {
casiotone401 27:65e873bf8307 988 if (num > 1) continue;
casiotone401 31:0595b7456780 989 if (msg[2].i != 0) gArdSW[num] = true;
casiotone401 31:0595b7456780 990 else gArdSW[num] = false;
casiotone401 27:65e873bf8307 991 continue;
casiotone401 27:65e873bf8307 992
casiotone401 27:65e873bf8307 993 }
casiotone401 20:a44f4a024902 994
casiotone401 15:3e4bc47d6a39 995 } else {
casiotone401 27:65e873bf8307 996
casiotone401 10:ccfeb687c3f2 997 continue;
casiotone401 10:ccfeb687c3f2 998 }
casiotone401 27:65e873bf8307 999
casiotone401 31:0595b7456780 1000 } while (bundleflag);
casiotone401 15:3e4bc47d6a39 1001 }
casiotone401 15:3e4bc47d6a39 1002 }