sfizz/src/sfizz/effects/Compressor.h
Jean Pierre Cimalando 8de4452e15 Add compressor
2020-08-05 05:29:26 +02:00

56 lines
1.5 KiB
C++

// SPDX-License-Identifier: BSD-2-Clause
// This code is part of the sfizz library and is licensed under a BSD 2-clause
// license. You should have receive a LICENSE.md file along with the code.
// If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz
#pragma once
#include "Effects.h"
#include "hiir/Downsampler2xFpu.h"
#include "hiir/Upsampler2xFpu.h"
#include <memory>
namespace sfz {
namespace fx {
/**
* @brief Compressor effect
*/
class Compressor : public Effect {
public:
Compressor();
~Compressor();
/**
* @brief Initializes with the given sample rate.
*/
void setSampleRate(double sampleRate) override;
/**
* @brief Sets the maximum number of frames to render at a time. The actual
* value can be lower but should never be higher.
*/
void setSamplesPerBlock(int samplesPerBlock) override;
/**
* @brief Reset the state to initial.
*/
void clear() override;
/**
* @brief Computes a cycle of the effect in stereo.
*/
void process(const float* const inputs[], float* const outputs[], unsigned nframes) override;
/**
* @brief Instantiates given the contents of the <effect> block.
*/
static std::unique_ptr<Effect> makeInstance(absl::Span<const Opcode> members);
private:
struct Impl;
std::unique_ptr<Impl> _impl;
};
} // namespace fx
} // namespace sfz