Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (
- {
- // change these
- var fund = MouseX.kr(5, 9);
- var snappiness = MouseY.kr(4.78136, 8.78136);
- var ascendiness = 0.33;
- var interval = 0.618; // <10 read as octaves, >=10 read as hertz
- var wrapLo = 6;
- var wrapHi = 14.55;
- var rollLo = 0.5;
- var rollHi = 0.5;
- var fundRollStart = 2;
- var fundRoll = 1;
- var riseOff = -1.5;
- var master = -20;
- // don't mess with these
- var wrapLoHertz = 2 ** wrapLo;
- var wrapHiHertz = 2 ** wrapHi;
- var tones, practicalWrapHi, gliders, glidersHertz;
- if(interval < 10, {
- tones = roundUp((wrapHi - wrapLo) / interval);
- practicalWrapHi = (tones * interval) + wrapLo;
- gliders = min(
- Wrap.kr(LFSaw.kr(ascendiness / (practicalWrapHi - wrapLo))
- .range(wrapLo, practicalWrapHi) +
- Array.fill(tones, {arg i; i * interval}), wrapLo, practicalWrapHi),
- wrapHi);
- glidersHertz = 2 ** gliders;
- }, {
- tones = roundUp((wrapHiHertz - wrapLoHertz) / interval);
- practicalWrapHi = (tones * interval) + wrapLoHertz;
- glidersHertz = min(
- Wrap.kr(LFSaw.kr(ascendiness / (practicalWrapHi - wrapLoHertz))
- .range(wrapLoHertz, practicalWrapHi) +
- Array.fill(tones, {arg i; i * interval}), wrapLoHertz, practicalWrapHi),
- wrapHiHertz);
- gliders = log2(glidersHertz);
- });
- var fundHertz = 2 ** fund;
- var snapLoHertz = trunc(glidersHertz, fundHertz);
- var snapLo = log2(snapLoHertz);
- var snapHi = log2(snapLoHertz + fundHertz);
- var snapMid = (snapLo + snapHi) / 2;
- var signedHalfDist = (snapHi - snapLo) / if(gliders < snapMid, 2, -2);
- var snapped = (((
- (((gliders - snapMid) / signedHalfDist) + 1)
- ** (2 ** snappiness)) - 1) * signedHalfDist) + snapMid;
- var rollLoFull = wrapLo + rollLo;
- var piOverRollLo = pi / rollLo;
- var rollLoMultiple = if(snapped > rollLoFull, 1,
- (cos((snapped - rollLoFull) * piOverRollLo) + 1) / 2);
- var rollHiFull = wrapHi - rollHi;
- var piOverRollHi = pi / rollHi;
- var rollHiMultiple = if(snapped < rollHiFull, 1,
- (cos((snapped - rollHiFull) * piOverRollHi) + 1) / 2);
- var fundRollEnd = fundRollStart + fundRoll;
- var piOverFundRoll = pi / fundRoll;
- var fundRollMultiple = if(snapped < fundRollStart, 0,
- if(snapped > fundRollEnd, 1,
- (cos((snapped - fundRollEnd) * piOverFundRoll) + 1) / 2));
- var snappedHertz = 2 ** snapped;
- var balanced = rollLoMultiple * rollHiMultiple * fundRollMultiple
- * (snappedHertz ** riseOff);
- var group = SinOsc.ar(snappedHertz, 0, balanced);
- var panned = [group, group];
- var out = [Mix.new(panned[0]), Mix.new(panned[1])] * (2 ** master);
- Poll.kr(Impulse.kr(10), fund);
- out
- }.play
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement