Stereo upward/downward expander with a continuous bounded gain law. More...
#include <expander.hpp>
Classes | |
| struct | Config |
Public Types | |
| using | DetectorMode = typename EnvelopeFollowerT<SampleType>::Mode |
Public Member Functions | |
| ExpanderStatus | prepare (SampleType sample_rate) noexcept |
| ExpanderStatus | configure (const Config &next) noexcept |
| Adopt a complete valid configuration. | |
| std::array< SampleType, 2 > | process (SampleType left, SampleType right) noexcept |
| void | process (SampleType *left, SampleType *right, int num_samples) noexcept |
| void | set_bypassed (bool bypassed) noexcept |
| bool | bypassed () const noexcept |
| void | reset () noexcept |
| const Config & | config () const noexcept |
| bool | prepared () const noexcept |
| SampleType | sample_rate () const noexcept |
| int | latency_samples () const noexcept |
| int | tail_samples () const noexcept |
| std::array< SampleType, 2 > | current_gain_db () const noexcept |
| std::array< GainReduction, 2 > | gain_reduction () const noexcept |
Static Public Member Functions | |
| static SampleType | gain_computer_db (SampleType level_db, const Config &config) noexcept |
| Pure memoryless curve used by the processor after envelope detection. | |
Static Public Attributes | |
| static constexpr SampleType | kMinThresholdDb = SampleType{-160} |
| static constexpr SampleType | kMaxThresholdDb = SampleType{24} |
| static constexpr SampleType | kMinRatio = SampleType{1} |
| static constexpr SampleType | kMaxRatio = SampleType{20} |
| static constexpr SampleType | kMaxRangeDb = SampleType{96} |
| static constexpr SampleType | kMaxKneeDb = SampleType{48} |
| static constexpr SampleType | kMaxSampleRate = SampleType{1536000} |
Stereo upward/downward expander with a continuous bounded gain law.
The prepared peak/RMS follower supplies detector ballistics. prepare() and configure() belong off the audio thread. After preparation, processing, bypass, reset, and inspection allocate no memory, acquire no locks, perform no I/O, and throw no exceptions. Bypass returns the finite input samples exactly while advancing detector state, so leaving bypass has no stale-state discontinuity.
| using pulp::signal::ExpanderT< SampleType >::DetectorMode = typename EnvelopeFollowerT<SampleType>::Mode |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
Adopt a complete valid configuration.
Rejected input leaves both the current configuration and detector history unchanged.
|
inlinenodiscardnoexcept |
|
inlinestaticnodiscardnoexcept |
Pure memoryless curve used by the processor after envelope detection.
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenodiscardnoexcept |
|
inlinenoexcept |
|
inlinenodiscardnoexcept |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |