Skip to content

Commit 4f83ef7

Browse files
committed
Add balance to Chowing and Costello Reverb (init)
1 parent 354c7ef commit 4f83ef7

File tree

3 files changed

+38
-5
lines changed

3 files changed

+38
-5
lines changed

Sources/CSoundpipeAudioKit/Effects/ChowningReverbDSP.mm

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,19 @@
44
#include "ParameterRamper.h"
55
#include "Soundpipe.h"
66

7+
enum ChowningReverbParameter : AUParameterAddress {
8+
ChowningReverbParameterBalance,
9+
};
10+
711
class ChowningReverbDSP : public SoundpipeDSPBase {
812
private:
913
sp_jcrev *jcrev0;
1014
sp_jcrev *jcrev1;
15+
ParameterRamper balanceRamp{1.0};
1116

1217
public:
1318
ChowningReverbDSP() {
19+
parameters[ChowningReverbParameterBalance] = &balanceRamp;
1420
}
1521

1622
void init(int channelCount, double sampleRate) override {
@@ -40,13 +46,19 @@ void process(FrameRange range) override {
4046
float leftIn = inputSample(0, i);
4147
float rightIn = inputSample(1, i);
4248

43-
float &leftOut = outputSample(0, i);
44-
float &rightOut = outputSample(1, i);
49+
float leftWet;
50+
float rightWet;
51+
52+
sp_jcrev_compute(sp, jcrev0, &leftIn, &leftWet);
53+
sp_jcrev_compute(sp, jcrev1, &rightIn, &rightWet);
54+
55+
float bal = balanceRamp.getAndStep();
4556

46-
sp_jcrev_compute(sp, jcrev0, &leftIn, &leftOut);
47-
sp_jcrev_compute(sp, jcrev1, &rightIn, &rightOut);
57+
outputSample(0, i) = bal * leftWet + (1-bal) * leftIn;
58+
outputSample(1, i) = bal * rightWet + (1-bal) * rightIn;
4859
}
4960
}
5061
};
5162

5263
AK_REGISTER_DSP(ChowningReverbDSP, "jcrv")
64+
AK_REGISTER_PARAMETER(ChowningReverbParameterBalance)

Sources/SoundpipeAudioKit/Effects/ChowningReverb.swift

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,36 @@ public class ChowningReverb: Node {
2626

2727
// MARK: - Parameters
2828

29+
/// Dry/wet mix.
30+
public static let balanceDef = NodeParameterDef(
31+
identifier: "balance",
32+
name: "Balance",
33+
address: akGetParameterAddress("CostelloReverbParameterBalance"),
34+
defaultValue: 1,
35+
range: 0 ... 1,
36+
unit: .percent
37+
)
38+
39+
/// Dry/wet mix. Should be a value between 0-1.
40+
@Parameter(balanceDef) public var balance: AUValue
41+
42+
2943
// MARK: - Initialization
3044

3145
/// Initialize this reverb node
3246
///
3347
/// - Parameters:
3448
/// - input: Input node to process
49+
/// - balance: dry wet mix
3550
///
3651
public init(
37-
_ input: Node
52+
_ input: Node,
53+
balance: AUValue = balanceDef.defaultValue
3854
) {
3955
self.input = input
4056

4157
setupParameters()
58+
59+
self.balance = balance
4260
}
4361
}

Sources/SoundpipeAudioKit/Effects/CostelloReverb.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,18 +65,21 @@ public class CostelloReverb: Node {
6565
///
6666
/// - Parameters:
6767
/// - input: Input node to process
68+
/// - balance: dry wet mix
6869
/// - feedback: Feedback level in the range 0 to 1. 0.6 gives a good small 'live' room sound, 0.8 a small hall, and 0.9 a large hall. A setting of exactly 1 means infinite length, while higher values will make the opcode unstable.
6970
/// - cutoffFrequency: Low-pass cutoff frequency.
7071
///
7172
public init(
7273
_ input: Node,
74+
balance: AUValue = balanceDef.defaultValue,
7375
feedback: AUValue = feedbackDef.defaultValue,
7476
cutoffFrequency: AUValue = cutoffFrequencyDef.defaultValue
7577
) {
7678
self.input = input
7779

7880
setupParameters()
7981

82+
self.balance = balance
8083
self.feedback = feedback
8184
self.cutoffFrequency = cutoffFrequency
8285
}

0 commit comments

Comments
 (0)