Skip to content

Commit 883d32d

Browse files
author
Martin Klang
committed
added buffer and block based processing
1 parent 0b28617 commit 883d32d

1 file changed

Lines changed: 21 additions & 5 deletions

File tree

LibSource/MorphingOscillator.h

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@ class MorphingOscillator : public Oscillator {
1313
protected:
1414
Oscillator** osc;
1515
size_t osc_count;
16+
FloatArray buffer;
1617
Oscillator* lo = NULL;
1718
Oscillator* hi = NULL;
1819
float xf = 0;
1920
public:
20-
MorphingOscillator(Oscillator** osc, size_t count)
21-
: osc(osc), osc_count(count){}
21+
MorphingOscillator(Oscillator** osc, size_t count, FloatArray buffer)
22+
: osc(osc), osc_count(count), buffer(buffer){}
2223
void setFrequency(float value){
2324
lo->setFrequency(value);
2425
hi->setFrequency(value);
@@ -47,7 +48,20 @@ class MorphingOscillator : public Oscillator {
4748
float h = hi->generate(fm);
4849
return l + (h - l) * xf;
4950
}
50-
using Oscillator::generate;
51+
void generate(FloatArray output){
52+
lo->generate(output);
53+
output.multiply(1-xf);
54+
hi->generate(buffer);
55+
buffer.multiply(xf);
56+
output.add(buffer);
57+
}
58+
void generate(FloatArray output, FloatArray fm){
59+
lo->generate(output, fm);
60+
output.multiply(1-xf);
61+
hi->generate(buffer, fm);
62+
buffer.multiply(xf);
63+
output.add(buffer);
64+
}
5165
/**
5266
* Morph between all configured oscillators.
5367
* @param value a cross fade index between 0 and 1.
@@ -80,10 +94,12 @@ class MorphingOscillator : public Oscillator {
8094
lo = hi;
8195
hi = oscillator;
8296
}
83-
static MorphingOscillator* create(size_t oscillator_count){
84-
return new MorphingOscillator(new Oscillator*[oscillator_count], oscillator_count);
97+
static MorphingOscillator* create(size_t oscillator_count, size_t blocksize){
98+
return new MorphingOscillator(new Oscillator*[oscillator_count], oscillator_count,
99+
FloatArray::create(blocksize));
85100
}
86101
static void destroy(MorphingOscillator* obj){
102+
FloatArray::destroy(obj->buffer);
87103
delete[] obj->osc;
88104
delete obj;
89105
}

0 commit comments

Comments
 (0)