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