Krotos Modules 3
Loading...
Searching...
No Matches
AudioSampleCircularBuffer.h
Go to the documentation of this file.
1namespace krotos
2{
3 //==============================================================================
10 {
11 public:
16 class MU
17 {
18 public:
19 MU(float val);
20 float mu, nmu;
21 int index;
22 };
23
28 float fract(float input);
29
31 {
32 cubic = 0, // Original interpolation method used in Igniter - has artifacts
35 cubic3d // Best results so far
36 };
37
38 AudioSampleCircularBuffer(int numSamples, long sampleRate) noexcept; // Default constructor and a version that
39 // initialises the length of the buffer.
40
41 int getNumSamples() const noexcept { return m_size; } // Get the length of the buffer in samples
42 int getHead() const noexcept { return m_head; }
43
44 void setReadPosition(float sample) noexcept; // Set the read position to a specific sample number.
45
46 void incrementReadPosition() noexcept; // Increments the read position by one sample, used in the main
47 // processBlock loop as we read our delay line.
48
49 void copySamples(juce::AudioSampleBuffer& source,
50 int numSamples) noexcept; // Copy a block of samples into our delay line (usually the incoming
51 // data from buffer in processBlock).
52 void copySample(float source) noexcept;
53
54 void addSample(int indexOffset, float newSample) noexcept; // Used to add feedback into the delay line.
55
56 float getSample(float sampleToRead) noexcept; // Read a sample from the delay line.
57
58 void setSize(int numSamples) noexcept;
59
60 void fillWithZeroes();
61
62 protected:
63 inline float wrapFloatValue(float valueToWrap) noexcept
64 {
65 jassert(valueToWrap > -m_sizeMultipleAsFloat);
66 return fmodf(valueToWrap + m_sizeMultipleAsFloat, m_sizeAsFloat);
67 }
68
69 inline int wrapIntValue(int valueToWrap) noexcept
70 {
71 jassert(valueToWrap > -m_sizeMultiple);
72 return (valueToWrap + m_sizeMultiple) % m_size;
73 }
74
76 int m_head;
79 std::unique_ptr<juce::AudioSampleBuffer> m_circularDelayBuffer;
80
82 const int m_size;
83 const float m_sizeAsFloat;
84 const int m_sizeMultiple;
86
88 };
89} // namespace krotos
creates and stores the fractional part of a float and its inverse
Definition AudioSampleCircularBuffer.h:17
MU(float val)
Definition AudioSampleCircularBuffer.cpp:106
float mu
Definition AudioSampleCircularBuffer.h:20
int index
Definition AudioSampleCircularBuffer.h:21
float nmu
Definition AudioSampleCircularBuffer.h:20
A fractional delay line with several interpolation methods.
Definition AudioSampleCircularBuffer.h:10
static const int BUFFER_MULTIPLE_FOR_NEG_MODULUS_CALC
Definition AudioSampleCircularBuffer.h:81
bool m_useInterpolation
Definition AudioSampleCircularBuffer.h:78
float getSample(float sampleToRead) noexcept
Definition AudioSampleCircularBuffer.cpp:120
void setReadPosition(float sample) noexcept
Definition AudioSampleCircularBuffer.cpp:41
std::unique_ptr< juce::AudioSampleBuffer > m_circularDelayBuffer
Definition AudioSampleCircularBuffer.h:79
int getNumSamples() const noexcept
Definition AudioSampleCircularBuffer.h:41
const int m_sizeMultiple
Definition AudioSampleCircularBuffer.h:84
int wrapIntValue(int valueToWrap) noexcept
Definition AudioSampleCircularBuffer.h:69
const float m_sizeAsFloat
Definition AudioSampleCircularBuffer.h:83
InterpolationType m_interpolationType
Definition AudioSampleCircularBuffer.h:87
void copySamples(juce::AudioSampleBuffer &source, int numSamples) noexcept
Definition AudioSampleCircularBuffer.cpp:55
void fillWithZeroes()
Definition AudioSampleCircularBuffer.cpp:33
void setSize(int numSamples) noexcept
Definition AudioSampleCircularBuffer.cpp:27
const float m_sizeMultipleAsFloat
Definition AudioSampleCircularBuffer.h:85
int getHead() const noexcept
Definition AudioSampleCircularBuffer.h:42
InterpolationType
Definition AudioSampleCircularBuffer.h:31
@ cubic3d
Definition AudioSampleCircularBuffer.h:35
@ linear
Definition AudioSampleCircularBuffer.h:33
@ cubic
Definition AudioSampleCircularBuffer.h:32
@ cosine
Definition AudioSampleCircularBuffer.h:34
float m_readPosition
Definition AudioSampleCircularBuffer.h:77
float fract(float input)
returns the fractional part of a float
Definition AudioSampleCircularBuffer.cpp:113
float wrapFloatValue(float valueToWrap) noexcept
Definition AudioSampleCircularBuffer.h:63
AudioSampleCircularBuffer(int numSamples, long sampleRate) noexcept
Definition AudioSampleCircularBuffer.cpp:3
void incrementReadPosition() noexcept
Definition AudioSampleCircularBuffer.cpp:48
int m_numChannels
Definition AudioSampleCircularBuffer.h:75
void copySample(float source) noexcept
Definition AudioSampleCircularBuffer.cpp:89
void addSample(int indexOffset, float newSample) noexcept
Definition AudioSampleCircularBuffer.cpp:101
const int m_size
Definition AudioSampleCircularBuffer.h:82
int m_head
Definition AudioSampleCircularBuffer.h:76
Definition AirAbsorptionFilter.cpp:2