Change init to setSampleRate andset the blockSize and sampleRate of new busses

This commit is contained in:
Paul Fd 2020-03-06 11:09:27 +01:00
parent 1ac68cc3d2
commit 235069fd27
7 changed files with 22 additions and 15 deletions

View file

@ -91,10 +91,10 @@ void EffectBus::addToInputs(const float* const addInput[], float addGain, unsign
}
}
void EffectBus::init(double sampleRate)
void EffectBus::setSampleRate(double sampleRate)
{
for (const auto& effectPtr : _effects)
effectPtr->init(sampleRate);
effectPtr->setSampleRate(sampleRate);
}
void EffectBus::clear()
@ -130,6 +130,10 @@ void EffectBus::mixOutputsTo(float* const mainOutput[], float* const mixOutput[]
}
}
size_t EffectBus::numEffects() const noexcept
{
return _effects.size();
}
void EffectBus::setSamplesPerBlock(int samplesPerBlock) noexcept
{
_inputs.resize(samplesPerBlock);

View file

@ -30,7 +30,7 @@ public:
/**
@brief Initializes with the given sample rate.
*/
virtual void init(double sampleRate) = 0;
virtual void setSampleRate(double sampleRate) = 0;
/**
@brief Reset the state to initial.
@ -133,7 +133,7 @@ public:
/**
@brief Initializes all effects in the bus with the given sample rate.
*/
void init(double sampleRate);
void setSampleRate(double sampleRate);
/**
@brief Resets the state of all effects in the bus.

View file

@ -126,7 +126,7 @@ void sfz::Synth::clear()
effectBuses.emplace_back(new EffectBus);
effectBuses[0]->setGainToMain(1.0);
effectBuses[0]->setSamplesPerBlock(samplesPerBlock);
effectBuses[0]->init(sampleRate);
effectBuses[0]->setSampleRate(sampleRate);
resources.filePool.clear();
resources.logger.clear();
numGroups = 0;
@ -201,10 +201,13 @@ void sfz::Synth::handleEffectOpcodes(const std::vector<Opcode>& members)
auto getOrCreateBus = [this](unsigned index) -> EffectBus& {
if (index + 1 > effectBuses.size())
effectBuses.resize(index + 1);
EffectBusPtr& slot = effectBuses[index];
if (!slot)
slot.reset(new EffectBus);
return *slot;
EffectBusPtr& bus = effectBuses[index];
if (!bus) {
bus.reset(new EffectBus);
bus->setSampleRate(sampleRate);
bus->setSamplesPerBlock(samplesPerBlock);
}
return *bus;
};
for (const Opcode& opcode : members) {
@ -255,7 +258,7 @@ void sfz::Synth::handleEffectOpcodes(const std::vector<Opcode>& members)
// create the effect and add it
EffectBus& bus = getOrCreateBus(busIndex);
auto fx = effectFactory.makeEffect(members);
fx->init(sampleRate);
fx->setSampleRate(sampleRate);
bus.addEffect(std::move(fx));
}
@ -482,7 +485,7 @@ void sfz::Synth::setSampleRate(float sampleRate) noexcept
for (size_t i = 0, n = effectBuses.size(); i < n; ++i) {
if (EffectBus* bus = effectBuses[i].get())
bus->init(sampleRate);
bus->setSampleRate(sampleRate);
}
}

View file

@ -45,7 +45,7 @@
namespace sfz {
namespace fx {
void Lofi::init(double sampleRate)
void Lofi::setSampleRate(double sampleRate)
{
for (unsigned c = 0; c < EffectChannels; ++c) {
_bitred[c].init(sampleRate);

View file

@ -19,7 +19,7 @@ namespace fx {
/**
* @brief Initializes with the given sample rate.
*/
void init(double sampleRate) override;
void setSampleRate(double sampleRate) override;
/**
* @brief Reset the state to initial.

View file

@ -10,7 +10,7 @@
namespace sfz {
namespace fx {
void Nothing::init(double sampleRate)
void Nothing::setSampleRate(double sampleRate)
{
(void)sampleRate;
}

View file

@ -18,7 +18,7 @@ namespace fx {
/**
* @brief Initializes with the given sample rate.
*/
void init(double sampleRate) override;
void setSampleRate(double sampleRate) override;
/**
* @brief Reset the state to initial.