Esempio n. 1
0
    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')
Esempio n. 2
0
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
Esempio n. 3
0
 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')
Esempio n. 4
0
    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')
Esempio n. 5
0
    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')
Esempio n. 6
0
    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')
Esempio n. 7
0
 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')
Esempio n. 8
0
    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')
Esempio n. 9
0
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
Esempio n. 10
0
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
Esempio n. 11
0
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
Esempio n. 12
0
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')
Esempio n. 13
0
def execute(db, length=10):
    return oscs.Osc('rnd', freq=dsp.rand(50, 500)).play(length) * 0.2
Esempio n. 14
0
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
Esempio n. 15
0
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)
Esempio n. 16
0
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)
Esempio n. 17
0
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
Esempio n. 18
0
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,
Esempio n. 19
0
 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')
Esempio n. 20
0
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
Esempio n. 21
0
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))
Esempio n. 22
0
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)