aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormick grierson <mickgrierson@gmail.com>2015-08-27 13:35:02 +0100
committermick grierson <mickgrierson@gmail.com>2015-08-27 13:35:02 +0100
commitc814dd99dc3c347914c2057b77d1390ba41cfae5 (patch)
tree54f21c7d2cb0552d7dc4a44cd2779e0deb475efb
parent5b37d13616c303538a61b520e6930b322e4ff378 (diff)
main.cpp contains new envelope example
-rwxr-xr-xmain.cpp88
-rw-r--r--maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstatebin60853 -> 60691 bytes
2 files changed, 37 insertions, 51 deletions
diff --git a/main.cpp b/main.cpp
index 5cfdb74..2cf74f6 100755
--- a/main.cpp
+++ b/main.cpp
@@ -1,65 +1,51 @@
+//Envelopes allow you to shape the sound. The basic idea is that a sound has the following shape
+// Attack: This is how long it takes to fade up to maximum volume
+// Decay: This is how long it takes to reach the sustain level.
+// Sustain: This is the sustain level
+// Release: This is how long it takes to fade out.
+
#include "maximilian.h"
-double outputs[2],moreoutputs[2]; //some track outputs
-double filtered,patch1,patch2,tune,delayed,
-mixed,ramp,filtered2,noise,pan,more;//a bunch of patch cables
-int beat,lastbeat,morebeats,lastmorebeats;//some rhythmic elemts
-double env[4]={200,0,0,50};//the kick drum pitch envelope data
-double env2[6]={10000,0,9000,5,0,5};//the hi hat pitch envelope dat
-double melody[14]={600,0,0,650,0,0,400,0,0,425,0,300,0,315};//the melody data
-int rhythm1[16]={1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,0};//another way of doing a rhythm
-maxiOsc a,c,d,e,g,h,i,j,squarewave;//some oscillators
-maxiEnvelope b,f;//two envelopers
-maxiDelayline delay;//a delay line
-maxiFilter myfilter,antia;// a FAT filter
-maxiMix mymix,bobbins;//some panning busses
-maxiSample beats;
+maxiOsc myCounter,mySwitchableOsc;//
+int CurrentCount;//
+double myOscOutput,myCurrentVolume;//
+maxiEnv myEnvelope;
+
void setup() {//some inits
- b.amplitude=env[0];//starting value for envelope b
- f.amplitude=env2[0];//same for f
- beats.load("/Users/michaelgrierson/Documents/workspace/Maximilian/beat2.wav");//put a path to a soundfile here. Wav format only.
+
+ //Timing is in ms
+
+ myEnvelope.setAttack(0);
+ myEnvelope.setDecay(1); // Needs to be at least 1
+ myEnvelope.setSustain(1);
+ myEnvelope.setRelease(1000);
}
-void play(double *output) {//this is where the magic happens. Very slow magic.
- beat=((int) c.phasor(8));//this oscillator is now a counter
- morebeats=((int) e.phasor(0.5,0,16));//so is this one
- patch1=b.line(4,env);//here's envelope b
- patch2=f.line(6,env2);//here's envelop f
- tune=g.saw(melody[morebeats]*0.25);//here's the melody, which occurs at certain times
+void play(double *output) {
- if (lastbeat!=beat) {//this is a nice sample and hold routine for the kick drum
- f.trigger(0, env2[0]);//it runs off the hi hat.
-
-
- if (rhythm1[morebeats]==1) {
- b.trigger(0, env[0]);//and gets played when it's time.
- }
- }
- lastbeat=beat;//let's start again. It's a loop
- ramp=i.phasor(0.5,1,2048);//create a basic ramp
- pan=j.phasor(0.25);//some panning from a phasor (object is equal power)
- delayed=delay.dl(tune, ramp, 0.9)*0.125;//the delay line
- //then it all gets mixed.
- mixed=((a.sinewave(patch1)*0.5)+((d.saw(patch2))*0.125)+(delayed*0.3)*0.5);
- //add some noise
- noise=i.noise()*0.25;
- filtered2=beats.play(1*(1./16.),0,beats.length);
- // filtered2=beats.play(-1);
+ //notice that we feed in a value of 1. to create an envelope shape we can apply later.
+ myCurrentVolume=myEnvelope.adsr(1.,myEnvelope.trigger);
- more=squarewave.pulse(melody[morebeats],pan)*0.05;
- //filter the noise! this lores takes values between 1 and 100 for res, and freq for cutoff.
- filtered=myfilter.lores(filtered2, 1+(pan*10000), 10)*0.4;
+ CurrentCount=myCounter.phasor(1, 1, 9);//phasor can take three arguments; frequency, start value and end value.
- //now we send the sounds to some stereo busses.
- mymix.stereo(more+mixed+delayed, outputs, 1-pan);
- bobbins.stereo(filtered, moreoutputs, pan);//invert the pan
+ // You'll notice that these 'if' statements don't require curly braces "{}".
+ // This is because there is only one outcome if the statement is true.
- //mixing
+ if (CurrentCount==1) myEnvelope.trigger=1; //trigger the envelope
- output[0]=outputs[0]+moreoutputs[0]/10;//stick it in the out!!
- output[1]=outputs[1]+moreoutputs[1]/10;
+ else myEnvelope.trigger=0;//release the envelope to make it fade out only if it's been triggered
+
+ if (CurrentCount<5)
+
+ myOscOutput=mySwitchableOsc.sawn(CurrentCount*100);
+
+ else if (CurrentCount>=5)//and the 'else' bit.
+
+ myOscOutput=mySwitchableOsc.sinewave(CurrentCount*50);//one osc object can produce whichever waveform you want.
+
+
+ output[0]=myOscOutput*myCurrentVolume;//left speaker
}
-
diff --git a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate
index ec304f1..eb5ae8d 100644
--- a/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate
+++ b/maximilianTest.xcodeproj/project.xcworkspace/xcuserdata/michaelgrierson.xcuserdatad/UserInterfaceState.xcuserstate
Binary files differ