Пример #1
0
def stretch(snd, length=None, speed=None, grain_size=20):
    """ Crude granular time stretching and pitch shifting """

    original_length = dsp.flen(snd)

    if speed is not None:
        snd = dsp.transpose(snd, speed)

    current_length = dsp.flen(snd)

    if original_length != current_length or length is not None:
        grain_size = dsp.mstf(grain_size)

        numgrains = length / (grain_size / 2)
        numgrains = numgrains if numgrains > 0 else 1

        block_size = current_length / numgrains

        grains = []
        original_position = 0
        count = 0

        while count <= numgrains:
            grain = dsp.cut(snd, original_position, grain_size)

            grains += [ grain ]

            original_position += block_size
            count += 1

        snd = dsp.cross(grains, dsp.ftms(grain_size / 2))

    return snd
Пример #2
0
def stretch(snd, length=None, speed=None, grain_size=20):
    """ Crude granular time stretching and pitch shifting """

    original_length = dsp.flen(snd)

    if speed is not None:
        snd = dsp.transpose(snd, speed)

    current_length = dsp.flen(snd)

    if original_length != current_length or length is not None:
        grain_size = dsp.mstf(grain_size)

        numgrains = length / (grain_size / 2)
        numgrains = numgrains if numgrains > 0 else 1

        block_size = current_length / numgrains

        grains = []
        original_position = 0
        count = 0

        while count <= numgrains:
            grain = dsp.cut(snd, original_position, grain_size)

            grains += [grain]

            original_position += block_size
            count += 1

        snd = dsp.cross(grains, dsp.ftms(grain_size / 2))

    return snd
Пример #3
0
def play(args):
    length = dsp.stf(20)
    volume = 0.1 
    octave = 4 
    note = 'd'
    quality = tune.major
    m = 1
    width = 0
    waveform = 'sine'

    harmonics = [1,2]
    scale = [1,5,8]
    wtypes = ['sine', 'phasor', 'line', 'saw']
    ratios = tune.terry

    for arg in args:
        a = arg.split(':')

        if a[0] == 't':
            length = dsp.stf(float(a[1]))

        if a[0] == 'v':
            volume = float(a[1]) / 100.0

        if a[0] == 'o':
            octave = int(a[1])

        if a[0] == 'n':
            note = a[1]

        if a[0] == 'm':
            m = float(a[1])

        if a[0] == 'w':
            width = dsp.mstf(float(a[1]))

        if a[0] == 'q':
            if a[1] == 'M':
                quality = tune.major
            elif a[1] == 'm':
                quality = tune.minor
            else:
                quality = tune.major

        if a[0] == 'h':
            harmonics = [int(s) for s in a[1].split('.')]

        if a[0] == 'g':
            glitch = True

        if a[0] == 'wf':
            waveform = a[1]

        if a[0] == 'tr':
            if a[1] == 'young':
                ratios = tune.young
            elif a[1] == 'terry':
                ratios = tune.terry


    tones = []
    m *= 1.0
    for i in range(dsp.randint(2,4)):
        freq = tune.step(i, note, octave, dsp.randshuffle(scale), quality, ratios)

        snds = [ dsp.tone(length, freq * h, waveform) for h in harmonics ]
        for snd in snds:
            snd = dsp.vsplit(snd, dsp.mstf(10 * m), dsp.mstf(100 * m))
            if width != 0:
                for ii, s in enumerate(snd):
                    olen = dsp.flen(s)
                    s = dsp.cut(s, 0, width)
                    s = dsp.pad(s, 0, olen - dsp.flen(s)) 
                    snd[ii] = s

            snd = [ dsp.env(s, dsp.randchoose(wtypes)) for s in snd ]
            snd = [ dsp.pan(s, dsp.rand()) for s in snd ]
            snd = [ dsp.amp(s, dsp.rand()) for s in snd ]
            snd = ''.join(snd)

            tones += [ snd ]

    out = dsp.mix(tones)
    out = dsp.env(out, 'gauss')

    return dsp.cache(dsp.amp(out, volume))
Пример #4
0
import pyaudio
import wave
import sys
import dsp

chunk = 1024

d = dsp.tone(dsp.stf(10), dsp.randint(100, 800))

p = pyaudio.PyAudio()

# open stream
stream = p.open(format = p.get_format_from_width(2),
                channels = 2,
                rate = 44100,
                output = True)

