Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // General Metronome v2018-07-01-A
- // Bloated metronome by Thomas Howe (thomashowemain@gmail.com)
- // Set the Post window size to display 5 lines at a time.
- // Item 1: seconds elapsed
- // Item 2: current unadjusted BPM (will change if ‘slope’ is set to 1)
- // Item 3: rubato (will change if ‘variation’ is set to 1)
- // Item 4: current BPM
- // Item 5: current beat of bar (starting at 0)
- // Set these variables.
- var amplitudeMultiplier = 0.05;
- var beatsPerBar = 4;
- var startBPM = 120;
- var slope = 0; // 0 = off, 1 = on
- var targetBPM = 121;
- var durationInSeconds = 60;
- var variation = 0; // 0 = off, 1 = on
- var variationNewGoalTimeLo = 5;
- var variationNewGoalTimeHi = 10;
- var variationOctaveLo = -0.05;
- var variationOctaveHi = 0.05;
- // Set these metronome hits in beat offsets, and amplitudes.
- var hit00 = [0, 0.25];
- var hit01 = [1, 1];
- var hit02 = [2, 0.7];
- var hit03 = [3, 1];
- var hit04 = [0.63, 0.75];
- var hit05 = [1.63, 0.75];
- var hit06 = [2.63, 0.75];
- var hit07 = [3.63, 0.75];
- var hit08 = [0, 0];
- var hit09 = [0, 0];
- var hit10 = [0, 0];
- var hit11 = [0, 0];
- var hit12 = [0, 0];
- var hit13 = [0, 0];
- var hit14 = [0, 0];
- var hit15 = [0, 0];
- var hit16 = [0, 0];
- var hit17 = [0, 0];
- var hit18 = [0, 0];
- var hit19 = [0, 0];
- // Tempo variation.
- // samples remaining till new samples remaining time is chosen, minus 2
- var fallerKR = {
- arg min = 1, max = 2;
- var buffer = Buffer.alloc(s, 1);
- var random = round(((WhiteNoise.kr(0.5, 0.5) * (max - min)) + min) * s.sampleRate / s.options.blockSize, 1) - 2;
- var previous = PlayBuf.kr(1, buffer);
- var current = Select.kr(previous < 0, [previous - 1, random]);
- RecordBuf.kr(current, buffer);
- current;
- };
- // picks new point every fallerKR trigger
- var stochasticLine = {
- arg faller = fallerKR.value, min = -1, max = 1;
- var buffer = Buffer.alloc(s, 1);
- var random = TRand.kr(min, max, faller);
- var previous = PlayBuf.kr(1, buffer);
- var current = ((random - previous) / (faller + 2)) + previous;
- RecordBuf.kr(current, buffer);
- current;
- };
- {
- // Don't mess with these ones.
- var variationSamplesTillNextGoal = fallerKR.value(variationNewGoalTimeLo, variationNewGoalTimeHi);
- var variationOctave = stochasticLine.value(variationSamplesTillNextGoal, variationOctaveLo, variationOctaveHi) * variation;
- var tempoMultiplier = 2 ** variationOctave;
- var secondsElapsed = Sweep.kr;
- var bPSRadix = targetBPM / startBPM;
- var bPSExponent = slope * secondsElapsed / durationInSeconds;
- var unadjustedBPM = startBPM * (bPSRadix ** bPSExponent);
- var currentBPM = tempoMultiplier * unadjustedBPM;
- var currentBarsPS = currentBPM / (60 * beatsPerBar);
- var lastHit = [hit00[0], hit01[0], hit02[0], hit03[0], hit04[0], hit05[0], hit06[0], hit07[0], hit08[0], hit09[0],
- hit10[0], hit11[0], hit12[0], hit13[0], hit14[0], hit15[0], hit16[0], hit17[0], hit18[0], hit19[0]].maxItem;
- var firstBeat = ((lastHit / beatsPerBar) - 1) / 2;
- var pushedBarProportion = Phasor.kr(0, (currentBarsPS / (s.sampleRate / s.options.blockSize)), firstBeat, firstBeat + 1);
- // Hit envelopes.
- var hitEnv00 = EnvGen.kr(Env([0, hit00[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit00[0] / beatsPerBar));
- var hitEnv01 = EnvGen.kr(Env([0, hit01[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit01[0] / beatsPerBar));
- var hitEnv02 = EnvGen.kr(Env([0, hit02[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit02[0] / beatsPerBar));
- var hitEnv03 = EnvGen.kr(Env([0, hit03[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit03[0] / beatsPerBar));
- var hitEnv04 = EnvGen.kr(Env([0, hit04[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit04[0] / beatsPerBar));
- var hitEnv05 = EnvGen.kr(Env([0, hit05[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit05[0] / beatsPerBar));
- var hitEnv06 = EnvGen.kr(Env([0, hit06[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit06[0] / beatsPerBar));
- var hitEnv07 = EnvGen.kr(Env([0, hit07[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit07[0] / beatsPerBar));
- var hitEnv08 = EnvGen.kr(Env([0, hit08[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit08[0] / beatsPerBar));
- var hitEnv09 = EnvGen.kr(Env([0, hit09[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit09[0] / beatsPerBar));
- var hitEnv10 = EnvGen.kr(Env([0, hit10[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit10[0] / beatsPerBar));
- var hitEnv11 = EnvGen.kr(Env([0, hit11[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit11[0] / beatsPerBar));
- var hitEnv12 = EnvGen.kr(Env([0, hit12[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit12[0] / beatsPerBar));
- var hitEnv13 = EnvGen.kr(Env([0, hit13[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit13[0] / beatsPerBar));
- var hitEnv14 = EnvGen.kr(Env([0, hit14[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit14[0] / beatsPerBar));
- var hitEnv15 = EnvGen.kr(Env([0, hit15[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit15[0] / beatsPerBar));
- var hitEnv16 = EnvGen.kr(Env([0, hit16[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit16[0] / beatsPerBar));
- var hitEnv17 = EnvGen.kr(Env([0, hit17[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit17[0] / beatsPerBar));
- var hitEnv18 = EnvGen.kr(Env([0, hit18[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit18[0] / beatsPerBar));
- var hitEnv19 = EnvGen.kr(Env([0, hit19[1], 0], [0.01, 0.04], \sin), pushedBarProportion - (hit19[0] / beatsPerBar));
- var allEnvs = hitEnv00 + hitEnv01 + hitEnv02 + hitEnv03 + hitEnv04
- + hitEnv05 + hitEnv06 + hitEnv07 + hitEnv08 + hitEnv09
- + hitEnv10 + hitEnv11 + hitEnv12 + hitEnv13 + hitEnv14
- + hitEnv15 + hitEnv16 + hitEnv17 + hitEnv18 + hitEnv19;
- // Output.
- var metronome = WhiteNoise.ar(allEnvs * amplitudeMultiplier);
- var currentBeat = Wrap.kr(pushedBarProportion, 0, 1) * beatsPerBar;
- var display = [secondsElapsed, unadjustedBPM, variationOctave, currentBPM, currentBeat];
- Poll.kr(Impulse.kr(13), display);
- [metronome, metronome];
- }.play
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement