Unified · Split
| @@ -80,6 +80,7 @@ extern "C" { · 79 unmodified lines | |||
| 80 | float iinc; | 80 | float iinc; |
| 81 | int8_t dir; | 81 | int8_t dir; |
| 82 | int8_t flip; | 82 | int8_t flip; |
| 83 | int8_t bnf; | ||
| 83 | 84 | ||
| 84 | int32_t start; | 85 | int32_t start; |
| 85 | int32_t end; | 86 | int32_t end; |
| @@ -120,8 +120,10 @@ void tSampler_init (tSampler* const p, tBuffer* s) · 119 unmodified lines | |||
| 120 | p->idx = 0.f; | 120 | p->idx = 0.f; |
| 121 | p->inc = 1.f; | 121 | p->inc = 1.f; |
| 122 | p->iinc = 1.f; | 122 | p->iinc = 1.f; |
| 123 | |||
| 123 | p->dir = 1; | 124 | p->dir = 1; |
| 124 | p->flip = 1; | 125 | p->flip = 1; |
| 126 | p->bnf = 1; | ||
| 125 | 127 | ||
| 126 | p->mode = Normal; | 128 | p->mode = Normal; |
| 127 | 129 | ||
| @@ -148,7 +150,7 @@ float tSampler_tick (tSampler* const p) · 20 unmodified lines | |||
| 148 | 150 | ||
| 149 | float* buff = p->samp->buff; | 151 | float* buff = p->samp->buff; |
| 150 | 152 | ||
| 151 | int dir = p->dir * p->flip; | 153 | int dir = p->bnf * p->dir * p->flip; |
| 152 | 154 | ||
| 153 | int idx; | 155 | int idx; |
| 154 | float alpha; | 156 | float alpha; |
| @@ -269,13 +271,18 @@ float tSampler_tick (tSampler* const p) · 114 unmodified lines | |||
| 269 | } | 271 | } |
| 270 | else // == BackAndForth | 272 | else // == BackAndForth |
| 271 | { | 273 | { |
| 272 | if ((idx <= start) || (idx >= end)) | 274 | if (p->idx < start) |
| 275 | { | ||
| 276 | p->bnf = -p->bnf; | ||
| 277 | p->idx = start; | ||
| 278 | } | ||
| 279 | else if (p->idx > end) | ||
| 273 | { | 280 | { |
| 274 | p->dir = -p->dir; | 281 | p->bnf = -p->bnf; |
| 275 | p->idx += (p->dir * p->flip * p->inc); | 282 | p->idx = end; |
| 276 | } | 283 | } |
| 277 | } | 284 | } |
| 278 | 285 | ||
| 279 | g1 = 1.f - g2; | 286 | g1 = 1.f - g2; |
| 280 | 287 | ||
| 281 | sample = sample * g1 + cfxsample * g2; | 288 | sample = sample * g1 + cfxsample * g2; |
| @@ -27,13 +27,11 @@ void LEAFTest_init (float sampleRate, int blockSize) · 26 unmodified lines | |||
| 27 | tBuffer_init(&sample, leaf.sampleRate * 2); | 27 | tBuffer_init(&sample, leaf.sampleRate * 2); |
| 28 | 28 | ||
| 29 | tSampler_init(&player, &sample); | 29 | tSampler_init(&player, &sample); |
| 30 | tSampler_setMode(&player, Loop); | 30 | tSampler_setMode(&player, BackAndForth); |
| 31 | 31 | ||
| 32 | leaf_pool_report(); | 32 | leaf_pool_report(); |
| 33 | 33 | ||
| 34 | tBuffer_record(&sample); | 34 | tBuffer_record(&sample); |
| 35 | |||
| 36 | tSampler_play(&player); | ||
| 37 | } | 35 | } |
| 38 | 36 | ||
| 39 | int timer = 0; | 37 | int timer = 0; |
| @@ -45,7 +43,7 @@ float LEAFTest_tick (float input) · 5 unmodified lines | |||
| 45 | return tSampler_tick(&player); | 43 | return tSampler_tick(&player); |
| 46 | } | 44 | } |
| 47 | 45 | ||
| 48 | bool lastState = false; | 46 | bool lastState = false, lastPlayState = false; |
| 49 | void LEAFTest_block (void) | 47 | void LEAFTest_block (void) |
| 50 | { | 48 | { |
| 51 | float val = getSliderValue("rate"); | 49 | float val = getSliderValue("rate"); |
| @@ -77,7 +75,16 @@ void LEAFTest_block (void) · 25 unmodified lines | |||
| 77 | tBuffer_record(&sample); | 75 | tBuffer_record(&sample); |
| 78 | } | 76 | } |
| 79 | 77 | ||
| 80 | lastState = state; | 78 | lastState = state; |
| 79 | |||
| 80 | state = getButtonState("play"); | ||
| 81 | |||
| 82 | if (state && !lastPlayState) | ||
| 83 | { | ||
| 84 | tSampler_play(&player); | ||
| 85 | } | ||
| 86 | |||
| 87 | lastPlayState = state; | ||
| 81 | } | 88 | } |
| 82 | 89 | ||
| 83 | void LEAFTest_controllerInput (int cnum, float cval) | 90 | void LEAFTest_controllerInput (int cnum, float cval) |