Add equalizer processing
This commit is contained in:
parent
6d6872bb3f
commit
f365e4dfbe
2 changed files with 13 additions and 4 deletions
|
|
@ -18,7 +18,7 @@ sfz::Voice::Voice(sfz::Resources& resources)
|
||||||
: resources(resources)
|
: resources(resources)
|
||||||
{
|
{
|
||||||
filters.reserve(config::filtersPerVoice);
|
filters.reserve(config::filtersPerVoice);
|
||||||
equalizers.reserve(config::filtersPerVoice);
|
equalizers.reserve(config::eqsPerVoice);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sfz::Voice::startVoice(Region* region, int delay, int number, uint8_t value, sfz::Voice::TriggerType triggerType) noexcept
|
void sfz::Voice::startVoice(Region* region, int delay, int number, uint8_t value, sfz::Voice::TriggerType triggerType) noexcept
|
||||||
|
|
@ -91,13 +91,17 @@ void sfz::Voice::startVoice(Region* region, int delay, int number, uint8_t value
|
||||||
ASSERT((filters.capacity() - filters.size()) >= region->filters.size());
|
ASSERT((filters.capacity() - filters.size()) >= region->filters.size());
|
||||||
ASSERT((equalizers.capacity() - equalizers.size()) >= region->equalizers.size());
|
ASSERT((equalizers.capacity() - equalizers.size()) >= region->equalizers.size());
|
||||||
|
|
||||||
for(auto& filter: region->filters) {
|
for (auto& filter: region->filters) {
|
||||||
auto newFilter = resources.filterPool.getFilter(filter, number, value);
|
auto newFilter = resources.filterPool.getFilter(filter, number, value);
|
||||||
if (newFilter)
|
if (newFilter)
|
||||||
filters.push_back(newFilter);
|
filters.push_back(newFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Equalizers
|
for (auto& eq: region->equalizers) {
|
||||||
|
auto newEQ = resources.eqPool.getEQ(eq, value);
|
||||||
|
if (newEQ)
|
||||||
|
equalizers.push_back(newEQ);
|
||||||
|
}
|
||||||
|
|
||||||
sourcePosition = region->getOffset();
|
sourcePosition = region->getOffset();
|
||||||
triggerDelay = delay;
|
triggerDelay = delay;
|
||||||
|
|
@ -274,10 +278,15 @@ void sfz::Voice::renderBlock(AudioSpan<float> buffer) noexcept
|
||||||
|
|
||||||
const float* inputChannels[2] { buffer.getChannel(0), buffer.getChannel(1) };
|
const float* inputChannels[2] { buffer.getChannel(0), buffer.getChannel(1) };
|
||||||
float* outputChannels[2] { buffer.getChannel(0), buffer.getChannel(1) };
|
float* outputChannels[2] { buffer.getChannel(0), buffer.getChannel(1) };
|
||||||
|
|
||||||
for (auto& filter: filters) {
|
for (auto& filter: filters) {
|
||||||
filter->process(inputChannels, outputChannels, buffer.getNumFrames());
|
filter->process(inputChannels, outputChannels, buffer.getNumFrames());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (auto& eq: equalizers) {
|
||||||
|
eq->process(inputChannels, outputChannels, buffer.getNumFrames());
|
||||||
|
}
|
||||||
|
|
||||||
if (!egEnvelope.isSmoothing())
|
if (!egEnvelope.isSmoothing())
|
||||||
reset();
|
reset();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -297,7 +297,7 @@ private:
|
||||||
Resources& resources;
|
Resources& resources;
|
||||||
|
|
||||||
std::vector<FilterHolderPtr> filters;
|
std::vector<FilterHolderPtr> filters;
|
||||||
std::vector<FilterHolderPtr> equalizers;
|
std::vector<EQHolderPtr> equalizers;
|
||||||
|
|
||||||
ADSREnvelope<float> egEnvelope;
|
ADSREnvelope<float> egEnvelope;
|
||||||
LinearEnvelope<float> amplitudeEnvelope; // linear events
|
LinearEnvelope<float> amplitudeEnvelope; // linear events
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue