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) {