def test_ms(self): snd = dsp.read('tests/sounds/guitar1s.wav') ms = fx.ms_encode(snd) lr = fx.ms_decode(ms) lr.write('tests/renders/fx_ms_parity.wav') snd1 = oscs.Osc('sine', freq=200).play(1).pan(0) snd2 = oscs.Osc('tri', freq=201).play(1).pan(1) out = fx.ms_decode(snd1 & snd2) out.write('tests/renders/fx_ms_detune.wav')
def rhodes(total_time, freq=220.0, ampscale=0.5): freq *= 2**dsp.randint(0, 2) partials = [ # Multiple, amplitude, duration [1, 0.6, 1.0], [2, 0.25, 0.35], [3, 0.08, 0.15], [4, 0.005, 0.04], ] layers = [] for plist in partials: #env_length = (total_time * plist[2] * 2) / 32 partial = oscs.Osc('sine', freq=plist[0] * freq, amp=plist[1] * ampscale).play(total_time).env('hannout') #partial = dsp.split(partial, 32) #partial = [ dsp.amp(partial[i], wtable[i]) for i in range(len(partial)) ] #layer = ''.join(partial) layers += [partial] out = dsp.mix(layers) n = noise.bln('sine', out.dur, 2000, 20000) * 0.005 out = dsp.mix([out, n]) return out
def test_upsample(self): length = 8 oversample = 1 sweep = np.logspace(0, 9, 512 * length, base=2) * 24 snd = oscs.Osc('sine', freq=sweep, samplerate=24000).play(length) snd = fx.upsample(snd, oversample) snd.write('tests/renders/fx_upsample.wav')
def test_decimate(self): length = 4 oversample = 5 sweep = np.logspace(0, 9 + oversample, 512 * length, base=2) * 40 tone = oscs.Osc('sine', freq=sweep, samplerate=(48000 * 2**oversample)).play(length) snd = fx.decimate(tone, oversample) snd.write('tests/renders/fx_decimate.wav')
def test_widen(self): snd = dsp.read('tests/sounds/linux.wav') out = fx.widen(snd, dsp.win('phasor', 0, 1)) out.write('tests/renders/fx_widen_linux.wav') osc = oscs.Osc('sine', amp=0.2) out = osc.play(snd.dur) out = fx.widen(out, dsp.win('phasor', 0, 1)) out.write('tests/renders/fx_widen_sine.wav')
def test_fold(self): amp = dsp.win('hannin', 1, 10) snd = dsp.read('tests/sounds/guitar1s.wav') out = fx.fold(snd, amp) out.write('tests/renders/fx_fold_guitar.wav') snd = oscs.Osc('sine', freq=200).play(1) out = fx.fold(snd, amp) out.write('tests/renders/fx_fold_sine.wav')
def test_repitch(self): length = .25 oversample = 1 sweep = np.logspace(0, 9, 512, base=2) * 24 osc = oscs.Osc('sine', freq=sweep, samplerate=12000).play(length) sample = dsp.read('tests/sounds/guitar1s.wav') snd = fx.repitch(sample, 4, 20) snd.write('tests/renders/fx_resample_up.wav') snd = fx.repitch(sample, 1 / 4, 20) snd.write('tests/renders/fx_resample_down.wav') snd = fx.resample(osc, 4, 20) snd.write('tests/renders/fx_resample_upsample.wav')
def test_crossover(self): snd = dsp.read('tests/sounds/linux.wav') amount = dsp.win('phasor', 0, 1) smooth = 0.3 fade = dsp.win('rsaw', 0, 1) out = fx.crossover(snd, amount, smooth, fade) out.write('tests/renders/fx_crossover_linux.wav') osc = oscs.Osc('sine', amp=0.2) out = osc.play(snd.dur) out = fx.crossover(out, amount, smooth, fade) out.write('tests/renders/fx_crossover_sine.wav')
def play(ctx): osc = oscs.Osc('tri') while True: ctx.log('playing') if hasattr(ctx.bus, 'input_pitch'): hz = ctx.bus.input_pitch else: hz = random.random() * 3 + 200 ctx.log('play freq %s' % hz) out = osc.play(freq=hz, length=64) out = out * 0.25 yield out
def play(ctx): length = random.triangular(0.1, 0.2) freq = ctx.bus.input_pitch amp = ctx.bus.input_amp * 2 pulsewidth = 1 osc = oscs.Osc(dsp.TRI, pulsewidth=pulsewidth) out = osc.play(length=length, freq=freq, amp=amp) out = out.adsr(0.005, 0.01, 0.35, 0.05) out = out.pan(random.random()) if random.random() > 0.15: out = makecloud(out) yield out
def make_note(freq, lfo_freq, amp, length): length = random.triangular(length, length * 2) numtables = random.randint(1, random.randint(3, 12)) lfo = random.choice([dsp.SINE, dsp.RSAW, dsp.TRI, dsp.PHASOR]) wavetables = [ random.choice([dsp.SINE, dsp.SQUARE, dsp.TRI, dsp.SAW]) for _ in range(numtables) ] osc = oscs.Osc(wavetables, lfo=lfo) freq = freq * random.choice([0.5, 1]) note = osc.play(length=length, freq=freq, amp=amp, mod_freq=lfo_freq) note = note.env(dsp.RND).env(dsp.PHASOR).pan(random.random()) return note
import random from pippi import dsp, oscs # Create a list of random values, padded # with zeros on either end to use as the # waveform for the wavetable osc wavetable = [0] + [ random.triangular(-1, 1) for _ in range(20) ] + [0] # Create an osc with an initial freq of 80hz osc = oscs.Osc(80, wavetable=wavetable) # Render 3 seconds of audio out = osc.play(44100 * 3) # Write the audio to a soundfile out.write('simple_custom_wavetable.wav')
def execute(db, length=10): return oscs.Osc('rnd', freq=dsp.rand(50, 500)).play(length) * 0.2
def play(ctx): osc = oscs.Osc(dsp.RND) yield osc.play(random.triangular(0.5, 2), freq=random.triangular( 60, 800)).adsr(0.03, 0.1, 0.5, 0.1) * 0.5
import random from pippi import dsp, oscs import os PATH = os.path.dirname(os.path.realpath(__file__)) print(__file__) # Create a list of random values, padded # with zeros on either end to use as the # waveform for the wavetable osc wavetable = [0] + [random.triangular(-1, 1) for _ in range(20)] + [0] # Create an osc with an initial freq of 80hz osc = oscs.Osc(wavetable=wavetable, freq=80) # Render 3 seconds of audio out = osc.play(3) # Write the audio to a soundfile out.write('%s/simple_custom_wavetable.wav' % PATH)
from pippi import dsp, oscs, tune, rhythm, wavetables import random osc = oscs.Osc() out = dsp.buffer(1) kick = dsp.read('sounds/909kick.wav') hat = dsp.read('sounds/hat.wav') snare = dsp.read('sounds/606snare.wav') numbars = 64 * 4 chords = 'ii ii ii V9'.split(' ') chords2 = 'i i6 IV IV'.split(' ') def rush(snd): out = dsp.buffer() length = random.randint(4410, 44100 * 3) numbeats = random.randint(16, 64) reverse = random.choice([True, False]) wintype = random.choice( ['sine', 'tri', 'kaiser', 'hann', 'blackman', None]) wavetable = None if wintype is not None else [ random.random() for _ in range(random.randint(3, 10)) ] pattern = rhythm.curve(numbeats=numbeats, wintype=wintype, length=length, reverse=reverse, wavetable=wavetable) minspeed = random.triangular(0.15, 2)
def kick(amp, length): if amp == 0: return dsp.buffer(length=length) out = oscs.Osc('sine', freq=dsp.win('rsaw', 60, 160)).play(length).env('phasor') return out
out = dsp.buffer(length=40) freqs = tune.fromdegrees([1, 2, 3, 4, 5, 6, 7, 8, 9], octave=1, root='d') print('Creating 5,000 1ms - 100ms long pulsar notes in a 40 second buffer...') for _ in range(1000): pos = random.triangular(0, 39.5) length = random.triangular(0.001, 0.1) # Pulsar wavetable constructed from a random set of linearly interpolated points & a randomly selected window # Frequency modulated between 1% and 300% with a randomly generated wavetable LFO between 0.01hz and 30hz # with a random, fixed-per-note pulsewidth wavetable = [0] + [ random.triangular(-1, 1) for _ in range(random.randint(3, 100)) ] + [0] mod = [random.triangular(0, 1) for _ in range(random.randint(3, 20))] osc = oscs.Osc(wavetable, window=dsp.RND, mod=mod) pulsewidth = random.random() freq = random.choice(freqs) * 2**random.randint(0, 10) mod_freq = random.triangular(0.01, 30) mod_range = random.triangular(0, random.choice([0.03, 0.02, 0.01, 3])) amp = random.triangular(0.05, 0.1) if mod_range > 1: amp *= 0.5 note = osc.play(length, freq, amp, pulsewidth, mod_freq=mod_freq,
def test_envelope_follower(self): snd = dsp.read('tests/sounds/linux.wav') osc = oscs.Osc('sine') carrier = osc.play(snd.dur) out = carrier * snd.toenv() out.write('tests/renders/fx_envelope_follower.wav')
def make_note(freq, amp, length): lfo = dsp.SINE lfo_freq = random.triangular(0.001, 15) # Frequency modulation wavetable mod = wavetables.randline(random.randint(10, 30)) # Frequency of the freq mod wavetable mod_freq = random.triangular(0.001, 2) # Range / depth of the freq mod wavetable mod_range = random.triangular(0, 0.025) pulsewidth = random.random() # Fill up a stack of wavetables to give to the Osc. # The lfo wavetable above will control the morph position # in the wavetable stack during the render. stack = [] numtables = random.randint(3, 30) for _ in range(numtables): if random.random() > 0.25: stack += [ random.choice([dsp.SINE, dsp.TRI]) ] else: stack += [ wavetables.randline(random.randint(3, random.randint(5, 50))) ] # ADSR params a = random.triangular(0.1, 1) d = random.triangular(0.01, 3) s = random.triangular(0.03, 0.15) r = random.triangular(0.1, 10) # Render a note note = oscs.Osc( stack=stack, window=dsp.SINE, mod=mod, pulsewidth=pulsewidth, mod_freq=mod_freq, mod_range=mod_range, lfo=lfo, lfo_freq=lfo_freq ).play(length=length, freq=freq, amp=amp).adsr(a=a,d=d,s=s,r=r) # Sometimes mix in a granulated layer of the note if random.random() > 0.75: a = random.triangular(5, 10) d = random.triangular(0.1, 20) s = random.triangular(0.01, 0.1) r = random.triangular(5, 10) minlength = (note.dur/50)*1000 maxlength = (note.dur/3)*1000 arp = note.cloud(length * random.triangular(1.5, 3), window=dsp.HANN, grainlength=wavetables.randline(random.randint(10, 100), lowvalue=minlength, highvalue=maxlength), spread=1, speed=random.choice([1, 1.5, 2]), jitter=random.triangular(0, 0.05), grid=wavetables.randline(random.randint(5, 50), lowvalue=0.1, highvalue=random.triangular(0.25, 0.75)), ).adsr(a,d,s,r) note.dub(arp, 0) return note
out = dsp.buffer() chords = 'ii vi V7 I69' dubhead = 0 for chord in chords.split(' ') * 8: chordlength = random.triangular(2, 3) # in seconds freqs = tune.chord(chord, key='e', octave=2) numnotes = random.randint(3, 6) notes = [] for _ in range(numnotes): notelength = random.triangular(0.1, 2) freq = random.choice(freqs) amp = random.triangular(0.1, 0.25) note = oscs.Osc(wavetable=make_wavetable()).play(notelength, freq, amp) note = note.env(dsp.RND) note = note.taper(0.01) note = note.pan(random.random()) out.dub(note, dubhead + random.triangular(0, 0.1)) dubhead += chordlength - (chordlength * 0.1) out.write('synth_chords.wav') elapsed_time = time.time() - start_time print('Render time: %s seconds' % round(elapsed_time, 2)) print('Output length: %s seconds' % round(out.dur, 2))
import random from pippi import dsp, oscs, tune def make_wavetable(): wtsize = random.randint(20, 100) wavetable = [0] + [random.triangular(-1, 1) for _ in range(wtsize - 2)] + [0] return wavetable osc = oscs.Osc(wavetable=make_wavetable()) out = dsp.buffer() chords = 'ii vi V7 I69' dubhead = 0 for chord in chords.split(' '): chordlength = int(random.triangular(44100 * 2, 44100 * 3)) freqs = tune.chord(chord, key='e', octave=2) numnotes = random.randint(3, 6) notes = [] for _ in range(numnotes): freq = random.choice(freqs) notelength = int(random.triangular(44100 * 3, 44100 * 4)) osc.freq = freq osc.wavetable = make_wavetable() note = osc.play(notelength)