# read data
data = dsp.cut(d, dsp.randint(0, 100) * chunk, chunk) 

#play stream
for i in range(1100):
    stream.write(data)
    data = dsp.cut(d, i * chunk, chunk) 

stream.close()
p.terminate()
Пример #5
0
def play(args):
    snd = False
    reps = 8
    length = dsp.stf(20)
    volume = 0.1 
    octave = 4 
    note = 'd'
    quality = tune.major
    m = 1
    width = 0
    waveform = 'sine'

    scale = [1,5,8]
    wtypes = ['sine', 'phasor', 'line', 'saw']

    for arg in args:
        a = arg.split(':')

        if a[0] == 't':
            length = int(a[1])

        if a[0] == 'v':
            volume = float(a[1]) / 100.0

        if a[0] == 'r':
            reps = int(a[1])

        if a[0] == 'n':
            note = a[1]

        if a[0] == 'm':
            m = float(a[1])

        if a[0] == 'w':
            width = dsp.mstf(float(a[1]))

        if a[0] == 'q':
            if a[1] == 'M':
                quality = tune.major
            elif a[1] == 'm':
                quality = tune.minor
            else:
                quality = tune.major

        if a[0] == 'g':
            glitch = True

        if a[0] == 's':
            if a[1] == 'c':
                snd = dsp.read('sounds/clapshake.wav').data
            elif a[1] == 'h':
                snd = dsp.read('sounds/hihat.wav').data
            elif a[1] == 's':
                snd = dsp.read('sounds/snare.wav').data
            elif a[1] == 'k':
                snd = dsp.read('sounds/kick.wav').data
            else:
                snd = dsp.read('sounds/hihat.wav').data


    out = ''

    if(w <= 11):
        w = 11

    width = dsp.mstf(t)
    for h in range(reps):
        s = dsp.cut(snd, dsp.randint(0, 100), w)
        out += dsp.pad(s, 0, width - dsp.flen(s))
    
    out = dsp.env(out, 'gauss')

    return dsp.cache(dsp.amp(out, volume))
Пример #6
0
def play(args):
    length = dsp.stf(20)
    volume = 0.2 
    octave = 2 
    note = 'd'
    quality = tune.major
    glitch = False
    waveform = 'sine'
    ratios = tune.terry

    harmonics = [1,2]
    scale = [1,8]
    wtypes = ['sine', 'phasor', 'line', 'saw']

    for arg in args:
        a = arg.split(':')

        if a[0] == 't':
            length = dsp.stf(float(a[1]))

        if a[0] == 'v':
            volume = float(a[1]) / 100.0

        if a[0] == 'o':
            octave = int(a[1])

        if a[0] == 'n':
            note = a[1]

        if a[0] == 'q':
            if a[1] == 'M':
                quality = tune.major
            elif a[1] == 'm':
                quality = tune.minor
            else:
                quality = tune.major

        if a[0] == 'tr':
            if a[1] == 'young':
                ratios = tune.young
            elif a[1] == 'terry':
                ratios = tune.terry

        if a[0] == 'h':
            harmonics = [int(s) for s in a[1].split('.')]

        if a[0] == 'g':
            glitch = True

        if a[0] == 'wf':
            waveform = a[1]

    tones = []
    for i in range(dsp.randint(2,4)):
        freq = tune.step(i, note, octave, dsp.randshuffle(scale), quality, ratios)

        snds = [ dsp.tone(length, freq * h, waveform) for h in harmonics ]

        snds = [ dsp.env(s, dsp.randchoose(wtypes), highval=dsp.rand(0.2, 0.4)) for s in snds ]
        snds = [ dsp.pan(s, dsp.rand()) for s in snds ]

        tones += [ dsp.mix(snds) ]

    out = dsp.mix(tones)

    if glitch:
        inlen = dsp.flen(out) * 0.25
        instart = 0

        midlen = dsp.flen(out) * 0.5
        midstart = inlen

        endlen = dsp.flen(out) - (inlen + midlen)
        endstart = inlen + midlen
        
        outin = dsp.cut(out, instart, inlen)
        outmid = dsp.cut(out, midstart, midlen)
        outend = dsp.cut(out, endstart, endlen)

        out = "%s%s%s" % (dsp.env(outin, 'line'), outmid, dsp.env(outend, 'phasor'))
    else:
        out = dsp.env(out, 'gauss')

    return dsp.cache(dsp.amp(out, volume))