OSCtoCV Library
OSCtoCV_LFO.cpp@1:981b62bb5c87, 2016-01-28 (annotated)
- Committer:
- casiotone401
- Date:
- Thu Jan 28 11:39:47 2016 +0000
- Revision:
- 1:981b62bb5c87
- Parent:
- 0:cd43a974c54c
- Child:
- 4:fe335dc8d53d
added Beats Seq
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
casiotone401 | 0:cd43a974c54c | 1 | /* |
casiotone401 | 0:cd43a974c54c | 2 | OSCtoCV_Sequencer.cpp |
casiotone401 | 0:cd43a974c54c | 3 | */ |
casiotone401 | 0:cd43a974c54c | 4 | |
casiotone401 | 0:cd43a974c54c | 5 | #include <math.h> |
casiotone401 | 0:cd43a974c54c | 6 | #include <limits.h> |
casiotone401 | 0:cd43a974c54c | 7 | |
casiotone401 | 0:cd43a974c54c | 8 | #include "OSCtoCV_LFO.h" |
casiotone401 | 0:cd43a974c54c | 9 | #include "OSCtoCV_Random.h" |
casiotone401 | 0:cd43a974c54c | 10 | #include "OSCtoCV.h" |
casiotone401 | 0:cd43a974c54c | 11 | |
casiotone401 | 0:cd43a974c54c | 12 | #define M_PI 3.1415926535897932384626433832795 |
casiotone401 | 0:cd43a974c54c | 13 | |
casiotone401 | 0:cd43a974c54c | 14 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 15 | // update LFO |
casiotone401 | 0:cd43a974c54c | 16 | |
casiotone401 | 0:cd43a974c54c | 17 | float UpdateLFO(float freq) |
casiotone401 | 0:cd43a974c54c | 18 | { |
casiotone401 | 0:cd43a974c54c | 19 | static float pos; |
casiotone401 | 0:cd43a974c54c | 20 | |
casiotone401 | 0:cd43a974c54c | 21 | pos += 0.000015259 * freq; |
casiotone401 | 0:cd43a974c54c | 22 | |
casiotone401 | 0:cd43a974c54c | 23 | if (pos > 1.0f) |
casiotone401 | 0:cd43a974c54c | 24 | { |
casiotone401 | 0:cd43a974c54c | 25 | pos = 0; |
casiotone401 | 0:cd43a974c54c | 26 | } |
casiotone401 | 0:cd43a974c54c | 27 | |
casiotone401 | 0:cd43a974c54c | 28 | return pos; |
casiotone401 | 0:cd43a974c54c | 29 | } |
casiotone401 | 0:cd43a974c54c | 30 | |
casiotone401 | 0:cd43a974c54c | 31 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 32 | // triangle wave calc |
casiotone401 | 0:cd43a974c54c | 33 | |
casiotone401 | 0:cd43a974c54c | 34 | float TriWave(float pos) |
casiotone401 | 0:cd43a974c54c | 35 | { |
casiotone401 | 0:cd43a974c54c | 36 | return 1.0f - fabs(pos - 0.5f) * 2.0f; |
casiotone401 | 0:cd43a974c54c | 37 | } |
casiotone401 | 0:cd43a974c54c | 38 | |
casiotone401 | 0:cd43a974c54c | 39 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 40 | // saw(ramp) wave calc |
casiotone401 | 0:cd43a974c54c | 41 | |
casiotone401 | 0:cd43a974c54c | 42 | float SawWave(float pos) |
casiotone401 | 0:cd43a974c54c | 43 | { |
casiotone401 | 0:cd43a974c54c | 44 | return 1.0f - pos; |
casiotone401 | 0:cd43a974c54c | 45 | } |
casiotone401 | 0:cd43a974c54c | 46 | |
casiotone401 | 0:cd43a974c54c | 47 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 48 | // square wave calc |
casiotone401 | 0:cd43a974c54c | 49 | |
casiotone401 | 0:cd43a974c54c | 50 | float SqrWave(float pos) |
casiotone401 | 0:cd43a974c54c | 51 | { |
casiotone401 | 0:cd43a974c54c | 52 | return pos < 0.8f ? 1.0f : 0.0f; |
casiotone401 | 0:cd43a974c54c | 53 | } |
casiotone401 | 0:cd43a974c54c | 54 | |
casiotone401 | 0:cd43a974c54c | 55 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 56 | // sine wave calc |
casiotone401 | 0:cd43a974c54c | 57 | |
casiotone401 | 0:cd43a974c54c | 58 | float SinWave(float pos) |
casiotone401 | 0:cd43a974c54c | 59 | { |
casiotone401 | 0:cd43a974c54c | 60 | return (sin(pos*2 * M_PI) + 1.0f) * 0.5f; |
casiotone401 | 0:cd43a974c54c | 61 | } |
casiotone401 | 0:cd43a974c54c | 62 | |
casiotone401 | 0:cd43a974c54c | 63 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 64 | // exponential wave calc |
casiotone401 | 0:cd43a974c54c | 65 | |
casiotone401 | 0:cd43a974c54c | 66 | float ExpWave(float pos) |
casiotone401 | 0:cd43a974c54c | 67 | { |
casiotone401 | 0:cd43a974c54c | 68 | return powf((1.0f - fabs(pos - 0.5f) * 2.0f), 2.0); |
casiotone401 | 0:cd43a974c54c | 69 | } |
casiotone401 | 0:cd43a974c54c | 70 | |
casiotone401 | 0:cd43a974c54c | 71 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 72 | // exp wave calc |
casiotone401 | 0:cd43a974c54c | 73 | |
casiotone401 | 0:cd43a974c54c | 74 | float LogWave(float pos) |
casiotone401 | 0:cd43a974c54c | 75 | { |
casiotone401 | 0:cd43a974c54c | 76 | return powf((1.0f - fabs(pos - 0.5f) * 2.0f), 0.5); |
casiotone401 | 0:cd43a974c54c | 77 | } |
casiotone401 | 0:cd43a974c54c | 78 | |
casiotone401 | 0:cd43a974c54c | 79 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 80 | // synthesis wave calc sin |
casiotone401 | 0:cd43a974c54c | 81 | |
casiotone401 | 0:cd43a974c54c | 82 | float SynthWave1(float pos) |
casiotone401 | 0:cd43a974c54c | 83 | { |
casiotone401 | 0:cd43a974c54c | 84 | return (SinWave(pos) + SinWave(3 * pos) - SinWave(2 * pos)) * 0.5; |
casiotone401 | 0:cd43a974c54c | 85 | } |
casiotone401 | 0:cd43a974c54c | 86 | |
casiotone401 | 0:cd43a974c54c | 87 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 88 | // synthesis wave calc sin |
casiotone401 | 0:cd43a974c54c | 89 | |
casiotone401 | 0:cd43a974c54c | 90 | float SynthWave2(float pos) |
casiotone401 | 0:cd43a974c54c | 91 | { |
casiotone401 | 0:cd43a974c54c | 92 | return (SinWave(pos) + SinWave(1 / 3 * pos) - SinWave(2 * pos)) * 0.3; |
casiotone401 | 0:cd43a974c54c | 93 | } |
casiotone401 | 0:cd43a974c54c | 94 | |
casiotone401 | 0:cd43a974c54c | 95 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 96 | // invert float value |
casiotone401 | 0:cd43a974c54c | 97 | |
casiotone401 | 0:cd43a974c54c | 98 | float Invert(float x) |
casiotone401 | 0:cd43a974c54c | 99 | { |
casiotone401 | 0:cd43a974c54c | 100 | return SCALING_N - x; |
casiotone401 | 0:cd43a974c54c | 101 | } |
casiotone401 | 0:cd43a974c54c | 102 | |
casiotone401 | 0:cd43a974c54c | 103 | //------------------------------------------------------------- |
casiotone401 | 0:cd43a974c54c | 104 | // LFO cv generator |
casiotone401 | 0:cd43a974c54c | 105 | |
casiotone401 | 1:981b62bb5c87 | 106 | void SteppedLFO(unsigned int channelOffset, bool quantizeOff) |
casiotone401 | 0:cd43a974c54c | 107 | { |
casiotone401 | 1:981b62bb5c87 | 108 | static uint8_t ch = channelOffset; |
casiotone401 | 1:981b62bb5c87 | 109 | static uint8_t mcount, qmode, amode; |
casiotone401 | 0:cd43a974c54c | 110 | int waveform; |
casiotone401 | 0:cd43a974c54c | 111 | static int _waveform = -1; |
casiotone401 | 0:cd43a974c54c | 112 | static int steps; |
casiotone401 | 0:cd43a974c54c | 113 | static float lfocv[8], glidecv[8]; |
casiotone401 | 0:cd43a974c54c | 114 | unsigned int cv; |
casiotone401 | 0:cd43a974c54c | 115 | static float qcv; |
casiotone401 | 0:cd43a974c54c | 116 | float freq; |
casiotone401 | 1:981b62bb5c87 | 117 | static int jitter, jitterCount; |
casiotone401 | 0:cd43a974c54c | 118 | |
casiotone401 | 0:cd43a974c54c | 119 | qmode = (gCtrl[1] * (SCALE_NUM - 1.0f)); // Sequencer Quantize Mode (gCtrl[1]) |
casiotone401 | 1:981b62bb5c87 | 120 | |
casiotone401 | 0:cd43a974c54c | 121 | amode = SCALE_AOUT * qmode; |
casiotone401 | 0:cd43a974c54c | 122 | |
casiotone401 | 0:cd43a974c54c | 123 | gAOUT.write_u16(amode); |
casiotone401 | 0:cd43a974c54c | 124 | |
casiotone401 | 0:cd43a974c54c | 125 | // select waveform ArdSW1(gArdSW[0]) |
casiotone401 | 0:cd43a974c54c | 126 | waveform = CheckSubMode1(); |
casiotone401 | 0:cd43a974c54c | 127 | |
casiotone401 | 0:cd43a974c54c | 128 | if (_waveform != waveform) // update LCD |
casiotone401 | 0:cd43a974c54c | 129 | { |
casiotone401 | 0:cd43a974c54c | 130 | switch (waveform) |
casiotone401 | 0:cd43a974c54c | 131 | { |
casiotone401 | 0:cd43a974c54c | 132 | case TRIANGLE_WAVE: |
casiotone401 | 0:cd43a974c54c | 133 | |
casiotone401 | 1:981b62bb5c87 | 134 | UpdateSubModeLCD("Tri:Wave"); |
casiotone401 | 0:cd43a974c54c | 135 | break; |
casiotone401 | 0:cd43a974c54c | 136 | |
casiotone401 | 0:cd43a974c54c | 137 | case SAW_WAVE: |
casiotone401 | 0:cd43a974c54c | 138 | |
casiotone401 | 1:981b62bb5c87 | 139 | UpdateSubModeLCD("Saw:Wave"); |
casiotone401 | 0:cd43a974c54c | 140 | break; |
casiotone401 | 0:cd43a974c54c | 141 | |
casiotone401 | 0:cd43a974c54c | 142 | case SQUARE_WAVE: |
casiotone401 | 0:cd43a974c54c | 143 | |
casiotone401 | 1:981b62bb5c87 | 144 | UpdateSubModeLCD("Sqr:Wave"); |
casiotone401 | 0:cd43a974c54c | 145 | break; |
casiotone401 | 0:cd43a974c54c | 146 | |
casiotone401 | 0:cd43a974c54c | 147 | case SINE_WAVE: |
casiotone401 | 0:cd43a974c54c | 148 | |
casiotone401 | 1:981b62bb5c87 | 149 | UpdateSubModeLCD("Sin:Wave"); |
casiotone401 | 0:cd43a974c54c | 150 | break; |
casiotone401 | 0:cd43a974c54c | 151 | |
casiotone401 | 0:cd43a974c54c | 152 | case EXP_WAVE: |
casiotone401 | 0:cd43a974c54c | 153 | |
casiotone401 | 1:981b62bb5c87 | 154 | UpdateSubModeLCD("Exp:Wave"); |
casiotone401 | 0:cd43a974c54c | 155 | break; |
casiotone401 | 0:cd43a974c54c | 156 | |
casiotone401 | 0:cd43a974c54c | 157 | case LOG_WAVE: |
casiotone401 | 0:cd43a974c54c | 158 | |
casiotone401 | 1:981b62bb5c87 | 159 | UpdateSubModeLCD("Log:Wave"); |
casiotone401 | 0:cd43a974c54c | 160 | break; |
casiotone401 | 0:cd43a974c54c | 161 | |
casiotone401 | 0:cd43a974c54c | 162 | case SYNTH_WAVE: |
casiotone401 | 0:cd43a974c54c | 163 | |
casiotone401 | 1:981b62bb5c87 | 164 | UpdateSubModeLCD("Syn:Wave"); |
casiotone401 | 0:cd43a974c54c | 165 | break; |
casiotone401 | 0:cd43a974c54c | 166 | |
casiotone401 | 0:cd43a974c54c | 167 | case NOISE: |
casiotone401 | 0:cd43a974c54c | 168 | |
casiotone401 | 1:981b62bb5c87 | 169 | UpdateSubModeLCD("XorNoise"); |
casiotone401 | 0:cd43a974c54c | 170 | break; |
casiotone401 | 0:cd43a974c54c | 171 | |
casiotone401 | 0:cd43a974c54c | 172 | default: |
casiotone401 | 0:cd43a974c54c | 173 | break; |
casiotone401 | 0:cd43a974c54c | 174 | } |
casiotone401 | 0:cd43a974c54c | 175 | |
casiotone401 | 0:cd43a974c54c | 176 | _waveform = waveform; |
casiotone401 | 0:cd43a974c54c | 177 | } |
casiotone401 | 0:cd43a974c54c | 178 | |
casiotone401 | 0:cd43a974c54c | 179 | // frequency control ArdPot1(gArdPot[0]) |
casiotone401 | 0:cd43a974c54c | 180 | freq = gArdPot[0] * 0.10f + 0.001f; |
casiotone401 | 0:cd43a974c54c | 181 | |
casiotone401 | 0:cd43a974c54c | 182 | switch (waveform) |
casiotone401 | 0:cd43a974c54c | 183 | { |
casiotone401 | 0:cd43a974c54c | 184 | case TRIANGLE_WAVE: |
casiotone401 | 0:cd43a974c54c | 185 | |
casiotone401 | 1:981b62bb5c87 | 186 | lfocv[channelOffset] = TriWave(UpdateLFO(freq)) * SCALING_N; |
casiotone401 | 0:cd43a974c54c | 187 | break; |
casiotone401 | 0:cd43a974c54c | 188 | |
casiotone401 | 0:cd43a974c54c | 189 | case SAW_WAVE: |
casiotone401 | 0:cd43a974c54c | 190 | |
casiotone401 | 1:981b62bb5c87 | 191 | lfocv[channelOffset] = SawWave(UpdateLFO(freq)) * SCALING_N; |
casiotone401 | 0:cd43a974c54c | 192 | break; |
casiotone401 | 0:cd43a974c54c | 193 | |
casiotone401 | 0:cd43a974c54c | 194 | case SQUARE_WAVE: |
casiotone401 | 0:cd43a974c54c | 195 | |
casiotone401 | 1:981b62bb5c87 | 196 | lfocv[channelOffset] = SqrWave(UpdateLFO(freq)) * SCALING_N; |
casiotone401 | 0:cd43a974c54c | 197 | break; |
casiotone401 | 0:cd43a974c54c | 198 | |
casiotone401 | 0:cd43a974c54c | 199 | case SINE_WAVE: |
casiotone401 | 0:cd43a974c54c | 200 | |
casiotone401 | 1:981b62bb5c87 | 201 | lfocv[channelOffset] = SinWave(UpdateLFO(freq)) * SCALING_N; |
casiotone401 | 0:cd43a974c54c | 202 | break; |
casiotone401 | 0:cd43a974c54c | 203 | |
casiotone401 | 0:cd43a974c54c | 204 | case EXP_WAVE: |
casiotone401 | 0:cd43a974c54c | 205 | |
casiotone401 | 1:981b62bb5c87 | 206 | lfocv[channelOffset] = ExpWave(UpdateLFO(freq)) * SCALING_N; |
casiotone401 | 0:cd43a974c54c | 207 | break; |
casiotone401 | 0:cd43a974c54c | 208 | |
casiotone401 | 0:cd43a974c54c | 209 | case LOG_WAVE: |
casiotone401 | 0:cd43a974c54c | 210 | |
casiotone401 | 1:981b62bb5c87 | 211 | lfocv[channelOffset] = LogWave(UpdateLFO(freq)) * SCALING_N; |
casiotone401 | 0:cd43a974c54c | 212 | break; |
casiotone401 | 0:cd43a974c54c | 213 | |
casiotone401 | 0:cd43a974c54c | 214 | case SYNTH_WAVE: |
casiotone401 | 0:cd43a974c54c | 215 | |
casiotone401 | 1:981b62bb5c87 | 216 | lfocv[channelOffset] = SynthWave1(UpdateLFO(freq)) * SCALING_N; |
casiotone401 | 0:cd43a974c54c | 217 | break; |
casiotone401 | 0:cd43a974c54c | 218 | |
casiotone401 | 0:cd43a974c54c | 219 | case NOISE: |
casiotone401 | 0:cd43a974c54c | 220 | |
casiotone401 | 1:981b62bb5c87 | 221 | lfocv[channelOffset] = fmodf(Xorshift_32(), SCALING_N); |
casiotone401 | 0:cd43a974c54c | 222 | break; |
casiotone401 | 0:cd43a974c54c | 223 | |
casiotone401 | 0:cd43a974c54c | 224 | default: |
casiotone401 | 0:cd43a974c54c | 225 | break; |
casiotone401 | 0:cd43a974c54c | 226 | } |
casiotone401 | 0:cd43a974c54c | 227 | |
casiotone401 | 0:cd43a974c54c | 228 | //lfocv[i + 4] = Invert(lfocv[i]); // ch4 ~ ch8 invert waveform |
casiotone401 | 0:cd43a974c54c | 229 | |
casiotone401 | 1:981b62bb5c87 | 230 | if (quantizeOff) // quantize Off |
casiotone401 | 1:981b62bb5c87 | 231 | { |
casiotone401 | 1:981b62bb5c87 | 232 | qmode = Lin; |
casiotone401 | 1:981b62bb5c87 | 233 | } |
casiotone401 | 1:981b62bb5c87 | 234 | |
casiotone401 | 0:cd43a974c54c | 235 | switch (qmode) |
casiotone401 | 0:cd43a974c54c | 236 | { |
casiotone401 | 0:cd43a974c54c | 237 | case Lin: |
casiotone401 | 0:cd43a974c54c | 238 | |
casiotone401 | 0:cd43a974c54c | 239 | if (gArdPot[1] > 10) |
casiotone401 | 0:cd43a974c54c | 240 | { |
casiotone401 | 0:cd43a974c54c | 241 | steps = (unsigned int)gArdPot[1] * 0.1; // check LFO Steps(Quantize Resolustion)ArdPot2gArdPot[1] |
casiotone401 | 0:cd43a974c54c | 242 | |
casiotone401 | 1:981b62bb5c87 | 243 | lfocv[channelOffset] = quantizedMap[(unsigned int)(MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, steps)) * (1024 / steps)]; |
casiotone401 | 0:cd43a974c54c | 244 | } |
casiotone401 | 0:cd43a974c54c | 245 | |
casiotone401 | 1:981b62bb5c87 | 246 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + lfocv[channelOffset] * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 247 | break; |
casiotone401 | 0:cd43a974c54c | 248 | |
casiotone401 | 0:cd43a974c54c | 249 | case Chr: |
casiotone401 | 0:cd43a974c54c | 250 | |
casiotone401 | 1:981b62bb5c87 | 251 | qcv = calibMap1[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES1 - 1))]; |
casiotone401 | 0:cd43a974c54c | 252 | |
casiotone401 | 1:981b62bb5c87 | 253 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 254 | |
casiotone401 | 0:cd43a974c54c | 255 | break; |
casiotone401 | 0:cd43a974c54c | 256 | |
casiotone401 | 0:cd43a974c54c | 257 | case Maj: |
casiotone401 | 0:cd43a974c54c | 258 | |
casiotone401 | 1:981b62bb5c87 | 259 | qcv = calibMap2[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES2 - 1))]; |
casiotone401 | 0:cd43a974c54c | 260 | |
casiotone401 | 1:981b62bb5c87 | 261 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 262 | |
casiotone401 | 0:cd43a974c54c | 263 | break; |
casiotone401 | 0:cd43a974c54c | 264 | |
casiotone401 | 0:cd43a974c54c | 265 | case M7: |
casiotone401 | 0:cd43a974c54c | 266 | |
casiotone401 | 1:981b62bb5c87 | 267 | qcv = calibMap3[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES3 - 1))]; |
casiotone401 | 0:cd43a974c54c | 268 | |
casiotone401 | 1:981b62bb5c87 | 269 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 270 | |
casiotone401 | 0:cd43a974c54c | 271 | break; |
casiotone401 | 0:cd43a974c54c | 272 | |
casiotone401 | 0:cd43a974c54c | 273 | case Min7: |
casiotone401 | 0:cd43a974c54c | 274 | |
casiotone401 | 1:981b62bb5c87 | 275 | qcv = calibMap4[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES4 - 1))]; |
casiotone401 | 0:cd43a974c54c | 276 | |
casiotone401 | 1:981b62bb5c87 | 277 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 278 | |
casiotone401 | 0:cd43a974c54c | 279 | break; |
casiotone401 | 0:cd43a974c54c | 280 | |
casiotone401 | 0:cd43a974c54c | 281 | case Dor: |
casiotone401 | 0:cd43a974c54c | 282 | |
casiotone401 | 1:981b62bb5c87 | 283 | qcv = calibMap5[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES5 - 1))]; |
casiotone401 | 0:cd43a974c54c | 284 | |
casiotone401 | 1:981b62bb5c87 | 285 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 286 | |
casiotone401 | 0:cd43a974c54c | 287 | break; |
casiotone401 | 0:cd43a974c54c | 288 | |
casiotone401 | 0:cd43a974c54c | 289 | case Min: |
casiotone401 | 0:cd43a974c54c | 290 | |
casiotone401 | 1:981b62bb5c87 | 291 | qcv = calibMap6[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES6 - 1))]; |
casiotone401 | 0:cd43a974c54c | 292 | |
casiotone401 | 1:981b62bb5c87 | 293 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 294 | |
casiotone401 | 0:cd43a974c54c | 295 | break; |
casiotone401 | 0:cd43a974c54c | 296 | |
casiotone401 | 0:cd43a974c54c | 297 | case S5th: |
casiotone401 | 0:cd43a974c54c | 298 | |
casiotone401 | 1:981b62bb5c87 | 299 | qcv = calibMap7[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES7 - 1))]; |
casiotone401 | 0:cd43a974c54c | 300 | |
casiotone401 | 1:981b62bb5c87 | 301 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 302 | |
casiotone401 | 0:cd43a974c54c | 303 | break; |
casiotone401 | 0:cd43a974c54c | 304 | |
casiotone401 | 0:cd43a974c54c | 305 | case Wht: |
casiotone401 | 0:cd43a974c54c | 306 | |
casiotone401 | 1:981b62bb5c87 | 307 | qcv = calibMap8[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES8 - 1))]; |
casiotone401 | 0:cd43a974c54c | 308 | |
casiotone401 | 1:981b62bb5c87 | 309 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 310 | |
casiotone401 | 0:cd43a974c54c | 311 | break; |
casiotone401 | 0:cd43a974c54c | 312 | } |
casiotone401 | 0:cd43a974c54c | 313 | |
casiotone401 | 1:981b62bb5c87 | 314 | if (!gCtrlSW[4]) |
casiotone401 | 1:981b62bb5c87 | 315 | { |
casiotone401 | 1:981b62bb5c87 | 316 | jitter = 0; |
casiotone401 | 0:cd43a974c54c | 317 | |
casiotone401 | 1:981b62bb5c87 | 318 | } else if (gCtrlSW[4] && jitterCount % 64 == 0) { // ASR Analog Mode |
casiotone401 | 1:981b62bb5c87 | 319 | |
casiotone401 | 1:981b62bb5c87 | 320 | jitter = ANALOG_JITTER; |
casiotone401 | 1:981b62bb5c87 | 321 | } |
casiotone401 | 1:981b62bb5c87 | 322 | |
casiotone401 | 1:981b62bb5c87 | 323 | cv = (unsigned int)(glidecv[channelOffset] + jitter); |
casiotone401 | 1:981b62bb5c87 | 324 | |
casiotone401 | 0:cd43a974c54c | 325 | UpdateCV(WRITE_UPDATE_N, ch, &cv); |
casiotone401 | 0:cd43a974c54c | 326 | |
casiotone401 | 0:cd43a974c54c | 327 | if (mcount == 0x1F) |
casiotone401 | 0:cd43a974c54c | 328 | { |
casiotone401 | 0:cd43a974c54c | 329 | UpdateCVMeter(ch, &cv); |
casiotone401 | 0:cd43a974c54c | 330 | } |
casiotone401 | 0:cd43a974c54c | 331 | |
casiotone401 | 0:cd43a974c54c | 332 | ++ch; |
casiotone401 | 0:cd43a974c54c | 333 | |
casiotone401 | 1:981b62bb5c87 | 334 | if (ch == 8) |
casiotone401 | 0:cd43a974c54c | 335 | { |
casiotone401 | 1:981b62bb5c87 | 336 | ch = channelOffset - 1; //output channelOffset ~ ch8 |
casiotone401 | 1:981b62bb5c87 | 337 | |
casiotone401 | 0:cd43a974c54c | 338 | ++mcount; |
casiotone401 | 0:cd43a974c54c | 339 | mcount &= 0x3F; |
casiotone401 | 0:cd43a974c54c | 340 | } |
casiotone401 | 1:981b62bb5c87 | 341 | |
casiotone401 | 1:981b62bb5c87 | 342 | ++jitterCount; |
casiotone401 | 1:981b62bb5c87 | 343 | jitterCount &= 0x1FF; |
casiotone401 | 0:cd43a974c54c | 344 | |
casiotone401 | 0:cd43a974c54c | 345 | } |
casiotone401 | 0:cd43a974c54c | 346 |