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) for (const auto& effectPtr : _effects)
effectPtr->init(sampleRate); effectPtr->setSampleRate(sampleRate);
} }
void EffectBus::clear() 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 void EffectBus::setSamplesPerBlock(int samplesPerBlock) noexcept
{ {
_inputs.resize(samplesPerBlock); _inputs.resize(samplesPerBlock);

View file

@ -30,7 +30,7 @@ public:
/** /**
@brief Initializes with the given sample rate. @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. @brief Reset the state to initial.
@ -133,7 +133,7 @@ public:
/** /**
@brief Initializes all effects in the bus with the given sample rate. @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. @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.emplace_back(new EffectBus);
effectBuses[0]->setGainToMain(1.0); effectBuses[0]->setGainToMain(1.0);
effectBuses[0]->setSamplesPerBlock(samplesPerBlock); effectBuses[0]->setSamplesPerBlock(samplesPerBlock);
effectBuses[0]->init(sampleRate); effectBuses[0]->setSampleRate(sampleRate);
resources.filePool.clear(); resources.filePool.clear();
resources.logger.clear(); resources.logger.clear();
numGroups = 0; numGroups = 0;
@ -201,10 +201,13 @@ void sfz::Synth::handleEffectOpcodes(const std::vector<Opcode>& members)
auto getOrCreateBus = [this](unsigned index) -> EffectBus& { auto getOrCreateBus = [this](unsigned index) -> EffectBus& {
if (index + 1 > effectBuses.size()) if (index + 1 > effectBuses.size())
effectBuses.resize(index + 1); effectBuses.resize(index + 1);
EffectBusPtr& slot = effectBuses[index]; EffectBusPtr& bus = effectBuses[index];
if (!slot) if (!bus) {
slot.reset(new EffectBus); bus.reset(new EffectBus);
return *slot; bus->setSampleRate(sampleRate);
bus->setSamplesPerBlock(samplesPerBlock);
}
return *bus;
}; };
for (const Opcode& opcode : members) { for (const Opcode& opcode : members) {
@ -255,7 +258,7 @@ void sfz::Synth::handleEffectOpcodes(const std::vector<Opcode>& members)
// create the effect and add it // create the effect and add it
EffectBus& bus = getOrCreateBus(busIndex); EffectBus& bus = getOrCreateBus(busIndex);
auto fx = effectFactory.makeEffect(members); auto fx = effectFactory.makeEffect(members);
fx->init(sampleRate); fx->setSampleRate(sampleRate);
bus.addEffect(std::move(fx)); 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) { for (size_t i = 0, n = effectBuses.size(); i < n; ++i) {
if (EffectBus* bus = effectBuses[i].get()) if (EffectBus* bus = effectBuses[i].get())
bus->init(sampleRate); bus->setSampleRate(sampleRate);
} }
} }

View file

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

View file

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

View file

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

View file

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