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_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))
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))
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 _env(n, time_hint, mode): times = [] for i in range(4): times.append(_env_time(time_hint)) bp = r(coin(0.75, 0.5 + rnd(0.5), rnd())) sus = r(coin(0.75, 0.5 + rnd(0.5), rnd())) mode = coin(0.90, mode, coin(0.50, 0, 1)) return env(n, times, [bp, sus], mode)
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 _env(n, time_hint, mode): times = [] for i in range(4): times.append(_env_time(time_hint)) bp = r(coin(0.75, 0.5+rnd(0.5), rnd())) sus = r(coin(0.75, 0.5+rnd(0.5), rnd())) mode = coin(0.90, mode, coin(0.50, 0, 1)) return env(n,times,[bp,sus],mode)
def percussion_envelope(time_hint): a = env_segment_time(0.05) d1 = env_segment_time(time_hint*0.5) d2 = env_segment_time(time_hint) r = env_segment_time(time_hint) bp = coin(0.75, 0.9+rnd(0.1), 0.5+rnd(0.5)) s = coin(0.75, min(0.5+rnd(0.5), bp), rnd(0.25)) hold = True return a,d1,d2,r,bp,s,hold
def addsr_envelope(time_hint): a = env_segment_time(time_hint) d1 = env_segment_time(time_hint) d2 = env_segment_time(time_hint) r = env_segment_time(time_hint) bp = coin(0.75, 0.9+rnd(0.1), 0.5+rnd(0.5)) s = coin(0.50, rnd(bp), rnd()) hold = False # coin(0.75, False, True) return a,d1,d2,r,bp,s,hold
def pitch_env(): rs = {} for a in (0,1,2,3,4): v = round(random_sign()*coin(0.5,0,rnd()),4) rs["pe_a%d" % a] = v for t in (1,2,3,4): v = round(rnd(MAX_ENV_SEGMENT), 4) rs["pe_t%d" % a] = v return rs
def pitch_env(): rs = {} for a in (0, 1, 2, 3, 4): v = round(random_sign() * coin(0.5, 0, rnd()), 4) rs["pe_a%d" % a] = v for t in (1, 2, 3, 4): v = round(rnd(MAX_ENV_SEGMENT), 4) rs["pe_t%d" % a] = v 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_stack_feedback(p_feedback): fb = env = lfo = 0.0 if coin(p_feedback): fb, env, lfo = coin( 0.75, # p "simple" feedback w/o modulation (rnd(2), 0.0, 0.0), (coin(0.33, rnd(), 0), coin(0.33, rnd(), 0), coin(0.33, rnd(), 0))) fb = _round(fb) env = _round(env) lfo = _round(lfo) return fb, env, lfo
def pick_stack_feedback(p_feedback): fb = env = lfo = 0.0 if coin(p_feedback): fb,env,lfo = coin(0.75, # p "simple" feedback w/o modulation (rnd(2),0.0,0.0), (coin(0.33, rnd(), 0), coin(0.33, rnd(), 0), coin(0.33, rnd(), 0))) fb = _round(fb) env = _round(env) lfo = _round(lfo) return fb,env,lfo
def pick_time(): if time_hint == FAST: rs = 0.0 + rnd(0.05) elif time_hint == MEDIUM: rs = 0.05 + rnd(0.5) elif time_hint == SLOW: rs = 0.5 + rnd(2) elif time_hint == GLACIAL: d = MAX_ENV_SEGMENT-2 rs = 2 + rnd(d) else: rs = rnd(MAX_ENV_SEGMENT) return round(rs,4)
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 pick_time(): if time_hint == FAST: rs = 0.0 + rnd(0.05) elif time_hint == MEDIUM: rs = 0.05 + rnd(0.5) elif time_hint == SLOW: rs = 0.5 + rnd(2) elif time_hint == GLACIAL: d = MAX_ENV_SEGMENT - 2 rs = 2 + rnd(d) else: rs = rnd(MAX_ENV_SEGMENT) return round(rs, 4)
def pick_env_segment_time(time_hint): if time_hint == ULTRA_FAST: rs = coin(0.75, 0.0, rnd(0.03)) elif time_hint == FAST: rs = rnd(0.1) elif time_hint == MEDIUM: rs = 0.1+rnd(0.5) elif time_hint == SLOW: rs = 0.5+rnd(6) else: rs = 4+rnd(MAX_ENV_SEGMENT_TIME-4) if coin(0.1): rs = pick_env_segment_time(pick_env_time_hint()) return rs
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 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 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 random_panner(slot=127, *_): static = coin(0.20) if static: pos = random_sign() p = panner(slot, "Random", amp=0, pos=pos, lfoDepth=0, xscale=0) else: pos = coin(0.75, 0.0, random_sign()) lfoFreq = coin(0.75, rnd(0.1), rnd(5)) lfoDepth = rnd() p = panner(slot, "Random", amp=0, pos=pos, lfoFreq=lfoFreq, lfoDepth=lfoDepth, xscale=0) return p
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 random_tremolo(slot=127, *_): freq = 0.01 + rnd(10) dpth = rnd() with_external = coin(0.25) if with_external: xdepth = coin(0.5, 0, rnd()) fm = coin(0.5, 0, rnd()) am = coin(0.5, 0, rnd()) p = trem(slot, "Random", amp=0, lfo = [freq, dpth], xtern = [xdepth, fm, am], limit = 1) else: p = trem(slot, "Random", amp=0, lfo = [freq, dpth], xtern = [0.0, 0.0, 0.0], limit = 1) return p
def pick_frequencies(p_harmonic=None): if p_harmonic is None: p_harmonic = coin(0.75, 0.90, rnd()) if verbose: print("Probability of harmonic frequencies: %s" % p_harmonic) acc,bcc = [],[] for i in range(8): acc.append(_pick_op_ratio(p_harmonic)) bcc.append(_pick_op_bias(p_harmonic)) return _round(acc),_round(bcc)
def pick_frequencies(p_harmonic=None): if p_harmonic is None: p_harmonic = coin(0.75, 0.90, rnd()) if verbose: print("Probability of harmonic frequencies: %s" % p_harmonic) acc, bcc = [], [] for i in range(8): acc.append(_pick_op_ratio(p_harmonic)) bcc.append(_pick_op_bias(p_harmonic)) return _round(acc), _round(bcc)
def pick_env_segment_time(hint=FULL, p_changeup=0.1): hint = coin(p_changeup, pick_env_time_hint(),hint) mn,mx = 0.0,MAX_ENV_SEGMENT try: mn,mx = {ULTRA_FAST : (0.00, 0.01), FAST : (0.00, 0.10), MEDIUM : (0.10, 1.0), SLOW : (1.0,4.0), GLACIAL : (4.0,MAX_ENV_SEGMENT)}[hint] except KeyError: pass return mn+rnd(mx-mn)
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 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 pick_env_segment_time(hint=FULL, p_changeup=0.1): hint = coin(p_changeup, pick_env_time_hint(), hint) mn, mx = 0.0, MAX_ENV_SEGMENT try: mn, mx = { ULTRA_FAST: (0.00, 0.01), FAST: (0.00, 0.10), MEDIUM: (0.10, 1.0), SLOW: (1.0, 4.0), GLACIAL: (4.0, MAX_ENV_SEGMENT) }[hint] except KeyError: pass return mn + rnd(mx - mn)
def env(op, pconfig={}): type_hint = env_type_hint(pconfig) time_hint = env_time_hint(pconfig) def pick_time(): if time_hint == FAST: rs = 0.0 + rnd(0.05) elif time_hint == MEDIUM: rs = 0.05 + rnd(0.5) elif time_hint == SLOW: rs = 0.5 + rnd(2) elif time_hint == GLACIAL: d = MAX_ENV_SEGMENT - 2 rs = 2 + rnd(d) else: rs = rnd(MAX_ENV_SEGMENT) return round(rs, 4) att = dcy1 = dcy2 = rel = 0.0 bp = sus = 1.0 mode = 0 if type_hint == PERCUSSIVE: att = round(coin(0.75, 0.0, rnd(0.05)), 4) dcy1 = 0.5 * pick_time() dcy2 = pick_time() rel = pick_time() bp = round(coin(0.75, 0.5 + rnd(0.5), rnd()), 4) sus = 0 mode = coin(0.75, 0, 1) elif type_hint == GATE: att = dcy1 = dcy2 = rel = 0.0 bp = sus = 1.0 mode = 0 elif type_hint == ASR: att = pick_time() rel = pick_time() dcy1 = dcy2 = 0 bp = sus = 1 mode = 0 else: att = pick_time() dcy1 = pick_time() dcy2 = pick_time() rel = pick_time() bp = round(coin(0.75, 0.5, rnd()), 4) sus = round(coin(0.75, rnd(bp), rnd()), 4) mode = coin(0.90, 0, 1) rs = { "op%d_attack" % op: att, "op%d_decay1" % op: dcy1, "op%d_decay2" % op: dcy2, "op%d_release" % op: rel, "op%d_breakpoint" % op: bp, "op%d_sustain" % op: sus, "op%d_env_mode" % op: mode } return rs
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 env(op,pconfig={}): type_hint = env_type_hint(pconfig) time_hint = env_time_hint(pconfig) def pick_time(): if time_hint == FAST: rs = 0.0 + rnd(0.05) elif time_hint == MEDIUM: rs = 0.05 + rnd(0.5) elif time_hint == SLOW: rs = 0.5 + rnd(2) elif time_hint == GLACIAL: d = MAX_ENV_SEGMENT-2 rs = 2 + rnd(d) else: rs = rnd(MAX_ENV_SEGMENT) return round(rs,4) att=dcy1=dcy2=rel=0.0 bp=sus=1.0 mode=0 if type_hint == PERCUSSIVE: att = round(coin(0.75, 0.0, rnd(0.05)),4) dcy1 = 0.5*pick_time() dcy2 = pick_time() rel = pick_time() bp = round(coin(0.75, 0.5+rnd(0.5), rnd()),4) sus = 0 mode = coin(0.75, 0, 1) elif type_hint == GATE: att=dcy1=dcy2=rel = 0.0 bp=sus = 1.0 mode = 0 elif type_hint == ASR: att = pick_time() rel = pick_time() dcy1=dcy2 = 0 bp=sus = 1 mode = 0 else: att = pick_time() dcy1 = pick_time() dcy2 = pick_time() rel = pick_time() bp = round(coin(0.75, 0.5, rnd()),4) sus = round(coin(0.75, rnd(bp), rnd()),4) mode = coin(0.90, 0, 1) rs = {"op%d_attack" % op : att, "op%d_decay1" % op : dcy1, "op%d_decay2" % op : dcy2, "op%d_release" % op : rel, "op%d_breakpoint" % op : bp, "op%d_sustain" % op : sus, "op%d_env_mode" % op : mode} return rs
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 lfos(pconfig={}): vfreq = pick_vibrato_frequency() lfo1 = pick_lfo_frequency() lfo2 = lfo1 while lfo2 == lfo1: lfo2 = pick_lfo_frequency() pvib = pconfig.get("p-vibrato") rs = {"vfreq" : vfreq, "vdelay" : round(rnd(4),4), "vsens" : round(coin(0.75, rnd(0.3),rnd()),4), "vdepth" : round(coin(pvib, rnd(),0.0),4), "lfo1_ratio" : lfo1, "lfo2_ratio" : lfo2, "lfo1_delay" : round(coin(0.5, 0.0, rnd()), 4), "lfo2_delay" : round(coin(0.5, 0.0, rnd()), 4)} return rs
def lfos(pconfig={}): vfreq = pick_vibrato_frequency() lfo1 = pick_lfo_frequency() lfo2 = lfo1 while lfo2 == lfo1: lfo2 = pick_lfo_frequency() pvib = pconfig.get("p-vibrato") rs = { "vfreq": vfreq, "vdelay": round(rnd(4), 4), "vsens": round(coin(0.75, rnd(0.3), rnd()), 4), "vdepth": round(coin(pvib, rnd(), 0.0), 4), "lfo1_ratio": lfo1, "lfo2_ratio": lfo2, "lfo1_delay": round(coin(0.5, 0.0, rnd()), 4), "lfo2_delay": round(coin(0.5, 0.0, rnd()), 4) } return rs
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 car(op, ff, ratios, envs, amp): env = envs[op-1] mode = coin(0.50, 0, 1) modDepth = coin(0.75, rnd(4), rnd(8)) if mode: modDepth /= 2.0 rs = carrier(op, formant = ff[op-1], ratio = ratios[op-1], mode = mode, velocity = coin(0.75, rnd(), 0), tremolo = coin(0.75, 0, coin(0.75, rnd(0.3), rnd())), modDepth = modDepth, attack = env[0], decay = env[1], sustain = env[2], release = env[3], lag = coin(0.5, 0, rnd()), key = 60, leftScale = 0, rightScale = 0, x = 0.0, amp = amp) return rs
def car(op, ff, ratios, envs, amp): env = envs[op - 1] mode = coin(0.50, 0, 1) modDepth = coin(0.75, rnd(4), rnd(8)) if mode: modDepth /= 2.0 rs = carrier(op, formant=ff[op - 1], ratio=ratios[op - 1], mode=mode, velocity=coin(0.75, rnd(), 0), tremolo=coin(0.75, 0, coin(0.75, rnd(0.3), rnd())), modDepth=modDepth, attack=env[0], decay=env[1], sustain=env[2], release=env[3], lag=coin(0.5, 0, rnd()), key=60, leftScale=0, rightScale=0, x=0.0, amp=amp) return rs
def modamp(): return _round(rnd())
def pick_amps(): q = coin(0.1, 1.0, coin(0.75, 0.3+rnd(0.7), coin(0.5, rnd(0.3),0))) r = coin(0.1, 1.0, coin(0.75, 0.3+rnd(0.7), coin(0.5, rnd(0.3),0))) return 1.0,_round(r),_round(q)
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 _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_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 basic_generator(slot=127, genconfig={}): print("# Using basic_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(get_config("p-deep-modulation", 0.1)) envelopes = pick_envelopes(get_config("env-type-hint", ADSR), get_config("env-time-hint", ADSR), get_config("p-env-changeup", 0.1), get_config("p-env-changeup", 0.1), 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_op_lfo(): return coin(0.2, _round(rnd()), 0)
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 cformants(): f1 = int(100 + rnd(500)) f2 = int(f1 + 100 + rnd(500)) f3 = int(f2 + 100 + rnd(1500)) return f1, f2, f3
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 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 _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 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 pick_vibrato(): freq = _round(coin(0.75, 2 + rnd(5), coin(0.80, rnd(10), rnd(99)))) dly = _round(rnd(4)) sens = _round(coin(0.90, rnd(0.2), rnd())) depth = _round(coin(0.75, rnd(0.5), 0)) return freq, dly, sens, depth