summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2018-12-11 17:45:53 +0100
committerGitHub <noreply@github.com>2018-12-11 17:45:53 +0100
commit2c6679bb013af6c153e36b35606dddcc75f129dc (patch)
treedbf9d1c2c1cb8daa2b7e7de86391612b519072ae
parentMerge pull request #1888 from marcosvitali/glFrontFacing (diff)
parentAvoid (expensive) audio interpolation when sample rates already match (diff)
downloadyuzu-2c6679bb013af6c153e36b35606dddcc75f129dc.tar
yuzu-2c6679bb013af6c153e36b35606dddcc75f129dc.tar.gz
yuzu-2c6679bb013af6c153e36b35606dddcc75f129dc.tar.bz2
yuzu-2c6679bb013af6c153e36b35606dddcc75f129dc.tar.lz
yuzu-2c6679bb013af6c153e36b35606dddcc75f129dc.tar.xz
yuzu-2c6679bb013af6c153e36b35606dddcc75f129dc.tar.zst
yuzu-2c6679bb013af6c153e36b35606dddcc75f129dc.zip
-rw-r--r--src/audio_core/algorithm/interpolate.cpp5
-rw-r--r--src/audio_core/audio_renderer.cpp7
2 files changed, 8 insertions, 4 deletions
diff --git a/src/audio_core/algorithm/interpolate.cpp b/src/audio_core/algorithm/interpolate.cpp
index 3aea9b0f2..5005ba519 100644
--- a/src/audio_core/algorithm/interpolate.cpp
+++ b/src/audio_core/algorithm/interpolate.cpp
@@ -54,8 +54,9 @@ std::vector<s16> Interpolate(InterpolationState& state, std::vector<s16> input,
double l = 0.0;
double r = 0.0;
for (std::size_t j = 0; j < h.size(); j++) {
- l += Lanczos(taps, pos + j - taps + 1) * h[j][0];
- r += Lanczos(taps, pos + j - taps + 1) * h[j][1];
+ const double lanczos_calc = Lanczos(taps, pos + j - taps + 1);
+ l += lanczos_calc * h[j][0];
+ r += lanczos_calc * h[j][1];
}
output.emplace_back(static_cast<s16>(std::clamp(l, -32768.0, 32767.0)));
output.emplace_back(static_cast<s16>(std::clamp(r, -32768.0, 32767.0)));
diff --git a/src/audio_core/audio_renderer.cpp b/src/audio_core/audio_renderer.cpp
index 2e59894ab..2683f3a5f 100644
--- a/src/audio_core/audio_renderer.cpp
+++ b/src/audio_core/audio_renderer.cpp
@@ -285,8 +285,11 @@ void AudioRenderer::VoiceState::RefreshBuffer() {
break;
}
- samples =
- Interpolate(interp_state, std::move(samples), GetInfo().sample_rate, STREAM_SAMPLE_RATE);
+ // Only interpolate when necessary, expensive.
+ if (GetInfo().sample_rate != STREAM_SAMPLE_RATE) {
+ samples = Interpolate(interp_state, std::move(samples), GetInfo().sample_rate,
+ STREAM_SAMPLE_RATE);
+ }
is_refresh_pending = false;
}