From 8352f54594f5d410d2160e6e57b0b8af459146a8 Mon Sep 17 00:00:00 2001 From: Andrew Belt Date: Tue, 20 Mar 2018 02:01:08 -0400 Subject: [PATCH] Don't refresh SampleRateConverter state if settings aren't changed --- include/dsp/samplerate.hpp | 6 ++++++ src/Core/AudioInterface.cpp | 27 ++++++--------------------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/include/dsp/samplerate.hpp b/include/dsp/samplerate.hpp index 25809b07..ebb99559 100644 --- a/include/dsp/samplerate.hpp +++ b/include/dsp/samplerate.hpp @@ -28,16 +28,22 @@ struct SampleRateConverter { /** Sets the number of channels to actually process. This can be at most CHANNELS. */ void setChannels(int channels) { assert(channels <= CHANNELS); + if (channels == this->channels) + return; this->channels = channels; refreshState(); } void setQuality(int quality) { + if (quality == this->quality) + return; this->quality = quality; refreshState(); } void setRates(int inRate, int outRate) { + if (inRate == this->inRate && outRate == this->outRate) + return; this->inRate = inRate; this->outRate = outRate; refreshState(); diff --git a/src/Core/AudioInterface.cpp b/src/Core/AudioInterface.cpp index 64606793..04e076e3 100644 --- a/src/Core/AudioInterface.cpp +++ b/src/Core/AudioInterface.cpp @@ -141,16 +141,6 @@ struct AudioInterface : Module { audioIO.fromJson(audioJ); } - void onSampleRateChange() override { - inputSrc.setRates(audioIO.sampleRate, (int) engineGetSampleRate()); - outputSrc.setRates((int) engineGetSampleRate(), audioIO.sampleRate); - } - - void onChannelsChange() { - inputSrc.setChannels(audioIO.numInputs); - outputSrc.setChannels(audioIO.numOutputs); - } - void onReset() override { audioIO.setDevice(-1, 0); } @@ -158,18 +148,13 @@ struct AudioInterface : Module { void AudioInterface::step() { - // Update sample rate if changed by audio driver - if (audioIO.sampleRate != lastSampleRate) { - onSampleRateChange(); - lastSampleRate = audioIO.sampleRate; - } + // Update SRC states + int sampleRate = (int) engineGetSampleRate(); + inputSrc.setRates(audioIO.sampleRate, sampleRate); + outputSrc.setRates(sampleRate, audioIO.sampleRate); - // Update number of channels if changed by audio driver - if (audioIO.numOutputs != lastNumOutputs || audioIO.numInputs != lastNumInputs) { - lastNumOutputs = audioIO.numOutputs; - lastNumInputs = audioIO.numInputs; - onChannelsChange(); - } + inputSrc.setChannels(audioIO.numInputs); + outputSrc.setChannels(audioIO.numOutputs); // Inputs: audio engine -> rack engine if (audioIO.active && audioIO.numInputs > 0) {