The filters have to be initialized with samplerate

This commit is contained in:
Paul Fd 2020-02-09 16:49:54 +01:00
parent 2acd8f45a3
commit d3592214b1
3 changed files with 27 additions and 2 deletions

View file

@ -59,7 +59,7 @@ void sfz::FilterHolder::process(const float** inputs, float** outputs, unsigned
lastGain = baseGain;
for (auto& mod: description->gainCC) {
lastResonance += midiState.getCCValue(mod.first) * mod.second;
lastGain += midiState.getCCValue(mod.first) * mod.second;
}
filter.process(inputs, outputs, lastCutoff, lastResonance, lastGain, numFrames);
@ -132,3 +132,14 @@ size_t sfz::FilterPool::setNumFilters(size_t numFilters)
return filters.size();
}
void sfz::FilterPool::setSampleRate(float sampleRate)
{
for (auto& filter: filters)
filter->setSampleRate(sampleRate);
}
void sfz::FilterHolder::setSampleRate(float sampleRate)
{
filter.init(static_cast<double>(sampleRate));
}

View file

@ -47,6 +47,12 @@ public:
* @return float
*/
float getLastGain() const;
/**
* @brief Set the sample rate for a filter
*
* @param sampleRate
*/
void setSampleRate(float sampleRate);
private:
/**
* Reset the filter. Is called internally when using setup().
@ -103,10 +109,16 @@ public:
* @return size_t the actual number of filters in the pool
*/
size_t setNumFilters(size_t numFilters);
/**
* @brief Set the sample rate for all filters
*
* @param sampleRate
*/
void setSampleRate(float sampleRate);
private:
std::atomic<bool> givingOutFilters { false };
std::atomic<bool> canGiveOutFilters { true };
float sampleRate { config::defaultSampleRate };
const MidiState& midiState;
std::vector<FilterHolderPtr> filters;
};

View file

@ -401,6 +401,8 @@ void sfz::Synth::setSampleRate(float sampleRate) noexcept
this->sampleRate = sampleRate;
for (auto& voice : voices)
voice->setSampleRate(sampleRate);
resources.filterPool.setSampleRate(sampleRate);
}
void sfz::Synth::renderBlock(AudioSpan<float> buffer) noexcept