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
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
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))
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()
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))
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))