aboutsummaryrefslogtreecommitdiffstats
path: root/core/mastering.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/mastering.h')
-rw-r--r--core/mastering.h18
1 files changed, 13 insertions, 5 deletions
diff --git a/core/mastering.h b/core/mastering.h
index 4a3b59cf..5fb7133e 100644
--- a/core/mastering.h
+++ b/core/mastering.h
@@ -8,6 +8,7 @@
#include "alnumeric.h"
#include "alspan.h"
#include "bufferline.h"
+#include "vector.h"
struct SlidingHold;
@@ -24,7 +25,7 @@ using uint = unsigned int;
*
* http://c4dm.eecs.qmul.ac.uk/audioengineering/compressors/
*/
-struct Compressor {
+class Compressor {
size_t mNumChans{0u};
struct {
@@ -50,8 +51,8 @@ struct Compressor {
alignas(16) std::array<float,BufferLineSize*2_uz> mSideChain{};
alignas(16) std::array<float,BufferLineSize> mCrestFactor{};
- SlidingHold *mHold{nullptr};
- al::span<FloatBufferLine> mDelay;
+ std::unique_ptr<SlidingHold> mHold;
+ al::vector<FloatBufferLine> mDelay;
float mCrestCoeff{0.0f};
float mGainEstimate{0.0f};
@@ -63,13 +64,20 @@ struct Compressor {
float mLastAttack{0.0f};
float mLastGainDev{0.0f};
+ Compressor() = default;
+ void linkChannels(const uint SamplesToDo, const FloatBufferLine *OutBuffer);
+ void crestDetector(const uint SamplesToDo);
+ void peakDetector(const uint SamplesToDo);
+ void peakHoldDetector(const uint SamplesToDo);
+ void gainCompressor(const uint SamplesToDo);
+ void signalDelay(const uint SamplesToDo, FloatBufferLine *OutBuffer);
+
+public:
~Compressor();
void process(const uint SamplesToDo, FloatBufferLine *OutBuffer);
[[nodiscard]] auto getLookAhead() const noexcept -> uint { return mLookAhead; }
- DEF_PLACE_NEWDEL
-
/**
* The compressor is initialized with the following settings:
*