aboutsummaryrefslogtreecommitdiffstats
path: root/maximilian_examples/14.monosynth.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'maximilian_examples/14.monosynth.cpp')
-rwxr-xr-xmaximilian_examples/14.monosynth.cpp72
1 files changed, 36 insertions, 36 deletions
diff --git a/maximilian_examples/14.monosynth.cpp b/maximilian_examples/14.monosynth.cpp
index 5dd4e7e..897c41a 100755
--- a/maximilian_examples/14.monosynth.cpp
+++ b/maximilian_examples/14.monosynth.cpp
@@ -5,11 +5,7 @@
//These are the synthesiser bits
maxiOsc VCO1,VCO2,LFO1,LFO2;
maxiFilter VCF;
-maxiEnvelope ADSR;
-
-//These are the control values for the envelope
-
-double adsrEnv[8]={1,5,0.125,250,0.125,125,0,500};
+maxiEnv ADSR;
//This is a bunch of control signals so that we can hear something
@@ -22,38 +18,42 @@ double VCO1out,VCO2out,LFO1out,LFO2out,VCFout,ADSRout;
void setup() {//some inits
-
-
+
+ ADSR.setAttack(1000);
+ ADSR.setDecay(1);
+ ADSR.setSustain(1);
+ ADSR.setRelease(1000);
}
void play(double *output) {
-
- //so this first bit is just a basic metronome so we can hear what we're doing.
-
- currentCount=(int)timer.phasor(0.5);//this sets up a metronome that ticks every 2 seconds
-
- if (lastCount!=currentCount) {//if we have a new timer int this sample, play the sound
-
- ADSR.trigger(0, adsrEnv[0]);//trigger the envelope from the start
-
- cout << "tick\n";//the clock ticks
-
- lastCount=0;//set lastCount to 0
- }
-
- //and this is where we build the synth
-
-
- ADSRout=ADSR.line(8,adsrEnv);//our ADSR env has 8 value/time pairs.
-
- LFO1out=LFO1.sinebuf(0.2);//this lfo is a sinewave at 0.2 hz
-
- VCO1out=VCO1.pulse(55,0.6);//here's VCO1. it's a pulse wave at 55 hz, with a pulse width of 0.6
- VCO2out=VCO2.pulse(110+LFO1out,0.2);//here's VCO2. it's a pulse wave at 110hz with LFO modulation on the frequency, and width of 0.2
-
-
- VCFout=VCF.lores((VCO1out+VCO2out)*0.5, 250+(ADSRout*15000), 10);//now we stick the VCO's into the VCF, using the ADSR as the filter cutoff
-
- *output=VCFout*ADSRout;//finally we add the ADSR as an amplitude modulator
-
+
+ //so this first bit is just a basic metronome so we can hear what we're doing.
+
+ currentCount=(int)timer.phasor(0.5);//this sets up a metronome that ticks every 2 seconds
+
+
+ if (lastCount!=currentCount) {//if we have a new timer int this sample, play the sound
+ ADSR.trigger=1;
+
+ cout << "tick\n";//the clock ticks
+
+ lastCount=0;//set lastCount to 0
+ }
+
+ //and this is where we build the synth
+
+ ADSRout=ADSR.adsr(1.0,ADSR.trigger);//our ADSR env has 8 value/time pairs.
+
+ LFO1out=LFO1.sinebuf(0.2);//this lfo is a sinewave at 0.2 hz
+
+ VCO1out=VCO1.pulse(55,0.6);//here's VCO1. it's a pulse wave at 55 hz, with a pulse width of 0.6
+ VCO2out=VCO2.pulse(110+LFO1out,0.2);//here's VCO2. it's a pulse wave at 110hz with LFO modulation on the frequency, and width of 0.2
+
+
+ VCFout=VCF.lores((VCO1out+VCO2out)*0.5, ADSRout*10000, 10);//now we stick the VCO's into the VCF, using the ADSR as the filter cutoff
+
+ double finalSound=VCFout*ADSRout;//finally we add the ADSR as an amplitude modulator
+ ADSR.trigger=0;
+ output[0]=finalSound;
+ output[1]=finalSound;
}