History

Sampler working well with manual linear crossfade.

mulshine committed 7 years ago

Commit 1a65dc61 parent 6c87e501 file · +20 −11Browse files

Unified · Split

LEAF/Src/leaf-sample.c+20−11
@@ -106,7 +106,7 @@ void tSample_clear (tSample* const s) · 105 unmodified lines
106 106
107//==============================================================================107//==============================================================================
108 108
109#define CFX 50109#define CFX 10
110 110
111void tSamplePlayer_init (tSamplePlayer* const p, tSample* s)111void tSamplePlayer_init (tSamplePlayer* const p, tSample* s)
112{112{
@@ -144,6 +144,7 @@ float tSamplePlayer_tick (tSamplePlayer* const p) · 31 unmodified lines
144 144
145 float sample = 0.f;145 float sample = 0.f;
146 float cfxsample = 0.f;146 float cfxsample = 0.f;
147 int cfx = CFX;
147 148
148 float* buff = p->samp->buff;149 float* buff = p->samp->buff;
149 150
@@ -179,10 +180,15 @@ float tSamplePlayer_tick (tSamplePlayer* const p) · 29 unmodified lines
179 buff[i3],180 buff[i3],
180 buff[i4],181 buff[i4],
181 alpha);182 alpha);
182 if ((end - idx) <= CFX)183
184 cfx = (end - idx) / p->inc;
185
186 if (cfx <= CFX)
183 {187 {
184 // CROSSFADE SAMPLE188 // CROSSFADE SAMPLE
185 int cdx = idx - p->len;189 float idxx = p->idx - p->len;
190 int cdx = (int)(idxx);
191 float alpha = idxx - cdx;
186 192
187 i1 = cdx-1;193 i1 = cdx-1;
188 i3 = cdx+1;194 i3 = cdx+1;
@@ -193,10 +199,8 @@ float tSamplePlayer_tick (tSamplePlayer* const p) · 4 unmodified lines
193 buff[i3],199 buff[i3],
194 buff[i4],200 buff[i4],
195 alpha);201 alpha);
196
197 p->g2 = (float) (CFX - (end - idx - 1)) / (float) CFX;
198 p->g1 = 1.f - p->g2;
199 }202 }
203 else cfx = CFX;
200 }204 }
201 else205 else
202 {206 {
@@ -215,7 +219,9 @@ float tSamplePlayer_tick (tSamplePlayer* const p) · 12 unmodified lines
215 buff[i4],219 buff[i4],
216 1.0f-alpha);220 1.0f-alpha);
217 221
218 if ((idx - start) <= CFX)222 cfx = (idx - start) / p->inc;
223
224 if (cfx <= CFX)
219 {225 {
220 // CROSSFADE SAMPLE226 // CROSSFADE SAMPLE
221 int cdx = idx + p->len;227 int cdx = idx + p->len;
@@ -229,10 +235,8 @@ float tSamplePlayer_tick (tSamplePlayer* const p) · 7 unmodified lines
229 buff[i3],235 buff[i3],
230 buff[i4],236 buff[i4],
231 alpha);237 alpha);
232
233 p->g2 = (float) (CFX - (idx - start - 1)) / (float) CFX;
234 p->g1 = 1.f - p->g2;
235 }238 }
239 else cfx = CFX;
236 }240 }
237 241
238 p->idx += (dir * p->inc);242 p->idx += (dir * p->inc);
@@ -259,7 +263,12 @@ float tSamplePlayer_tick (tSamplePlayer* const p) · 20 unmodified lines
259 }263 }
260 }264 }
261 265
262 return sample * p->g1 + cfxsample * p->g2;266 sample = sample * p->g1 + cfxsample * p->g2;
267
268 p->g2 = (float) (CFX - cfx) / (float) CFX;
269 p->g1 = 1.f - p->g2;
270
271 return sample;
263}272}
264 273
265void tSamplePlayer_setSample (tSamplePlayer* const p, tSample* s)274void tSamplePlayer_setSample (tSamplePlayer* const p, tSample* s)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t