From 3c4e3f6806206ea56d3e6399ae7967298a4b6283 Mon Sep 17 00:00:00 2001 From: Michael Heuer Date: Wed, 21 Nov 2012 12:11:06 -0600 Subject: [PATCH] adding scales example --- Arpeggiators.ck | 146 ++++++++++++++++++++++++++++++++++++++ examples/scalesExample.ck | 85 ++++++++++++++++++++++ 2 files changed, 231 insertions(+) create mode 100644 examples/scalesExample.ck diff --git a/Arpeggiators.ck b/Arpeggiators.ck index de5ec2d5..b517b204 100644 --- a/Arpeggiators.ck +++ b/Arpeggiators.ck @@ -197,4 +197,150 @@ public class Arpeggiators procedure @=> arpeggiator.procedure; return arpeggiator; } + + fun static UpArpeggiator up(Scale scale, FloatProcedure procedure) + { + UpArpeggiator arpeggiator; + scale.root @=> arpeggiator.root; + scale.intervals @=> arpeggiator.intervals; + procedure @=> arpeggiator.procedure; + return arpeggiator; + } + + fun static DownArpeggiator down(Scale scale, FloatProcedure procedure) + { + DownArpeggiator arpeggiator; + scale.root @=> arpeggiator.root; + scale.intervals @=> arpeggiator.intervals; + procedure @=> arpeggiator.procedure; + return arpeggiator; + } + + fun static UpDownArpeggiator upDown(Scale scale, FloatProcedure procedure) + { + UpDownArpeggiator arpeggiator; + scale.root @=> arpeggiator.root; + scale.intervals @=> arpeggiator.intervals; + procedure @=> arpeggiator.procedure; + return arpeggiator; + } + + fun static DownUpArpeggiator downUp(Scale scale, FloatProcedure procedure) + { + DownUpArpeggiator arpeggiator; + scale.root @=> arpeggiator.root; + scale.intervals @=> arpeggiator.intervals; + procedure @=> arpeggiator.procedure; + return arpeggiator; + } + + fun static RandomArpeggiator random(Scale scale, FloatProcedure procedure) + { + RandomArpeggiator arpeggiator; + scale.root @=> arpeggiator.root; + scale.intervals @=> arpeggiator.intervals; + procedure @=> arpeggiator.procedure; + return arpeggiator; + } + + + fun static UpArpeggiator up(Chord chord, FloatProcedure procedure, dur rate) + { + UpArpeggiator arpeggiator; + chord.root @=> arpeggiator.root; + chord.intervals @=> arpeggiator.intervals; + procedure @=> arpeggiator.procedure; + rate => arpeggiator.rate; + return arpeggiator; + } + + fun static DownArpeggiator down(Chord chord, FloatProcedure procedure, dur rate) + { + DownArpeggiator arpeggiator; + chord.root @=> arpeggiator.root; + chord.intervals @=> arpeggiator.intervals; + procedure @=> arpeggiator.procedure; + rate => arpeggiator.rate; + return arpeggiator; + } + + fun static UpDownArpeggiator upDown(Chord chord, FloatProcedure procedure, dur rate) + { + UpDownArpeggiator arpeggiator; + chord.root @=> arpeggiator.root; + chord.intervals @=> arpeggiator.intervals; + procedure @=> arpeggiator.procedure; + rate => arpeggiator.rate; + return arpeggiator; + } + + fun static DownUpArpeggiator downUp(Chord chord, FloatProcedure procedure, dur rate) + { + DownUpArpeggiator arpeggiator; + chord.root @=> arpeggiator.root; + chord.intervals @=> arpeggiator.intervals; + procedure @=> arpeggiator.procedure; + rate => arpeggiator.rate; + return arpeggiator; + } + + fun static RandomArpeggiator random(Chord chord, FloatProcedure procedure, dur rate) + { + RandomArpeggiator arpeggiator; + chord.root @=> arpeggiator.root; + chord.intervals @=> arpeggiator.intervals; + procedure @=> arpeggiator.procedure; + rate => arpeggiator.rate; + return arpeggiator; + } + + fun static UpArpeggiator up(Scale scale, FloatProcedure procedure, dur rate) + { + UpArpeggiator arpeggiator; + scale.root @=> arpeggiator.root; + scale.intervals @=> arpeggiator.intervals; + procedure @=> arpeggiator.procedure; + rate => arpeggiator.rate; + return arpeggiator; + } + + fun static DownArpeggiator down(Scale scale, FloatProcedure procedure, dur rate) + { + DownArpeggiator arpeggiator; + scale.root @=> arpeggiator.root; + scale.intervals @=> arpeggiator.intervals; + procedure @=> arpeggiator.procedure; + rate => arpeggiator.rate; + return arpeggiator; + } + + fun static UpDownArpeggiator upDown(Scale scale, FloatProcedure procedure, dur rate) + { + UpDownArpeggiator arpeggiator; + scale.root @=> arpeggiator.root; + scale.intervals @=> arpeggiator.intervals; + procedure @=> arpeggiator.procedure; + rate => arpeggiator.rate; + return arpeggiator; + } + + fun static DownUpArpeggiator downUp(Scale scale, FloatProcedure procedure, dur rate) + { + DownUpArpeggiator arpeggiator; + scale.root @=> arpeggiator.root; + scale.intervals @=> arpeggiator.intervals; + procedure @=> arpeggiator.procedure; + rate => arpeggiator.rate; + return arpeggiator; + } + + fun static RandomArpeggiator random(Scale scale, FloatProcedure procedure, dur rate) + { + RandomArpeggiator arpeggiator; + scale.root @=> arpeggiator.root; + scale.intervals @=> arpeggiator.intervals; + procedure @=> arpeggiator.procedure; + rate => arpeggiator.rate; + return arpeggiator; + } } diff --git a/examples/scalesExample.ck b/examples/scalesExample.ck new file mode 100644 index 00000000..2589bc30 --- /dev/null +++ b/examples/scalesExample.ck @@ -0,0 +1,85 @@ +/* + + LiCK Library for ChucK. + Copyright (c) 2007-2012 held jointly by the individual authors. + + This file is part of LiCK. + + LiCK is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LiCK is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LiCK. If not, see . + +*/ + +TimeSignature.common(160) @=> TimeSignature t; + +SinOsc sin => ADSR adsr => Dist dist => SinTrem trem => JCRev rev => dac; +0.6 => sin.gain; +adsr.keyOff(); +adsr.set(t.t, t.s, 0.8, t.s); +6.0 => float tremRate; +0.05 => float revMix; +trem.rate(tremRate); +trem.depth(0.2); +rev.mix(revMix); + +class Play extends FloatProcedure +{ + fun void run(float value) + { + value => sin.freq; + adsr.keyOn(); + t.e => now; + adsr.keyOff(); + } +} + +fun void effect() +{ + while (true) + { + t.d => now; + tremRate * 1.05 => tremRate; + revMix + 0.012 => revMix; + trem.rate(tremRate); + rev.mix(revMix); + } +} + +261.6256 => float c; +440.0 => float a; + +Play play; +Scales.major(c, "C") @=> Scale c_major; +Scales.majorBlues(c, "C") @=> Scale c_majorBlues; +Scales.majorPentatonic(c, "C") @=> Scale c_majorPentatonic; +Scales.minor(a, "A") @=> Scale a_minor; +Scales.minorBlues(a, "A") @=> Scale a_minorBlues; +Scales.minorPentatonic(a, "A") @=> Scale a_minorPentatonic; + +t.w => now; + +LoopBuilder loopBuilder; +loopBuilder.append(Arpeggiators.upDown(c_major, play, t.s), 2); +loopBuilder.append(Arpeggiators.upDown(c_majorBlues, play, t.s), 1); +loopBuilder.append(Arpeggiators.upDown(c_majorPentatonic, play, t.s), 1); +loopBuilder.append(Arpeggiators.upDown(a_minor, play, t.s), 1); +loopBuilder.append(Arpeggiators.upDown(a_minorBlues, play, t.s), 1); +loopBuilder.append(Arpeggiators.upDown(a_minorPentatonic, play, t.s), 1); + +spork ~ effect(); + +Loops.loop(loopBuilder.build(), 2).run(); + +t.d => now; + +<<<"done">>>; \ No newline at end of file