Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (
- {
- // change these
- var fund = MouseX.kr(6.448, 7.281);
- var snappiness = MouseY.kr(0, 4);
- var ascendiness = 0-SinOsc.kr(0.1).range(0.2, 0.4); // octaves or hertz per second, depending on interval
- var interval = pi / 20; // <10 read as octaves, >=10 read as hertz
- var wrapLo = 8;
- var wrapHi = 14.55;
- var rollLo = 2;
- var rollHi = 2;
- var fundRollStart = 1;
- var fundRoll = 2;
- var riseOff = -1.3;
- var master = 5;
- // don't mess with these
- var wrapLoHertz = 2 ** wrapLo;
- var wrapHiHertz = 2 ** wrapHi;
- var fundHertz = 2 ** fund;
- var tones, practicalWrapLo, gliders, glidersHertz,
- snapLoHertz, snapLo, snapHi, snapMid, signedHalfDist, snapped,
- overRollLo, startCurve, wrapRollMultiplier, fundRollProgress, fundRollMultiplier,
- earDistance, rightness, forwardness, distance, delay, mulRaw, mul,
- snappedHertz, amp, group, panned, out;
- if(interval < 10, {
- tones = roundUp((wrapHi - wrapLo) / interval);
- practicalWrapLo = wrapHi - (tones * interval);
- gliders = max(
- Wrap.kr(LFSaw.kr(ascendiness / (wrapHi - practicalWrapLo))
- .range(practicalWrapLo, wrapHi) +
- Array.fill(tones, {arg i; i * interval}), practicalWrapLo, wrapHi),
- fund);
- glidersHertz = 2 ** gliders;
- }, {
- tones = roundUp((wrapHiHertz - wrapLoHertz) / interval);
- practicalWrapLo = wrapHiHertz - (tones * interval);
- glidersHertz = max(
- Wrap.kr(LFSaw.kr(ascendiness / (wrapHiHertz - practicalWrapLo))
- .range(practicalWrapLo, wrapHiHertz) +
- Array.fill(tones, {arg i; i * interval}), practicalWrapLo, wrapHiHertz),
- fundHertz);
- gliders = log2(glidersHertz);
- });
- snapLoHertz = trunc(glidersHertz, fundHertz);
- snapLo = log2(snapLoHertz);
- snapHi = log2(snapLoHertz + fundHertz);
- snapMid = (snapLo + snapHi) / 2;
- signedHalfDist = (snapHi - snapLo) / Select.kr(gliders < snapMid, [-2, 2]);
- snapped = (((
- (((gliders - snapMid) / signedHalfDist) + 1)
- ** (2 ** snappiness)) - 1) * signedHalfDist) + snapMid;
- overRollLo = snapped > (wrapLo + rollLo);
- startCurve = Select.kr(overRollLo, [wrapLo, wrapHi - rollHi]);
- wrapRollMultiplier = (Select.kr(snapped > startCurve, [1,
- cos((snapped - startCurve)
- * Select.kr(overRollLo, [pi / rollLo, pi / rollHi])
- )]) / Select.kr(overRollLo, [-2, 2])) + 0.5;
- fundRollProgress = (snapped - fund - fundRollStart) / fundRoll;
- fundRollMultiplier = Select.kr(fundRollProgress + 1,
- [0, (cos(pi * fundRollProgress) / (-2)) + 0.5, 1]);
- earDistance = 0.00033;
- rightness = Array.fill(tones, { rrand(-4.0, 4.0) });
- forwardness = Array.fill(tones, { rrand(-4.0, 4.0) });
- distance = [hypot(rightness + 1, forwardness),
- hypot(rightness - 1, forwardness)];
- delay = earDistance * (distance + 1.0001
- - Array.fill(2, (distance[0] + distance[1]) / 2));
- mulRaw = (distance + 0.0001) ** -2;
- mul = [mulRaw[0] / hypot(mulRaw[0], mulRaw[1]),
- mulRaw[1] / hypot(mulRaw[0], mulRaw[1])];
- snappedHertz = 2 ** snapped;
- amp = wrapRollMultiplier * fundRollMultiplier * (snappedHertz ** riseOff);
- group = SinOsc.ar(snappedHertz, 0, amp);
- panned = DelayN.ar([group, group], earDistance * 3, delay, mul);
- out = [Mix.new(panned[0]), Mix.new(panned[1])] * (2 ** master);
- out
- }.play
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement