def io_random(slot, *_): envs = envelopes() amps = [] for i in (1,2,3): amps.append(coin(0.75, 0.5+rnd(),rnd())) amps[pick((0,1,2))] = 1.0 ff = cformants() rr = cratios() p = io(slot,"Random", amp = 0.1, vibrato = vibrato(freq = coin(0.75,4+rnd(4),rnd(16)), lock = coin(0.75, 1, 0), noise = coin(0.5, 0.0, rnd()), sens = coin(0.80, rnd(0.1),rnd()), depth = coin(0.25, 0, coin(0.75, rnd(0.3), rnd())), x = 0.0, tremRatio = trem_ratio()), blip = blip(attack = coin(0.75, rnd(0.1),rnd(MAX_BLIP_SEGMENT_TIME)), decay = coin(0.75, 0.1+rnd(0.2), rnd(MAX_BLIP_SEGMENT_TIME)), depth = coin(0.75, 0.0, coin(0.75, rnd(0.2), rnd()))), noise = noise(ratio = coin(0.75, 1.0, pick(NOISE_RATIOS)), amp = coin(0.75, rnd(0.4), rnd())), modulator = modulator(ratio = pick((1,1,1,1,2,2,2,2,3,4)), feedback = coin(0.5, 0.0, coin(0.75, rnd(2), rnd(4))), lfo = coin(0.75, 0.0, coin(0.75, rnd(0.2), rnd()))), op1 = car(1,ff,rr,envs,amps[0]), op2 = car(2,ff,rr,envs,amps[1]), op3 = car(3,ff,rr,envs,amps[2])) return p
def random_xover(slot=127, *_): lfrq = coin(0.75, rnd(), coin(0.75, rnd(10),rnd(100))) p = xover(slot, "Random", lfoFreq = lfrq, lfo2Ratio = pick(xcon.LFO_RATIOS)[0], lfo2Wave = coin(0.75, 0.5, rnd()), lfoEnable = coin(0.75, 1, 0), res = coin(0.75, rnd(0.5), rnd()), xover = pick(xcon.CROSSOVER_FREQUENCIES), lfoToXover = coin(0.50, 0, rnd()), externToXover = 0.0, minXover = xcon.CROSSOVER_FREQUENCIES[0], maxXover = xcon.CROSSOVER_FREQUENCIES[-1], filterBMix = rnd(), filterBRatio = pick(xcon.FILTER_B_RATIOS)[0], filterBLag = coin(0.50, rnd(), 0.0), dryAmp = coin(0.75, 0.5+rnd(0.5), coin(0.50, 0, rnd())), filterAAmp = coin(0.75, 0.5+rnd(0.5), coin(0.50, 0, rnd())), filterBAmp = coin(0.75, 0.5+rnd(0.5), coin(0.50, 0, rnd())), dryPan = 0.0, filterAPan = 0.0, filterBPan = 0.0, xscale = 1.0, xbias = 0.0) return p
def io_random(slot, *_): envs = envelopes() amps = [] for i in (1, 2, 3): amps.append(coin(0.75, 0.5 + rnd(), rnd())) amps[pick((0, 1, 2))] = 1.0 ff = cformants() rr = cratios() p = io(slot, "Random", amp=0.1, vibrato=vibrato(freq=coin(0.75, 4 + rnd(4), rnd(16)), lock=coin(0.75, 1, 0), noise=coin(0.5, 0.0, rnd()), sens=coin(0.80, rnd(0.1), rnd()), depth=coin(0.25, 0, coin(0.75, rnd(0.3), rnd())), x=0.0, tremRatio=trem_ratio()), blip=blip(attack=coin(0.75, rnd(0.1), rnd(MAX_BLIP_SEGMENT_TIME)), decay=coin(0.75, 0.1 + rnd(0.2), rnd(MAX_BLIP_SEGMENT_TIME)), depth=coin(0.75, 0.0, coin(0.75, rnd(0.2), rnd()))), noise=noise(ratio=coin(0.75, 1.0, pick(NOISE_RATIOS)), amp=coin(0.75, rnd(0.4), rnd())), modulator=modulator(ratio=pick((1, 1, 1, 1, 2, 2, 2, 2, 3, 4)), feedback=coin(0.5, 0.0, coin(0.75, rnd(2), rnd(4))), lfo=coin(0.75, 0.0, coin(0.75, rnd(0.2), rnd()))), op1=car(1, ff, rr, envs, amps[0]), op2=car(2, ff, rr, envs, amps[1]), op3=car(3, ff, rr, envs, amps[2])) return p
def envelopes(): type_hint, time_hint = env_hint() acc = [] def pick_time(hint): if hint == "fast": return rnd(0.1) elif hint == "medium": return coin(0.75, rnd(0.2), rnd(0.5)) else: return 0.5 + coin(0.75, rnd(2), rnd(6)) for op in (1, 2, 3): typ = coin(p_env_changeup, pick(["adsr", "asr", "perc"]), type_hint) tm = coin(p_env_changeup, pick(["fast", "medium", "slow"]), time_hint) att = pick_time(tm) dcy = pick_time(tm) rel = pick_time(tm) sus = coin(0.5, 0.5 + rnd(0.5), rnd()) if typ == "asr": sus = 1.0 elif typ == "perc": sus = coin(0.75, 0.0, rnd(0.1)) dcy /= 2 rel *= 2 acc.append((att, dcy, sus, rel)) return acc
def envelopes(): type_hint, time_hint = env_hint() acc = [] def pick_time(hint): if hint == "fast": return rnd(0.1) elif hint == "medium": return coin(0.75, rnd(0.2), rnd(0.5)) else: return 0.5+coin(0.75, rnd(2), rnd(6)) for op in (1,2,3): typ = coin(p_env_changeup, pick(["adsr","asr","perc"]), type_hint) tm = coin(p_env_changeup, pick(["fast","medium","slow"]), time_hint) att = pick_time(tm) dcy = pick_time(tm) rel = pick_time(tm) sus = coin(0.5, 0.5+rnd(0.5), rnd()) if typ == "asr": sus = 1.0 elif typ == "perc": sus = coin(0.75, 0.0, rnd(0.1)) dcy /= 2 rel *= 2 acc.append((att,dcy,sus,rel)) return acc
def pick_fm_modulation_ratio(is_harmonic): if is_harmonic: rs = coin(0.75, pick(HARMONICS), pick(HARMONICS2)) else: rs = coin(0.75, 0.5+rnd(5), rnd(12)) return rs
def pick_env_time_hint(is_percussive=None): if is_percussive: h = pick((MEDIUM, MEDIUM, SLOW, SLOW, SLOW, SLOW, SLOW, SLOW, SLOW, GLACIAL)) else: h = coin(0.75, pick((ULTRA_FAST, FAST, MEDIUM)), pick((ULTRA_FAST, FAST, MEDIUM, SLOW, GLACIAL, FULL))) return h
def pick_env_time_hint(is_percussive=False): if is_percussive: h = coin(0.74, SLOW, coin(0.67, MEDIUM, GLACIAL)) else: h = coin(0.75, pick((ULTRA_FAST,FAST,FAST, MEDIUM)), pick((FAST,MEDIUM,SLOW,GLACIAL,FULL))) return h
def random_flanger(slot=127, *_): p = flngr(slot, "Random", amp=0, delay = coin(0.75, 0.5, rnd()), modDepth = rnd(), modFreq = coin(0.75, rnd(), rnd(10)), feedback = random_sign()*rnd(0.9), loweq = coin(0.75, 20000, pick([1000, 2000, 4000, 8000])), higheq = coin(0.75, 20, pick([200, 400, 800, 1600])), efxMix = coin(0.75, 0.5+rnd(0.5), rnd()), xmodDepth = 0.0, xmixScale = 0.0) return p
def random_ss1(slot, *_): ff = pick(LOWPASS_CUTOFF) ft = pick(LOWPASS_TRACK) open_filter = (ft >= 2) or (ff > MID_CUTOFF) if open_filter: fenv_sign = -1 else: fenv_sign = 1 def envtime(seg): if seg == 'a': return coin(0.75, rnd(0.5), coin(0.75, rnd(), rnd(4))) else: return coin(0.75, rnd(2), rnd(4)) amps = [] for i in range(3): amps.append(rnd()) amps[pick([0, 1, 2])] = 1.0 p = ss1(slot, "Random", port=coin(0.90, 0.0, rnd()), vsens=coin(0.75, 0.1, rnd()), xPitch=0.0, chorus=coin(0.50, 1, 0), lfoFreq=coin(0.75, 3 + rnd(4), coin(0.5, rnd(3), rnd(16))), lfoWave=pick([0, 0, 0, 0, 0, 0, 1, 2]), lfoDelay=rnd(2), lfoAmp=coin(0.25, 0.0, rnd()), attack=envtime("a"), decay=envtime("d"), sustain=coin(0.75, 0.5 + rnd(0.5), coin(0.75, rnd(), coin(0.5, 0.0, 1.0))), release=envtime("r"), sawMix=amps[0], pulseMix=amps[1], subMix=amps[2], subOctave=coin(0.5, 0, 1), noiseSelect=coin(0.5, 0, 1), noiseMix=coin(0.75, 0, coin(0.75, rnd(0.5), rnd())), wave=coin(0.75, 0.5, rnd()), waveLFO=coin(0.75, 0.0, rnd()), waveEnv=coin(0.75, 0.0, rnd()), highPass=coin(0.75, HIGHPASS_CUTOFF[0], pick(HIGHPASS_CUTOFF)), filterFreq=ff, filterTrack=ft, filterLFO=int(coin(0.75, 0, rnd(MID_CUTOFF))), filterEnv=int(fenv_sign * coin(0.75, rnd(LOWPASS_CUTOFF[-2]), 0)), xFilter=0, gateMode=coin(0.75, 0, 1), amp=0.3) return p
def random_flanger(slot=127, *_): p = flngr(slot, "Random", amp=0, delay=coin(0.75, 0.5, rnd()), modDepth=rnd(), modFreq=coin(0.75, rnd(), rnd(10)), feedback=random_sign() * rnd(0.9), loweq=coin(0.75, 20000, pick([1000, 2000, 4000, 8000])), higheq=coin(0.75, 20, pick([200, 400, 800, 1600])), efxMix=coin(0.75, 0.5 + rnd(0.5), rnd()), xmodDepth=0.0, xmixScale=0.0) return p
def fm_params(op, pconfig={}): pdeep = pconfig.get("p-deep-modulation", 0.1) plfo = pconfig.get("p-lfo", 0.1) mscale = coin(pdeep, pick([1,10,100,1000,10000]),pick([1,1,10,10,10,10])) rs = {"fm%d_ratio" % op : pick_ratio(pconfig), "fm%d_moddepth" % op : round(coin(0.75, rnd(), 0.0),4), "fm%d_modscale" % op : float(mscale), "fm%d_lag" % op : round(coin(0.50, 0.0, rnd()), 4), "fm%d_lfo1" % op : round(coin(plfo, coin(0.5, rnd(0.25), rnd()), 0.0),4), "fm%d_lfo2" % op : round(coin(plfo, coin(0.5, rnd(0.25), rnd()), 0.0),4), "fm%d_external" % op : 0.0, "fm%d_left" % op : 0, "fm%d_right" % op : 0} return rs
def random_ss1(slot, *_): ff = pick(LOWPASS_CUTOFF) ft = pick(LOWPASS_TRACK) open_filter = (ft >=2) or (ff > MID_CUTOFF) if open_filter: fenv_sign = -1 else: fenv_sign = 1 def envtime(seg): if seg == 'a': return coin(0.75, rnd(0.5), coin(0.75, rnd(), rnd(4))) else: return coin(0.75, rnd(2), rnd(4)) amps = [] for i in range(3): amps.append(rnd()) amps[pick([0,1,2])] = 1.0 p = ss1(slot,"Random", port = coin(0.90, 0.0, rnd()), vsens = coin(0.75, 0.1, rnd()), xPitch = 0.0, chorus = coin(0.50, 1, 0), lfoFreq = coin(0.75, 3+rnd(4), coin(0.5, rnd(3), rnd(16))), lfoWave = pick([0,0,0,0,0,0,1,2]), lfoDelay = rnd(2), lfoAmp = coin(0.25, 0.0, rnd()), attack = envtime("a"), decay = envtime("d"), sustain = coin(0.75, 0.5+rnd(0.5), coin(0.75, rnd(), coin(0.5, 0.0, 1.0))), release = envtime("r"), sawMix = amps[0], pulseMix = amps[1], subMix = amps[2], subOctave = coin(0.5, 0, 1), noiseSelect = coin(0.5, 0, 1), noiseMix = coin(0.75, 0, coin(0.75, rnd(0.5), rnd())), wave = coin(0.75, 0.5, rnd()), waveLFO = coin(0.75, 0.0, rnd()), waveEnv = coin(0.75, 0.0, rnd()), highPass = coin(0.75, HIGHPASS_CUTOFF[0], pick(HIGHPASS_CUTOFF)), filterFreq = ff, filterTrack = ft, filterLFO = int(coin(0.75, 0, rnd(MID_CUTOFF))), filterEnv = int(fenv_sign*coin(0.75, rnd(LOWPASS_CUTOFF[-2]), 0)), xFilter = 0, gateMode = coin(0.75, 0, 1), amp = 0.3) return p
def cratios(): harmonic = (1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5, 6, 8) acc = [] for i in range(3): acc.append(coin(0.80, pick(harmonic), rnd(8))) return tuple(acc)
def pick_filter(id): floor,ceiling = 100,16000 ff = int(floor+rnd(ceiling-floor)) trk = coin(0.75,0,pick((0.5,1,2))) head = ceiling-ff r = rnd() if r<0.25: env = cenv = 0 elif r<0.50: env = int(rnd(head)) cenv = 0 elif r<0.75: cenv=int(rnd(head)) env=int(rnd(head-cenv)) else: env=0 cenv=int(rnd(head)) if ff > 6000: env = coin(0.8,-1,1)*env cenv = coin(0.8,-1,1)*cenv if cenv==0 and env==0: plfo = 0.5 else: plfo = 0.1 lfo = coin(plfo, int(head), 0) vlfo = coin(0.05,int(head),0) return filter(id,freq=ff,track=trk, env=env,cenv=cenv,lfo=lfo,vlfo=vlfo, res=rnd())
def pick_env_type_hint(hint=None, p_changeup=1.0): hint = hint or pick((GATE, PERCUSSIVE, PERCUSSIVE, PERCUSSIVE, PERCUSSIVE, ADSR, ADSR, ADSR, ADSR, ASR, ASR)) #hint = coin(p_changeup, pick_env_type_hint(None,0), hint) if coin(p_changeup): return pick_env_type_hint(hint, 0) return hint
def cratios(): harmonic = (1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2, 3,3,3,4,4,5,6,8) acc = [] for i in range(3): acc.append(coin(0.80, pick(harmonic), rnd(8))) return tuple(acc)
def pick_filter_mod(ff): if coin(0.25): if ff > 4000: psign = 0.75 else: psign = 0.25 return random_sign(psign)*pick(FILTER_FREQUENCIES) else: return 0
def pick_noise_mod(nfreq): if coin(0.25): if nfreq > 4000: psign = 0.75 else: psign = 0.25 return random_sign(psign)*pick(FILTER_FREQUENCIES) else: return 0
def pick_harmonic_envmod(n): if coin(0.60): return 0 else: if n > 12: psign = 0.75 else: psign = 0.25 return random_sign(psign)*pick(HARMONICS)
def pick_env_type_hint(hint=None, p_changeup=1.0): hint = hint or pick((GATE, PERCUSSIVE,PERCUSSIVE,PERCUSSIVE,PERCUSSIVE, ADSR,ADSR,ADSR,ADSR, ASR,ASR)) #hint = coin(p_changeup, pick_env_type_hint(None,0), hint) if coin(p_changeup): return pick_env_type_hint(hint,0) return hint
def random_program(slot=127, *_): lp = [400, 800, 1600, 3150, 6300, 8000, 10000, 10000, 10000, 10000, 16000, 16000, 16000, 16000] hp = [20, 100, 100, 100, 100, 200, 400, 800, 1600, 3150] p = carnal(slot, "Random", amp=0, delayTime = coin(0.5, rnd(0.5), rnd(MAX_DELAY)), xDelay = 0, wow = coin(0.75,0,coin(0.75, rnd(0.1), rnd())), wowFreq = coin(0.75, rnd(), rnd(5)), flutter = coin(0.75, 0, coin(0.75, rnd(0.2), rnd())), feedback = coin(0.75, 0.5+rnd(0.4), rnd(0.95)), gain = 1.0, threshold = 1.0, eq = [pick(lp), pick(hp)], wetMix = coin(0.75, 0.5+rnd(0.25), rnd()), xWetMix=0) return p
def fm_params(op, pconfig={}): pdeep = pconfig.get("p-deep-modulation", 0.1) plfo = pconfig.get("p-lfo", 0.1) mscale = coin(pdeep, pick([1, 10, 100, 1000, 10000]), pick([1, 1, 10, 10, 10, 10])) rs = { "fm%d_ratio" % op: pick_ratio(pconfig), "fm%d_moddepth" % op: round(coin(0.75, rnd(), 0.0), 4), "fm%d_modscale" % op: float(mscale), "fm%d_lag" % op: round(coin(0.50, 0.0, rnd()), 4), "fm%d_lfo1" % op: round(coin(plfo, coin(0.5, rnd(0.25), rnd()), 0.0), 4), "fm%d_lfo2" % op: round(coin(plfo, coin(0.5, rnd(0.25), rnd()), 0.0), 4), "fm%d_external" % op: 0.0, "fm%d_left" % op: 0, "fm%d_right" % op: 0 } return rs
def _env_time(hint): hnt = coin(0.8, hint, pick(['FAST','MEDIUM','SLOW','GLACIAL'])) if hnt == 'FAST': return r(rnd(0.1)) elif hnt == 'MEDIUM': return r(0.1 + rnd(2)) elif hnt == 'SLOW': return r(0.5 + rnd(4)) else: return r(3+rnd(9))
def _env_time(hint): hnt = coin(0.8, hint, pick(['FAST', 'MEDIUM', 'SLOW', 'GLACIAL'])) if hnt == 'FAST': return r(rnd(0.1)) elif hnt == 'MEDIUM': return r(0.1 + rnd(2)) elif hnt == 'SLOW': return r(0.5 + rnd(4)) else: return r(3 + rnd(9))
def pick_efx(env): a,d1,d2,r,bp,s,hold = env rs = {"efx-amp" : coin(0.25, 0.0, rnd()), "efx-mix" : coin(0.50, rnd(2)-1, coin(0.5, -1.0, 1.0)), "lfo-ratio" : coin(0.75, pick(LFO_RATIOS[:6]),pick(LFO_RATIOS))[0], "flanger-delay" : rnd(MAX_FLANGER_DELAY), "flanger-feedback" : coin(0.5,-1,1)*coin(0.75,rnd(0.75),0.5*rnd(0.5)), "flanger-lfo-depth" : coin(0.75, rnd(0.3), coin(0.75, 0.0, rnd())), "ps-ratio" : coin(0.75, pick([0.5,1.0,1.5,2,3,4]),rnd(4)), "ps-pitch-dispersion" : coin(0.90, 0, rnd(0.5)), "ps-time-dispersion" : coin(0.75, 0, rnd()), "ps-lfo-depth" : coin(0.75, 0, rnd()), "attack" : a, "decay1" : d1, "decay2" : d2, "release" : r, "breakPoint" : bp, "sustain" : s, "env-cycle" : hold} return rs
def random_program(slot=127, *_): lp = [ 400, 800, 1600, 3150, 6300, 8000, 10000, 10000, 10000, 10000, 16000, 16000, 16000, 16000 ] hp = [20, 100, 100, 100, 100, 200, 400, 800, 1600, 3150] p = carnal(slot, "Random", amp=0, delayTime=coin(0.5, rnd(0.5), rnd(MAX_DELAY)), xDelay=0, wow=coin(0.75, 0, coin(0.75, rnd(0.1), rnd())), wowFreq=coin(0.75, rnd(), rnd(5)), flutter=coin(0.75, 0, coin(0.75, rnd(0.2), rnd())), feedback=coin(0.75, 0.5 + rnd(0.4), rnd(0.95)), gain=1.0, threshold=1.0, eq=[pick(lp), pick(hp)], wetMix=coin(0.75, 0.5 + rnd(0.25), rnd()), xWetMix=0) return p
def percussive_envelope(time_hint): if time_hint < MEDIUM: time_hint = pick_env_time_hint(True) junk,dcy1,dcy2,rel = pick_env_times(time_hint,0.0) att = coin(0.80, 0.00, rnd(0.01)) dcy1,dcy2 = min(dcy1,dcy2),max(dcy1,dcy2) while dcy1 > 1: dcy1 = dcy1-1 if dcy2 < 0.5: dcy2 = coin(0.25, dcy2, pick([dcy1*2,dcy1*3,dcy1*4])) bp = coin(0.50,rnd(0.75),0.75) sus = coin(0.90,0.0,rnd(0.12)) return round_env_values([att,dcy1,dcy2,rel,bp,sus,0])
def _percussive_envelope(time_hint): if time_hint < MEDIUM: time_hint = pick_env_time_hint(True) status("Percussive", time_hint) junk, dcy1, dcy2, rel = pick_envelope_times(time_hint, 0.0) att = coin(0.80, 0.00, rnd(0.01)) dcy1, dcy2 = min(dcy1, dcy2), max(dcy1, dcy2) if dcy1 > 1: dcy1 = coin(0.75, rnd(), dcy1) if dcy2 < 0.5: dcy2 = coin(0.25, dcy2, pick((dcy1 * 2, dcy1 * 3, dcy1 * 4))) bp = coin(0.50, rnd(0.75), 0.75) sus = coin(0.90, 0.0, rnd(0.12)) return _round_env_values((att, dcy1, dcy2, rel, bp, sus, 0))
def _percussive_envelope(time_hint): if time_hint < MEDIUM: time_hint = pick_env_time_hint(True) status("Percussive", time_hint) junk,dcy1,dcy2,rel = pick_envelope_times(time_hint,0.0) att = coin(0.80, 0.00, rnd(0.01)) dcy1, dcy2 = min(dcy1,dcy2),max(dcy1,dcy2) if dcy1 > 1: dcy1 = coin(0.75, rnd(), dcy1) if dcy2 < 0.5: dcy2 = coin(0.25, dcy2, pick((dcy1*2,dcy1*3,dcy1*4))) bp = coin(0.50,rnd(0.75),0.75) sus = coin(0.90, 0.0, rnd(0.12)) return _round_env_values((att,dcy1,dcy2,rel,bp,sus,0))
def scanner_random(slot,*_): srate = coin(0.50, rnd(7),coin(0.90, rnd(), rnd(100))) wave = coin(0.70, 0.5, rnd()) delay = rnd(0.05) depth = rnd() feedback = random_sign(0.5, coin(0.75, 0.5+rnd(0.49), rnd(0.75))) if abs(feedback) > 0.75: lowpass = pick((16000, 12000, 8000, 8000, 8000, 4000, 4000, 2000)) else: lowpass = 16000 dry = 0.5 wet = 0.5 return scanner(slot, "Random", srate, wave, delay, depth, feedback,lowpass, dry, wet, wet, 0.0)
def op_params(op, pconfig={}): vel = coin(pconfig.get("p-velocity", 0.4), rnd(), 0.0) lf1 = coin(pconfig.get("p-lfo", 0.1), rnd(), 0.0) lf2 = coin(pconfig.get("p-lfo", 0.1), rnd(), 0.0) penv = random_sign() * coin(pconfig.get("p-pitch-env", 0.02), rnd(2) - 1, 0.0) rs = { "op%d_ratio" % op: pick_ratio(pconfig), "op%d_bias" % op: pick_bias(pconfig), "op%d_velocity" % op: round(vel, 4), "op%d_lfo1" % op: round(lf1, 4), "op%d_lfo2" % op: round(lf2, 4), "op%d_external" % op: 0.0, "op%d_key" % op: 60, "op%d_left" % op: 0, "op%d_right" % op: 0, "op%d_pe" % op: round(penv, 4) } if op == 3: p = pconfig.get("p-noise", 0.1) nsmix = round(coin(p, coin(0.5, rnd(), 1.0), 0.0), 4) nsbw = pick(NOISE_BANDWIDTHS) rs["nse3_mix"] = nsmix rs["nse3_bw"] = nsbw elif op == 4: p = pconfig.get("p-buzz", 0.4) plfo = pconfig.get("p-lfo", 0.1) n = int(coin(0.60, rnd(8), rnd(128))) if n < 16: s = 1 elif n > 84: s = -1 else: s = coin(0.5, -1, 1) env = int(s * coin(0.50, rnd(128), 0.0)) lfo = int(coin(plfo, coin(0.75, rnd(64), rnd(128)))) lag = round(coin(0.50, rnd(), 0.0), 4) mix = round(coin(p, rnd(), 0), 4) rs["bzz4_n"] = max(n, 1) rs["bzz4_env"] = env rs["bzz4_lfo2"] = lfo rs["bzz4_lag"] = lag rs["bzz4_mix"] = mix return rs
def op_params(op, pconfig={}): vel = coin(pconfig.get("p-velocity",0.4), rnd(), 0.0) lf1 = coin(pconfig.get("p-lfo",0.1), rnd(), 0.0) lf2 = coin(pconfig.get("p-lfo",0.1), rnd(), 0.0) penv = random_sign()*coin(pconfig.get("p-pitch-env", 0.02), rnd(2)-1, 0.0) rs = {"op%d_ratio" % op : pick_ratio(pconfig), "op%d_bias" % op : pick_bias(pconfig), "op%d_velocity" % op : round(vel,4), "op%d_lfo1" % op : round(lf1,4), "op%d_lfo2" % op : round(lf2,4), "op%d_external" % op : 0.0, "op%d_key" % op : 60, "op%d_left" % op : 0, "op%d_right" % op : 0, "op%d_pe" % op : round(penv,4)} if op == 3: p = pconfig.get("p-noise",0.1) nsmix = round(coin(p, coin(0.5, rnd(), 1.0), 0.0),4) nsbw = pick(NOISE_BANDWIDTHS) rs["nse3_mix"] = nsmix rs["nse3_bw"] = nsbw elif op == 4: p = pconfig.get("p-buzz", 0.4) plfo = pconfig.get("p-lfo",0.1) n = int(coin(0.60, rnd(8), rnd(128))) if n < 16: s = 1 elif n > 84: s = -1 else: s = coin(0.5,-1,1) env = int(s * coin(0.50, rnd(128), 0.0)) lfo = int(coin(plfo, coin(0.75, rnd(64),rnd(128)))) lag = round(coin(0.50, rnd(), 0.0), 4) mix = round(coin(p, rnd(), 0), 4) rs["bzz4_n"] = max(n,1) rs["bzz4_env"] = env rs["bzz4_lfo2"] = lfo rs["bzz4_lag"] = lag rs["bzz4_mix"] = mix return rs
def _pick_mod_scale(p_deep_modulation=0.1): s = coin(p_deep_modulation, coin(0.75, pick((1e2,1e3)), pick((1e4,1e5))), coin(0.50, 1,10)) return s
def _ctune(): harm = pick([1,1.333,1.5,2,3,4,5,6,7,8]) return r(coin(0.75, harm, 1+rnd(8)))
def m_random(slot=127,*_): time_hint = pick(('FAST','MEDIUM','SLOW','GLACIAL')) env_mode = coin(0.80, 0, 1) rb1 = _tune() rb2 = coin(0.50, rb1+(coin(0.50, rnd(0.01), 0)), _tune()) amps = [] for i in range(3): amps.append(coin(0.75, 0.333+rnd(0.667), 0)) amps.append(coin(0.75, 0, rnd())) amps[pick([0,1,2])]=1.0 p = m(slot,"Random", port = coin(0.1, rnd(), 0), amp = 0.1, lfo = lfo(vFreq = r(coin(0.75, 4+rnd(4), coin(0.75, 1+rnd(9),rnd(99)))), vSens = r(coin(0.75, 0.1, rnd())), vDepth = r(coin(0.75, 0.0, rnd())), xPitch = 0.0, aRatio = _lfo_ratio(), bRatio = _lfo_ratio(), cRatio = _lfo_ratio(), aDelay = pick(LFO_DELAYS), bDelay = pick(LFO_DELAYS), cDelay = pick(LFO_DELAYS), tLag = r(coin(0.50, 0, rnd()))), enva = _env('a',time_hint,env_mode), envb = _env('b',time_hint,env_mode), envc = _env('c',time_hint,env_mode), a = toneA(ratio = min(_tune()*pick([1,2,2,3,3,3,4,4,4,4,6,8,12,16,24,32]),99), keyscale = [60,0,0], quotient = [pick([1,2,3,4,5,6,7,8,9,10,11,12]), coin(0.75, 0, pick(range(8))), coin(0.75, 0, pick(range(8))), 0], pulse = [r(coin(0.5, 0.5, rnd())), r(coin(0.75, 0.0, rnd())), r(coin(0.75, 0.0, rnd())), 0.0], clkmix = coin(0.75, 0.0, rnd()), envpitch = coin(0.90, 0.0, sign()*rnd()), tremolo = coin(0.75, 0, rnd())), b = toneB(ratio1 = rb1, ratio2 = rb2, keyscale = [60,0,0], n1 = [pick(range(32)), coin(0.75, 0.0, pick(range(32))), coin(0.75, 0.0, pick(range(32))), 0.0], n2 = [pick(range(32)), coin(0.50, 0.0, rnd()), coin(0.75, -1, coin(0.75, 1, 0))], envpitch = coin(0.90, 0.0, sign()*rnd()), tremolo = coin(0.75, 0, rnd())), c = toneC(ratio = _ctune(), keyscale = [60,0,0], pulseFreq = [_ctune(), coin(0.75, 0, pick(range(4))), coin(0.75, 0, pick(range(4))), 0.0], pwm = [coin(0.5, 0.5, rnd()), coin(0.5, 0.0, rnd()), coin(0.75, 0.0, rnd()), 0.0], inciteSelect = coin(0.50, 0.0, rnd()), envpitch = coin(0.90, 0, sign()*rnd()), tremolo = coin(0.75,0, rnd())), noise = noise(lp = coin(0.75, 20000, 500+coin(5000)), hp = coin(0.75, 10, 500+coin(5000)), lag = coin(0.5, 0.0, rnd()), tremolo = coin(0.75, 0, rnd())), mix = mixer(mix = amps, pan = [sign()*rnd(),sign()*rnd(),sign()*rnd(),sign()*rnd()]), f1 = filter_(1, freq = r(coin(0.75, rnd(5000), rnd(20000))), track = r(pick([0,0,0,1])), res = coin(0.75, rnd(0.5), rnd()), lfo = [coin(0.75, 0.0, rnd(5000)), coin(0.75, 0.0, rnd(5000))], env = [coin(0.25, 0, coin(0.75, rnd(10000), -rnd(10000))), coin(0.25, 0, coin(0.75, rnd(10000), -rnd(10000)))], pan = 0.0), f2 = filter_(2, freq = r(coin(0.75, rnd(5000), rnd(20000))), track = r(pick([0,0,0,1])), res = coin(0.75, rnd(0.5), rnd()), lfo = [coin(0.75, 0.0, rnd(5000)), coin(0.75, 0.0, rnd(5000))], env = [coin(0.25, 0, coin(0.75, rnd(10000), -rnd(10000))), coin(0.25, 0, coin(0.75, rnd(10000), -rnd(10000)))], pan = 0.0)) return p
def _random_engion(slot,gconfig): fn = pick((basic_generator,chorus_generator)) return fn(slot,gconfig)
def _tune(): harm = pick([0.125,0.25,0.50,0.75,1.0,1.333,1.5,2,3,4,5,6,8,12,16]) return r(coin(0.75, harm, 0.1+rnd(16)))
def trem_ratio(): r = coin(0.75, (1.0, ""), pick(TREMOLO_RATIOS)) return r[0]
def get_env_hint(): return pick(["PERCUSSION", "ADDSR"])
def m_random(slot=127, *_): time_hint = pick(('FAST', 'MEDIUM', 'SLOW', 'GLACIAL')) env_mode = coin(0.80, 0, 1) rb1 = _tune() rb2 = coin(0.50, rb1 + (coin(0.50, rnd(0.01), 0)), _tune()) amps = [] for i in range(3): amps.append(coin(0.75, 0.333 + rnd(0.667), 0)) amps.append(coin(0.75, 0, rnd())) amps[pick([0, 1, 2])] = 1.0 p = m(slot, "Random", port=coin(0.1, rnd(), 0), amp=0.1, lfo=lfo(vFreq=r( coin(0.75, 4 + rnd(4), coin(0.75, 1 + rnd(9), rnd(99)))), vSens=r(coin(0.75, 0.1, rnd())), vDepth=r(coin(0.75, 0.0, rnd())), xPitch=0.0, aRatio=_lfo_ratio(), bRatio=_lfo_ratio(), cRatio=_lfo_ratio(), aDelay=pick(LFO_DELAYS), bDelay=pick(LFO_DELAYS), cDelay=pick(LFO_DELAYS), tLag=r(coin(0.50, 0, rnd()))), enva=_env('a', time_hint, env_mode), envb=_env('b', time_hint, env_mode), envc=_env('c', time_hint, env_mode), a=toneA(ratio=min( _tune() * pick([1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 6, 8, 12, 16, 24, 32]), 99), keyscale=[60, 0, 0], quotient=[ pick([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]), coin(0.75, 0, pick(range(8))), coin(0.75, 0, pick(range(8))), 0 ], pulse=[ r(coin(0.5, 0.5, rnd())), r(coin(0.75, 0.0, rnd())), r(coin(0.75, 0.0, rnd())), 0.0 ], clkmix=coin(0.75, 0.0, rnd()), envpitch=coin(0.90, 0.0, sign() * rnd()), tremolo=coin(0.75, 0, rnd())), b=toneB(ratio1=rb1, ratio2=rb2, keyscale=[60, 0, 0], n1=[ pick(range(32)), coin(0.75, 0.0, pick(range(32))), coin(0.75, 0.0, pick(range(32))), 0.0 ], n2=[ pick(range(32)), coin(0.50, 0.0, rnd()), coin(0.75, -1, coin(0.75, 1, 0)) ], envpitch=coin(0.90, 0.0, sign() * rnd()), tremolo=coin(0.75, 0, rnd())), c=toneC(ratio=_ctune(), keyscale=[60, 0, 0], pulseFreq=[ _ctune(), coin(0.75, 0, pick(range(4))), coin(0.75, 0, pick(range(4))), 0.0 ], pwm=[ coin(0.5, 0.5, rnd()), coin(0.5, 0.0, rnd()), coin(0.75, 0.0, rnd()), 0.0 ], inciteSelect=coin(0.50, 0.0, rnd()), envpitch=coin(0.90, 0, sign() * rnd()), tremolo=coin(0.75, 0, rnd())), noise=noise(lp=coin(0.75, 20000, 500 + coin(5000)), hp=coin(0.75, 10, 500 + coin(5000)), lag=coin(0.5, 0.0, rnd()), tremolo=coin(0.75, 0, rnd())), mix=mixer(mix=amps, pan=[ sign() * rnd(), sign() * rnd(), sign() * rnd(), sign() * rnd() ]), f1=filter_( 1, freq=r(coin(0.75, rnd(5000), rnd(20000))), track=r(pick([0, 0, 0, 1])), res=coin(0.75, rnd(0.5), rnd()), lfo=[coin(0.75, 0.0, rnd(5000)), coin(0.75, 0.0, rnd(5000))], env=[ coin(0.25, 0, coin(0.75, rnd(10000), -rnd(10000))), coin(0.25, 0, coin(0.75, rnd(10000), -rnd(10000))) ], pan=0.0), f2=filter_( 2, freq=r(coin(0.75, rnd(5000), rnd(20000))), track=r(pick([0, 0, 0, 1])), res=coin(0.75, rnd(0.5), rnd()), lfo=[coin(0.75, 0.0, rnd(5000)), coin(0.75, 0.0, rnd(5000))], env=[ coin(0.25, 0, coin(0.75, rnd(10000), -rnd(10000))), coin(0.25, 0, coin(0.75, rnd(10000), -rnd(10000))) ], pan=0.0)) return p
def select(): return pick([GATE,ASR,ADSR,PERCUSSIVE])
def _tune(): harm = pick( [0.125, 0.25, 0.50, 0.75, 1.0, 1.333, 1.5, 2, 3, 4, 5, 6, 8, 12, 16]) return r(coin(0.75, harm, 0.1 + rnd(16)))
def chorus_generator(slot=127, genconfig={}): print("# Using chorus_generator") def get_config(key, dflt): return genconfig.get(key, dflt) ratios, biases = pick_frequencies(get_config("p-harmonic", 0.8)) op_amps = operator_amps() mod_scales = modulation_scales(0) ratios, biases, mod_scales = list(ratios), list(biases), list(mod_scales) for stk in "ABC": use_chorus = coin(0.6) if use_chorus: cop = {"A": 1, "B": 5, "C": 7}[stk] mod1 = {"A": 2, "B": 4, "C": 8}[stk] mod2 = {"A": 3, "B": 6, "C": None}[stk] ratios[cop - 1] = 0 biases[cop - 1] = coin(0.75, _round(rnd(2)), _round(rnd(7))) mod_scales[mod1 - 1] = pick((100, 100, 1000, 1000, 10000)) if (mod2 == 6 and coin(0.20)): mod_scales[mod2 - 1] = pick((100, 100, 1000, 1000, 10000)) envelopes = pick_envelopes(get_config("env-type-hint", ADSR), get_config("env-time-hint", ADSR), get_config("p-env-changeup", MEDIUM), get_config("p-env-changeup", MEDIUM), p_duplicate_carrier=0.35) env1, env2, env3, env4, env5, env6, env7, env8 = envelopes vf, vdly, vsens, vdepth = pick_vibrato() pfb = get_config("p-feedback", 0.1) afb = pick_stack_feedback(pfb) bfb = pick_stack_feedback(pfb) cfb = pick_stack_feedback(pfb) alfo = pick_stack_lfo() blfo = pick_stack_lfo() clfo = pick_stack_lfo() def openv(op, value): return env(op, value[0], value[1], value[2], value[3], value[4], value[5], value[6]) def opp(n): index = n - 1 return op(n, ratios[index], biases[index], op_amps[index], mod_scales[index], 0, 0, pick_velocity(), pick_op_lfo(), 0) p = algo( slot, "Random", amp=0.5, modDepth=_round(coin(0.75, 1.0, 0.5 + rnd(0.5))), external=[0.0, 0.0, 1.0], # [mod,pitch,scale] vibrato=vibrato(vf, vdly, vsens, vdepth), stackA=stack("A", True, op_amps[0], 60, feedback=afb[0], fb_env=afb[1], fb_lfo=afb[2], lfo_ratio=alfo[0], lfo_delay=alfo[1], lfo_wave=alfo[2]), stackB=stack("B", True, op_amps[4], 60, feedback=bfb[0], fb_env=bfb[1], fb_lfo=bfb[2], lfo_ratio=blfo[0], lfo_delay=blfo[1], lfo_wave=blfo[2]), stackC=stack("C", True, op_amps[6], 60, feedback=cfb[0], fb_env=cfb[1], fb_lfo=cfb[2], lfo_ratio=clfo[0], lfo_delay=clfo[1], lfo_wave=clfo[2]), env1=openv(1, env1), env2=openv(2, env2), env3=openv(3, env3), env4=openv(4, env4), env5=openv(5, env5), env6=openv(6, env6), env7=openv(7, env7), env8=openv(8, env8), op1=opp(1), op2=opp(2), op3=opp(3), op4=opp(4), op5=opp(5), op6=opp(6), op7=opp(7), op8=opp(8)) return p
def pick_lfo_frequency(): half = len(LFO_RATIOS) / 2 q1 = pick(LFO_RATIOS[:half])[0] q2 = pick(LFO_RATIOS)[0] q3 = coin(0.75, q1, q2) return round(float(q3), 4)
def _lfo_ratio(): low = LFO_RATIOS[:11] full = LFO_RATIOS return coin(0.75, pick(low), pick(full))
def pick_stack_lfo(): r = coin(0.75, pick(LFO_RATIOS[:14]), pick(LFO_RATIOS))[0] dly = _round(rnd(4)) wv = _round(rnd()) return r,dly,wv
def _principle_stack(): return pick("ABC")
def env_hint(): typ = pick(["adsr", "asr", "perc"]) tm = pick(["fast", "medium", "slow"]) return typ, tm
def _harmonic_ratio(): lst1 = [0.5] * 3 + [1.0, 2.0] * 8 + [3.0, 4.0] * 6 lst2 = lst1 * 2 + [0.75, 1.333] + [1.5] * 4 lst3 = lst2 * 2 + [5, 6, 6, 6] * 4 + [8, 8, 9, 10, 12, 16] * 2 + [7] return pick(lst3)
def pick_stack_lfo(): r = coin(0.75, pick(LFO_RATIOS[:14]), pick(LFO_RATIOS))[0] dly = _round(rnd(4)) wv = _round(rnd()) return r, dly, wv
def _pick_op_ratio(p_harmonic=0.75): return coin(p_harmonic, pick(HARMONICS), coin(0.75, 0.5 + rnd(3), 0.5 + rnd(8)))
def _ctune(): harm = pick([1, 1.333, 1.5, 2, 3, 4, 5, 6, 7, 8]) return r(coin(0.75, harm, 1 + rnd(8)))
def select(): return pick([GATE, ASR, ADSR, PERCUSSIVE])