summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEllen Poe <ellen@ellenhp.me>2021-07-30 13:20:25 -0700
committerEllen Poe <ellen@ellenhp.me>2021-07-30 13:20:25 -0700
commit2d450c6f61e209c921eea352ed37afd98d11b034 (patch)
treeae39b7f12301341b6055db989afc3babe20263da
parent57ccfab5fba0d36513c4801309b6354ab82f5611 (diff)
Fix Godot's cubic resampling algorithm
-rw-r--r--servers/audio/audio_stream.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/servers/audio/audio_stream.cpp b/servers/audio/audio_stream.cpp
index 5c6d5d5a34..aefea6723e 100644
--- a/servers/audio/audio_stream.cpp
+++ b/servers/audio/audio_stream.cpp
@@ -63,12 +63,12 @@ void AudioStreamPlaybackResampled::mix(AudioFrame *p_buffer, float p_rate_scale,
AudioFrame y3 = internal_buffer[idx - 0];
float mu2 = mu * mu;
- AudioFrame a0 = y3 - y2 - y0 + y1;
- AudioFrame a1 = y0 - y1 - a0;
+ AudioFrame a0 = 3 * y1 - 3 * y2 + y3 - y0;
+ AudioFrame a1 = 2 * y0 - 5 * y1 + 4 * y2 - y3;
AudioFrame a2 = y2 - y0;
- AudioFrame a3 = y1;
+ AudioFrame a3 = 2 * y1;
- p_buffer[i] = (a0 * mu * mu2 + a1 * mu2 + a2 * mu + a3);
+ p_buffer[i] = (a0 * mu * mu2 + a1 * mu2 + a2 * mu + a3) / 2;
mix_offset += mix_increment;