Browse Source

Don't refresh SampleRateConverter state if settings aren't changed

tags/v0.6.0
Andrew Belt 7 years ago
parent
commit
8352f54594
2 changed files with 12 additions and 21 deletions
  1. +6
    -0
      include/dsp/samplerate.hpp
  2. +6
    -21
      src/Core/AudioInterface.cpp

+ 6
- 0
include/dsp/samplerate.hpp View File

@@ -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();


+ 6
- 21
src/Core/AudioInterface.cpp View File

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


Loading…
Cancel
Save