Revert "Implement a new resampling algorithm in AudioStreamPlaybackResampled"
This reverts commit b2264cb48b
.
This commit is contained in:
parent
23bf04ae9a
commit
57ccfab5fb
1 changed files with 9 additions and 9 deletions
|
@ -54,21 +54,21 @@ void AudioStreamPlaybackResampled::mix(AudioFrame *p_buffer, float p_rate_scale,
|
||||||
|
|
||||||
for (int i = 0; i < p_frames; i++) {
|
for (int i = 0; i < p_frames; i++) {
|
||||||
uint32_t idx = CUBIC_INTERP_HISTORY + uint32_t(mix_offset >> FP_BITS);
|
uint32_t idx = CUBIC_INTERP_HISTORY + uint32_t(mix_offset >> FP_BITS);
|
||||||
// 4 point, 4th order optimal resampling algorithm from: http://yehar.com/blog/wp-content/uploads/2009/08/deip.pdf
|
//standard cubic interpolation (great quality/performance ratio)
|
||||||
|
//this used to be moved to a LUT for greater performance, but nowadays CPU speed is generally faster than memory.
|
||||||
float mu = (mix_offset & FP_MASK) / float(FP_LEN);
|
float mu = (mix_offset & FP_MASK) / float(FP_LEN);
|
||||||
AudioFrame y0 = internal_buffer[idx - 3];
|
AudioFrame y0 = internal_buffer[idx - 3];
|
||||||
AudioFrame y1 = internal_buffer[idx - 2];
|
AudioFrame y1 = internal_buffer[idx - 2];
|
||||||
AudioFrame y2 = internal_buffer[idx - 1];
|
AudioFrame y2 = internal_buffer[idx - 1];
|
||||||
AudioFrame y3 = internal_buffer[idx - 0];
|
AudioFrame y3 = internal_buffer[idx - 0];
|
||||||
|
|
||||||
AudioFrame even1 = y2 + y1, odd1 = y2 - y1;
|
float mu2 = mu * mu;
|
||||||
AudioFrame even2 = y3 + y0, odd2 = y3 - y0;
|
AudioFrame a0 = y3 - y2 - y0 + y1;
|
||||||
AudioFrame c0 = even1 * 0.46835497211269561 + even2 * 0.03164502784253309;
|
AudioFrame a1 = y0 - y1 - a0;
|
||||||
AudioFrame c1 = odd1 * 0.56001293337091440 + odd2 * 0.14666238593949288;
|
AudioFrame a2 = y2 - y0;
|
||||||
AudioFrame c2 = even1 * -0.250038759826233691 + even2 * 0.25003876124297131;
|
AudioFrame a3 = y1;
|
||||||
AudioFrame c3 = odd1 * -0.49949850957839148 + odd2 * 0.16649935475113800;
|
|
||||||
AudioFrame c4 = even1 * 0.00016095224137360 + even2 * -0.00016095810460478;
|
p_buffer[i] = (a0 * mu * mu2 + a1 * mu2 + a2 * mu + a3);
|
||||||
p_buffer[i] = (((c4 * mu + c3) * mu + c2) * mu + c1) * mu + c0;
|
|
||||||
|
|
||||||
mix_offset += mix_increment;
|
mix_offset += mix_increment;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue