OSCtoCV Library
OSCtoCV_LFO.cpp@6:7fb15b1b5459, 2016-02-25 (annotated)
- Committer:
- casiotone401
- Date:
- Thu Feb 25 11:21:37 2016 +0000
- Revision:
- 6:7fb15b1b5459
- Parent:
- 4:fe335dc8d53d
minor change
Who changed what in which revision?
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 | 6:7fb15b1b5459 | 106 | void SteppedLFO(uint8_t channelOffset, bool quantizeOff) |
casiotone401 | 0:cd43a974c54c | 107 | { |
casiotone401 | 1:981b62bb5c87 | 108 | static uint8_t ch = channelOffset; |
casiotone401 | 4:fe335dc8d53d | 109 | static uint8_t mcount; |
casiotone401 | 0:cd43a974c54c | 110 | int waveform; |
casiotone401 | 0:cd43a974c54c | 111 | static int _waveform = -1; |
casiotone401 | 0:cd43a974c54c | 112 | static int steps; |
casiotone401 | 4:fe335dc8d53d | 113 | uint8_t qmode; |
casiotone401 | 0:cd43a974c54c | 114 | static float lfocv[8], glidecv[8]; |
casiotone401 | 0:cd43a974c54c | 115 | unsigned int cv; |
casiotone401 | 0:cd43a974c54c | 116 | static float qcv; |
casiotone401 | 0:cd43a974c54c | 117 | float freq; |
casiotone401 | 1:981b62bb5c87 | 118 | static int jitter, jitterCount; |
casiotone401 | 4:fe335dc8d53d | 119 | |
casiotone401 | 0:cd43a974c54c | 120 | // select waveform ArdSW1(gArdSW[0]) |
casiotone401 | 0:cd43a974c54c | 121 | waveform = CheckSubMode1(); |
casiotone401 | 0:cd43a974c54c | 122 | |
casiotone401 | 0:cd43a974c54c | 123 | if (_waveform != waveform) // update LCD |
casiotone401 | 0:cd43a974c54c | 124 | { |
casiotone401 | 0:cd43a974c54c | 125 | switch (waveform) |
casiotone401 | 0:cd43a974c54c | 126 | { |
casiotone401 | 0:cd43a974c54c | 127 | case TRIANGLE_WAVE: |
casiotone401 | 0:cd43a974c54c | 128 | |
casiotone401 | 1:981b62bb5c87 | 129 | UpdateSubModeLCD("Tri:Wave"); |
casiotone401 | 0:cd43a974c54c | 130 | break; |
casiotone401 | 0:cd43a974c54c | 131 | |
casiotone401 | 0:cd43a974c54c | 132 | case SAW_WAVE: |
casiotone401 | 0:cd43a974c54c | 133 | |
casiotone401 | 1:981b62bb5c87 | 134 | UpdateSubModeLCD("Saw:Wave"); |
casiotone401 | 0:cd43a974c54c | 135 | break; |
casiotone401 | 0:cd43a974c54c | 136 | |
casiotone401 | 0:cd43a974c54c | 137 | case SQUARE_WAVE: |
casiotone401 | 0:cd43a974c54c | 138 | |
casiotone401 | 1:981b62bb5c87 | 139 | UpdateSubModeLCD("Sqr:Wave"); |
casiotone401 | 0:cd43a974c54c | 140 | break; |
casiotone401 | 0:cd43a974c54c | 141 | |
casiotone401 | 0:cd43a974c54c | 142 | case SINE_WAVE: |
casiotone401 | 0:cd43a974c54c | 143 | |
casiotone401 | 1:981b62bb5c87 | 144 | UpdateSubModeLCD("Sin:Wave"); |
casiotone401 | 0:cd43a974c54c | 145 | break; |
casiotone401 | 0:cd43a974c54c | 146 | |
casiotone401 | 0:cd43a974c54c | 147 | case EXP_WAVE: |
casiotone401 | 0:cd43a974c54c | 148 | |
casiotone401 | 1:981b62bb5c87 | 149 | UpdateSubModeLCD("Exp:Wave"); |
casiotone401 | 0:cd43a974c54c | 150 | break; |
casiotone401 | 0:cd43a974c54c | 151 | |
casiotone401 | 0:cd43a974c54c | 152 | case LOG_WAVE: |
casiotone401 | 0:cd43a974c54c | 153 | |
casiotone401 | 1:981b62bb5c87 | 154 | UpdateSubModeLCD("Log:Wave"); |
casiotone401 | 0:cd43a974c54c | 155 | break; |
casiotone401 | 0:cd43a974c54c | 156 | |
casiotone401 | 0:cd43a974c54c | 157 | case SYNTH_WAVE: |
casiotone401 | 0:cd43a974c54c | 158 | |
casiotone401 | 1:981b62bb5c87 | 159 | UpdateSubModeLCD("Syn:Wave"); |
casiotone401 | 0:cd43a974c54c | 160 | break; |
casiotone401 | 0:cd43a974c54c | 161 | |
casiotone401 | 0:cd43a974c54c | 162 | case NOISE: |
casiotone401 | 0:cd43a974c54c | 163 | |
casiotone401 | 1:981b62bb5c87 | 164 | UpdateSubModeLCD("XorNoise"); |
casiotone401 | 0:cd43a974c54c | 165 | break; |
casiotone401 | 0:cd43a974c54c | 166 | |
casiotone401 | 0:cd43a974c54c | 167 | default: |
casiotone401 | 0:cd43a974c54c | 168 | break; |
casiotone401 | 0:cd43a974c54c | 169 | } |
casiotone401 | 0:cd43a974c54c | 170 | |
casiotone401 | 0:cd43a974c54c | 171 | _waveform = waveform; |
casiotone401 | 0:cd43a974c54c | 172 | } |
casiotone401 | 0:cd43a974c54c | 173 | |
casiotone401 | 0:cd43a974c54c | 174 | // frequency control ArdPot1(gArdPot[0]) |
casiotone401 | 0:cd43a974c54c | 175 | freq = gArdPot[0] * 0.10f + 0.001f; |
casiotone401 | 0:cd43a974c54c | 176 | |
casiotone401 | 0:cd43a974c54c | 177 | switch (waveform) |
casiotone401 | 0:cd43a974c54c | 178 | { |
casiotone401 | 0:cd43a974c54c | 179 | case TRIANGLE_WAVE: |
casiotone401 | 0:cd43a974c54c | 180 | |
casiotone401 | 1:981b62bb5c87 | 181 | lfocv[channelOffset] = TriWave(UpdateLFO(freq)) * SCALING_N; |
casiotone401 | 0:cd43a974c54c | 182 | break; |
casiotone401 | 0:cd43a974c54c | 183 | |
casiotone401 | 0:cd43a974c54c | 184 | case SAW_WAVE: |
casiotone401 | 0:cd43a974c54c | 185 | |
casiotone401 | 1:981b62bb5c87 | 186 | lfocv[channelOffset] = SawWave(UpdateLFO(freq)) * SCALING_N; |
casiotone401 | 0:cd43a974c54c | 187 | break; |
casiotone401 | 0:cd43a974c54c | 188 | |
casiotone401 | 0:cd43a974c54c | 189 | case SQUARE_WAVE: |
casiotone401 | 0:cd43a974c54c | 190 | |
casiotone401 | 1:981b62bb5c87 | 191 | lfocv[channelOffset] = SqrWave(UpdateLFO(freq)) * SCALING_N; |
casiotone401 | 0:cd43a974c54c | 192 | break; |
casiotone401 | 0:cd43a974c54c | 193 | |
casiotone401 | 0:cd43a974c54c | 194 | case SINE_WAVE: |
casiotone401 | 0:cd43a974c54c | 195 | |
casiotone401 | 1:981b62bb5c87 | 196 | lfocv[channelOffset] = SinWave(UpdateLFO(freq)) * SCALING_N; |
casiotone401 | 0:cd43a974c54c | 197 | break; |
casiotone401 | 0:cd43a974c54c | 198 | |
casiotone401 | 0:cd43a974c54c | 199 | case EXP_WAVE: |
casiotone401 | 0:cd43a974c54c | 200 | |
casiotone401 | 1:981b62bb5c87 | 201 | lfocv[channelOffset] = ExpWave(UpdateLFO(freq)) * SCALING_N; |
casiotone401 | 0:cd43a974c54c | 202 | break; |
casiotone401 | 0:cd43a974c54c | 203 | |
casiotone401 | 0:cd43a974c54c | 204 | case LOG_WAVE: |
casiotone401 | 0:cd43a974c54c | 205 | |
casiotone401 | 1:981b62bb5c87 | 206 | lfocv[channelOffset] = LogWave(UpdateLFO(freq)) * SCALING_N; |
casiotone401 | 0:cd43a974c54c | 207 | break; |
casiotone401 | 0:cd43a974c54c | 208 | |
casiotone401 | 0:cd43a974c54c | 209 | case SYNTH_WAVE: |
casiotone401 | 0:cd43a974c54c | 210 | |
casiotone401 | 1:981b62bb5c87 | 211 | lfocv[channelOffset] = SynthWave1(UpdateLFO(freq)) * SCALING_N; |
casiotone401 | 0:cd43a974c54c | 212 | break; |
casiotone401 | 0:cd43a974c54c | 213 | |
casiotone401 | 0:cd43a974c54c | 214 | case NOISE: |
casiotone401 | 0:cd43a974c54c | 215 | |
casiotone401 | 1:981b62bb5c87 | 216 | lfocv[channelOffset] = fmodf(Xorshift_32(), SCALING_N); |
casiotone401 | 0:cd43a974c54c | 217 | break; |
casiotone401 | 0:cd43a974c54c | 218 | |
casiotone401 | 0:cd43a974c54c | 219 | default: |
casiotone401 | 0:cd43a974c54c | 220 | break; |
casiotone401 | 0:cd43a974c54c | 221 | } |
casiotone401 | 0:cd43a974c54c | 222 | |
casiotone401 | 0:cd43a974c54c | 223 | //lfocv[i + 4] = Invert(lfocv[i]); // ch4 ~ ch8 invert waveform |
casiotone401 | 0:cd43a974c54c | 224 | |
casiotone401 | 1:981b62bb5c87 | 225 | if (quantizeOff) // quantize Off |
casiotone401 | 1:981b62bb5c87 | 226 | { |
casiotone401 | 1:981b62bb5c87 | 227 | qmode = Lin; |
casiotone401 | 4:fe335dc8d53d | 228 | |
casiotone401 | 4:fe335dc8d53d | 229 | } else { |
casiotone401 | 4:fe335dc8d53d | 230 | |
casiotone401 | 4:fe335dc8d53d | 231 | qmode = CheckQuantizeMode(); |
casiotone401 | 1:981b62bb5c87 | 232 | } |
casiotone401 | 1:981b62bb5c87 | 233 | |
casiotone401 | 0:cd43a974c54c | 234 | switch (qmode) |
casiotone401 | 0:cd43a974c54c | 235 | { |
casiotone401 | 0:cd43a974c54c | 236 | case Lin: |
casiotone401 | 0:cd43a974c54c | 237 | |
casiotone401 | 0:cd43a974c54c | 238 | if (gArdPot[1] > 10) |
casiotone401 | 0:cd43a974c54c | 239 | { |
casiotone401 | 0:cd43a974c54c | 240 | steps = (unsigned int)gArdPot[1] * 0.1; // check LFO Steps(Quantize Resolustion)ArdPot2gArdPot[1] |
casiotone401 | 0:cd43a974c54c | 241 | |
casiotone401 | 1:981b62bb5c87 | 242 | lfocv[channelOffset] = quantizedMap[(unsigned int)(MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, steps)) * (1024 / steps)]; |
casiotone401 | 0:cd43a974c54c | 243 | } |
casiotone401 | 0:cd43a974c54c | 244 | |
casiotone401 | 1:981b62bb5c87 | 245 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + lfocv[channelOffset] * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 246 | break; |
casiotone401 | 0:cd43a974c54c | 247 | |
casiotone401 | 0:cd43a974c54c | 248 | case Chr: |
casiotone401 | 0:cd43a974c54c | 249 | |
casiotone401 | 1:981b62bb5c87 | 250 | qcv = calibMap1[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES1 - 1))]; |
casiotone401 | 0:cd43a974c54c | 251 | |
casiotone401 | 1:981b62bb5c87 | 252 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 253 | |
casiotone401 | 0:cd43a974c54c | 254 | break; |
casiotone401 | 0:cd43a974c54c | 255 | |
casiotone401 | 0:cd43a974c54c | 256 | case Maj: |
casiotone401 | 0:cd43a974c54c | 257 | |
casiotone401 | 1:981b62bb5c87 | 258 | qcv = calibMap2[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES2 - 1))]; |
casiotone401 | 0:cd43a974c54c | 259 | |
casiotone401 | 1:981b62bb5c87 | 260 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 261 | |
casiotone401 | 0:cd43a974c54c | 262 | break; |
casiotone401 | 0:cd43a974c54c | 263 | |
casiotone401 | 0:cd43a974c54c | 264 | case M7: |
casiotone401 | 0:cd43a974c54c | 265 | |
casiotone401 | 1:981b62bb5c87 | 266 | qcv = calibMap3[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES3 - 1))]; |
casiotone401 | 0:cd43a974c54c | 267 | |
casiotone401 | 1:981b62bb5c87 | 268 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 269 | |
casiotone401 | 0:cd43a974c54c | 270 | break; |
casiotone401 | 0:cd43a974c54c | 271 | |
casiotone401 | 0:cd43a974c54c | 272 | case Min7: |
casiotone401 | 0:cd43a974c54c | 273 | |
casiotone401 | 1:981b62bb5c87 | 274 | qcv = calibMap4[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES4 - 1))]; |
casiotone401 | 0:cd43a974c54c | 275 | |
casiotone401 | 1:981b62bb5c87 | 276 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 277 | |
casiotone401 | 0:cd43a974c54c | 278 | break; |
casiotone401 | 0:cd43a974c54c | 279 | |
casiotone401 | 0:cd43a974c54c | 280 | case Dor: |
casiotone401 | 0:cd43a974c54c | 281 | |
casiotone401 | 1:981b62bb5c87 | 282 | qcv = calibMap5[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES5 - 1))]; |
casiotone401 | 0:cd43a974c54c | 283 | |
casiotone401 | 1:981b62bb5c87 | 284 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 285 | |
casiotone401 | 0:cd43a974c54c | 286 | break; |
casiotone401 | 0:cd43a974c54c | 287 | |
casiotone401 | 0:cd43a974c54c | 288 | case Min: |
casiotone401 | 0:cd43a974c54c | 289 | |
casiotone401 | 1:981b62bb5c87 | 290 | qcv = calibMap6[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES6 - 1))]; |
casiotone401 | 0:cd43a974c54c | 291 | |
casiotone401 | 1:981b62bb5c87 | 292 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 293 | |
casiotone401 | 0:cd43a974c54c | 294 | break; |
casiotone401 | 0:cd43a974c54c | 295 | |
casiotone401 | 0:cd43a974c54c | 296 | case S5th: |
casiotone401 | 0:cd43a974c54c | 297 | |
casiotone401 | 1:981b62bb5c87 | 298 | qcv = calibMap7[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES7 - 1))]; |
casiotone401 | 0:cd43a974c54c | 299 | |
casiotone401 | 1:981b62bb5c87 | 300 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 301 | |
casiotone401 | 0:cd43a974c54c | 302 | break; |
casiotone401 | 0:cd43a974c54c | 303 | |
casiotone401 | 0:cd43a974c54c | 304 | case Wht: |
casiotone401 | 0:cd43a974c54c | 305 | |
casiotone401 | 1:981b62bb5c87 | 306 | qcv = calibMap8[(unsigned int)MapFloat(lfocv[channelOffset], 0, SCALING_N, 0, (QUAN_RES8 - 1))]; |
casiotone401 | 0:cd43a974c54c | 307 | |
casiotone401 | 1:981b62bb5c87 | 308 | glidecv[channelOffset] = glidecv[channelOffset] * gGlide + (qcv * SCALING_N) * (1.0f - gGlide); |
casiotone401 | 0:cd43a974c54c | 309 | |
casiotone401 | 0:cd43a974c54c | 310 | break; |
casiotone401 | 0:cd43a974c54c | 311 | } |
casiotone401 | 0:cd43a974c54c | 312 | |
casiotone401 | 1:981b62bb5c87 | 313 | if (!gCtrlSW[4]) |
casiotone401 | 1:981b62bb5c87 | 314 | { |
casiotone401 | 1:981b62bb5c87 | 315 | jitter = 0; |
casiotone401 | 0:cd43a974c54c | 316 | |
casiotone401 | 1:981b62bb5c87 | 317 | } else if (gCtrlSW[4] && jitterCount % 64 == 0) { // ASR Analog Mode |
casiotone401 | 1:981b62bb5c87 | 318 | |
casiotone401 | 1:981b62bb5c87 | 319 | jitter = ANALOG_JITTER; |
casiotone401 | 1:981b62bb5c87 | 320 | } |
casiotone401 | 1:981b62bb5c87 | 321 | |
casiotone401 | 1:981b62bb5c87 | 322 | cv = (unsigned int)(glidecv[channelOffset] + jitter); |
casiotone401 | 1:981b62bb5c87 | 323 | |
casiotone401 | 0:cd43a974c54c | 324 | UpdateCV(WRITE_UPDATE_N, ch, &cv); |
casiotone401 | 0:cd43a974c54c | 325 | |
casiotone401 | 0:cd43a974c54c | 326 | if (mcount == 0x1F) |
casiotone401 | 0:cd43a974c54c | 327 | { |
casiotone401 | 0:cd43a974c54c | 328 | UpdateCVMeter(ch, &cv); |
casiotone401 | 0:cd43a974c54c | 329 | } |
casiotone401 | 0:cd43a974c54c | 330 | |
casiotone401 | 0:cd43a974c54c | 331 | ++ch; |
casiotone401 | 0:cd43a974c54c | 332 | |
casiotone401 | 1:981b62bb5c87 | 333 | if (ch == 8) |
casiotone401 | 0:cd43a974c54c | 334 | { |
casiotone401 | 1:981b62bb5c87 | 335 | ch = channelOffset - 1; //output channelOffset ~ ch8 |
casiotone401 | 1:981b62bb5c87 | 336 | |
casiotone401 | 0:cd43a974c54c | 337 | ++mcount; |
casiotone401 | 0:cd43a974c54c | 338 | mcount &= 0x3F; |
casiotone401 | 0:cd43a974c54c | 339 | } |
casiotone401 | 1:981b62bb5c87 | 340 | |
casiotone401 | 1:981b62bb5c87 | 341 | ++jitterCount; |
casiotone401 | 1:981b62bb5c87 | 342 | jitterCount &= 0x1FF; |
casiotone401 | 0:cd43a974c54c | 343 | |
casiotone401 | 0:cd43a974c54c | 344 | } |
casiotone401 | 0:cd43a974c54c | 345 |