def makeArps(seg, oct=3, reps=4): arp_degrees = [1,2,3,5,8,9,10] if dsp.randint(0,1) == 0: arp_degrees.reverse() arp_degrees = rotate(arp_degrees, vary=True) arp_notes = tune.fromdegrees(arp_degrees[:reps], octave=oct, root='e') arps = [] arp_count = 0 for arp_length in seg: arp_length /= 2 arp_pair = arp_notes[ arp_count % len(arp_notes) ], arp_notes[ (arp_count + 1) % len(arp_notes) ] stack = Waveset(rmx, limit=dsp.randint(5, 20), offset=dsp.randint(0, 100)) stack.normalize() arp_one = oscs.Pulsar2d(stack, windows=['tri'], freq=arp_pair[0]*dsp.choice([1,2]), pulsewidth=dsp.win('rnd', 0.1, 1)).play(arp_length).env('hannout').taper(0.01) * dsp.rand(0.02, 0.2) arp_two = oscs.Pulsar2d(stack, windows=['tri'], freq=arp_pair[1]*dsp.choice([1,2]), pulsewidth=dsp.win('rnd', 0.1, 1)).play(arp_length).env('hannout').taper(0.01) * dsp.rand(0.02, 0.2) arp_one.dub(arp_two) arps += [ arp_one ] arp_count += 2 return dsp.join(arps).env('rnd').pan(dsp.rand())
def make(drum, pat, lengths): events = [ [pat[i], lengths[i]] for i in range(len(pat)) ] if len(events) > 0: out = dsp.join([ drum(event[0] * 0.3, event[1]) for event in events ]) else: print(lengths, pat) out = dsp.buffer(length=sum(lengths)) return out
def makeGrains(snd): envs = ['tri', 'phasor', 'rsaw', 'sine', 'hann'] grains = [] for g in snd.grains(dsp.MS*20, dsp.MS*90): g = g.env('hann').pan(dsp.rand()).taper(dsp.MS*4) grains += [ g ] rgrains = [] while len(grains) > 0: r = grains.pop(dsp.randint(0, len(grains)-1)) rgrains += [ r ] out = dsp.join(rgrains) out = out.env(dsp.choice(envs)) return out
def hihat(amp, length): if amp == 0: return dsp.buffer(length=length) def hat(length): lowf = dsp.rand(6000, 11000) highf = dsp.rand(11000, 17000) if dsp.rand() > 0.5: length *= 0.05 out = bln(length, lowf, highf) out = out.env(dsp.choice(['rsaw', 'phasor', 'hannout'])) return out if dsp.rand() > 0.5: out = dsp.join([ hat(length / 2), hat(length / 2) ]) else: out = hat(length) return out
# Add a butterworth lowpass with a 3k cutoff -- multiply output by 0.5 to attenuate signal to 50% out = fx.lpf(out, 3000) * 0.5 out.write('docs/tutorials/renders/002-hats-slipping-on-ice.flac') def makekick(length=0.25): out = noise.bln('square', length, [dsp.rand(80, 100), dsp.rand(50, 100)], [dsp.rand(150, 200), dsp.rand(50, 70)]) out = fx.fold(out, amp=dsp.win('saw', 1, dsp.rand(6, 10))) out = fx.lpf(out, 200).vspeed([1, 0.5]) return out.env('pluckout').taper(0.02) * dsp.rand(0.6, 1) kick = dsp.join([makekick().pad(end=0.2) for _ in range(8)]) # render a few kicks kick.write('docs/tutorials/renders/002-kick.flac') def makeclap(length=dsp.MS * 80): lowhz = dsp.win('rnd', 3000, 6000) highhz = dsp.win('rnd', 2000, 8000) return noise.bln('tri', length, lowhz, highhz).env(pluckout) clap = dsp.join([makeclap().pad(end=0.2) for _ in range(8)]) # render a few claps clap.write('docs/tutorials/renders/002-clap.flac') from pippi import shapes
def stutter(sounds): grains = [] for g in sounds.grains(dsp.MS*1, dsp.MS*200): g.taper(dsp.MS*4).pad(end=dsp.MS*dsp.rand(50, 250)) grains += [ g ] return dsp.join(grains)