-
-
Notifications
You must be signed in to change notification settings - Fork 49
Expand file tree
/
Copy pathJSynCircuit.java
More file actions
73 lines (61 loc) · 2.05 KB
/
JSynCircuit.java
File metadata and controls
73 lines (61 loc) · 2.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package processing.sound;
import com.jsyn.ports.UnitOutputPort;
import com.jsyn.unitgen.Circuit;
import com.jsyn.unitgen.TwoInDualOut;
import com.jsyn.unitgen.UnitFilter;
import com.jsyn.unitgen.UnitGenerator;
import com.jsyn.unitgen.UnitSource;
/**
* Helper class wrapping a source unit generator, add/pan processor and effect
* into one circuit.
*/
public class JSynCircuit extends Circuit implements UnitSource {
private UnitGenerator source;
protected JSynProcessor processor;
protected UnitOutputPort preEffect;
protected Effect<? extends UnitFilter> effect;
protected TwoInDualOut output;
public JSynCircuit(UnitOutputPort input) {
this.output = new TwoInDualOut();
this.add(this.output);
this.source = input.getUnitGenerator();
this.add(this.source);
if (input.getNumParts() == 2) {
// stereo source - no need for pan, so bypass processor
this.preEffect = input;
} else {
this.processor = new JSynProcessor();
this.add(this.processor);
this.processor.input.connect(input);
this.preEffect = this.processor.output;
}
this.wireBypass();
}
protected void wireBypass() {
this.preEffect.connect(0, this.output.inputA, 0);
this.preEffect.connect(1, this.output.inputB, 0);
}
protected void removeEffect() {
if (this.effect != null) {
this.wireBypass();
this.effect.left.output.disconnect(this.output.inputA);
this.effect.right.output.disconnect(this.output.inputB);
this.effect.left.input.disconnect(0, this.preEffect, 0);
this.effect.right.input.disconnect(0, this.preEffect, 1);
this.effect = null;
}
}
protected void setEffect(Effect<? extends UnitFilter> effect) {
this.effect = effect;
this.preEffect.connect(0, this.effect.left.input, 0);
this.preEffect.connect(1, this.effect.right.input, 0);
this.effect.left.output.connect(this.output.inputA);
this.preEffect.disconnect(0, this.output.inputA, 0);
this.effect.right.output.connect(this.output.inputB);
this.preEffect.disconnect(1, this.output.inputB, 0);
}
@Override
public UnitOutputPort getOutput() {
return this.output.output;
}
}