Krotos Modules 3
Loading...
Searching...
No Matches
ConvolutionReverb.h
Go to the documentation of this file.
1namespace krotos
2{
3 //==============================================================================
9 {
10 public:
13
14 void prepareToPlay(double sampleRate, int samplesPerBlock);
15 void prepareNextBlock(const float* const* buffer, int numSamples, int numChannels);
16 float getNextSample(int sampleIdx, int channelIdx);
17 void processBlock(AudioBuffer<float>& buffer);
18
19 double getSampleRate() const;
20 void setSampleRate(double newSampleRate);
21
22 void setMix(float mixValue);
23 void setOutputGainDb(float outputGainValueIndB);
24 void setPredelayMs(float predelayMs);
25
26 const OwnedArray<IRConvolver>& getConvolvers() const;
27 void updateConvolvers();
28 void clearConvolvers();
29 size_t getConvolverTailBlockSize() const;
30 size_t getConvolverHeadBlockSize() const;
31 void setImpulseResponseFilePath(const String& impulseResponseFilePath);
32 String getImpulseResponseFilePath() const;
33
34 void reset();
35
36 private:
37 OwnedArray<IRConvolver> m_convolvers;
39
41 {
42 LEFT = 0,
43 RIGHT
44 };
45 const int m_numOutputChannels{2};
46
47 double m_sampleRate{0.0};
49 float m_outputGain{1.0f};
50 float m_predelay{0.0f};
51
52 const float m_maxPredelayMs{600.0f};
53 OwnedArray<AudioSampleCircularBuffer> m_predelayBuffers;
54
55 AudioBuffer<float> m_wetBuffer, m_dryBuffer;
56
57 std::vector<float> m_convolutionBufferLL;
58 std::vector<float> m_convolutionBufferLR;
59 std::vector<float> m_convolutionBufferRL;
60 std::vector<float> m_convolutionBufferRR;
61
62 mutable CriticalSection m_convolverMutex;
65
66 mutable CriticalSection m_irCalculationMutex;
67 std::unique_ptr<Thread> m_irCalculation;
68
69 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ConvolutionReverb)
70 };
71} // namespace krotos
Audio processing class that uses multi-threading to convolve an input signal with an impulse response...
Definition ConvolutionReverb.h:9
Channel
Definition ConvolutionReverb.h:41
@ RIGHT
Definition ConvolutionReverb.h:43
@ LEFT
Definition ConvolutionReverb.h:42
void prepareToPlay(double sampleRate, int samplesPerBlock)
Definition ConvolutionReverb.cpp:117
size_t getConvolverTailBlockSize() const
Definition ConvolutionReverb.cpp:171
void prepareNextBlock(const float *const *buffer, int numSamples, int numChannels)
Definition ConvolutionReverb.cpp:11
AudioBuffer< float > m_dryBuffer
Definition ConvolutionReverb.h:55
void setPredelayMs(float predelayMs)
Definition ConvolutionReverb.cpp:104
void setOutputGainDb(float outputGainValueIndB)
Definition ConvolutionReverb.cpp:102
String getImpulseResponseFilePath() const
Definition ConvolutionReverb.cpp:177
~ConvolutionReverb()
Definition ConvolutionReverb.cpp:9
float getNextSample(int sampleIdx, int channelIdx)
Definition ConvolutionReverb.cpp:58
std::vector< float > m_convolutionBufferLR
Definition ConvolutionReverb.h:58
std::vector< float > m_convolutionBufferRR
Definition ConvolutionReverb.h:60
ConvolutionReverb()
Definition ConvolutionReverb.cpp:3
OwnedArray< AudioSampleCircularBuffer > m_predelayBuffers
Definition ConvolutionReverb.h:53
OwnedArray< IRConvolver > m_convolvers
Definition ConvolutionReverb.h:37
void updateConvolvers()
Definition ConvolutionReverb.cpp:148
std::vector< float > m_convolutionBufferLL
Definition ConvolutionReverb.h:57
void clearConvolvers()
Definition ConvolutionReverb.cpp:159
float m_predelay
Definition ConvolutionReverb.h:50
void setImpulseResponseFilePath(const String &impulseResponseFilePath)
Definition ConvolutionReverb.cpp:183
void setMix(float mixValue)
Definition ConvolutionReverb.cpp:100
CriticalSection m_irCalculationMutex
Definition ConvolutionReverb.h:66
CriticalSection m_convolverMutex
Definition ConvolutionReverb.h:62
const int m_numOutputChannels
Definition ConvolutionReverb.h:45
size_t m_convolverTailBlockSize
Definition ConvolutionReverb.h:64
String m_impulseResponseFilePath
Definition ConvolutionReverb.h:38
size_t getConvolverHeadBlockSize() const
Definition ConvolutionReverb.cpp:165
DryWet m_mix
Definition ConvolutionReverb.h:48
std::unique_ptr< Thread > m_irCalculation
Definition ConvolutionReverb.h:67
float m_outputGain
Definition ConvolutionReverb.h:49
size_t m_convolverHeadBlockSize
Definition ConvolutionReverb.h:63
const OwnedArray< IRConvolver > & getConvolvers() const
Definition ConvolutionReverb.cpp:142
std::vector< float > m_convolutionBufferRL
Definition ConvolutionReverb.h:59
void processBlock(AudioBuffer< float > &buffer)
Definition ConvolutionReverb.cpp:71
AudioBuffer< float > m_wetBuffer
Definition ConvolutionReverb.h:55
void setSampleRate(double newSampleRate)
Definition ConvolutionReverb.cpp:90
void reset()
Definition ConvolutionReverb.cpp:109
double m_sampleRate
Definition ConvolutionReverb.h:47
double getSampleRate() const
Definition ConvolutionReverb.cpp:84
const float m_maxPredelayMs
Definition ConvolutionReverb.h:52
Stores a mix value and provides the dry & wet gain values using constant-power mixing.
Definition DryWet.h:8
Definition AirAbsorptionFilter.cpp:2