Showing the changes to LEAF/Src_cpp/leaf-delay.cpp (1 of 8 files). Show all
Unified · Split
| @@ -29,8 +29,6 @@ void tDelay_init (tDelay* const d, uint32_t delay, uint32_t maxDelay) · 28 unmodified lines | ||
| 29 | 29 | |
| 30 | 30 | d->buff = (float*) leaf_alloc(sizeof(float) * maxDelay); |
| 31 | 31 | |
| 32 | − d->delay = 0.0f; | |
| 33 | − | |
| 34 | 32 | d->inPoint = 0; |
| 35 | 33 | d->outPoint = 0; |
| 36 | 34 | |
| @@ -143,8 +141,6 @@ void tDelayL_init (tDelayL* const d, float delay, uint32_t maxDelay) · 106 unmodified lines | ||
| 143 | 141 | |
| 144 | 142 | d->buff = (float*) leaf_alloc(sizeof(float) * maxDelay); |
| 145 | 143 | |
| 146 | − d->delay = 0.0f; | |
| 147 | − | |
| 148 | 144 | d->gain = 1.0f; |
| 149 | 145 | |
| 150 | 146 | d->lastIn = 0.0f; |
| @@ -206,14 +202,28 @@ int tDelayL_setDelay (tDelayL* const d, float delay) · 55 unmodified lines | ||
| 206 | 202 | return 0; |
| 207 | 203 | } |
| 208 | 204 | |
| 209 | −float tDelayL_tapOut (tDelayL* const d, uint32_t tapDelay) | |
| 205 | +float tDelayL_tapOut (tDelayL* const d, float tapDelay) | |
| 210 | 206 | { |
| 211 | − int32_t tap = d->inPoint - tapDelay - 1; | |
| 207 | + float tap = (float) d->inPoint - tapDelay - 1.f; | |
| 212 | 208 | |
| 213 | 209 | // Check for wraparound. |
| 214 | − while ( tap < 0 ) tap += d->maxDelay; | |
| 215 | − | |
| 216 | − return d->buff[tap]; | |
| 210 | + while ( tap < 0.f ) tap += (float)d->maxDelay; | |
| 211 | + | |
| 212 | + float alpha = tap - (int)tap; | |
| 213 | + float omAlpha = 1.f - alpha; | |
| 214 | + | |
| 215 | + int ptx = (int) tap; | |
| 216 | + | |
| 217 | + // First 1/2 of interpolation | |
| 218 | + float samp = d->buff[ptx] * omAlpha; | |
| 219 | + | |
| 220 | + // Second 1/2 of interpolation | |
| 221 | + if ((ptx + 1) < d->maxDelay) | |
| 222 | + samp += d->buff[ptx+1] * d->alpha; | |
| 223 | + else | |
| 224 | + samp += d->buff[0] * d->alpha; | |
| 225 | + | |
| 226 | + return samp; | |
| 217 | 227 | |
| 218 | 228 | } |
| 219 | 229 | |
| @@ -274,8 +284,6 @@ void tDelayA_init (tDelayA* const d, float delay, uint32_t maxDelay) · 54 unmodified lines | ||
| 274 | 284 | |
| 275 | 285 | d->buff = (float*) leaf_alloc(sizeof(float) * maxDelay); |
| 276 | 286 | |
| 277 | − d->delay = 0.0f; | |
| 278 | − | |
| 279 | 287 | d->gain = 1.0f; |
| 280 | 288 | |
| 281 | 289 | d->lastIn = 0.0f; |