def alias(snd, passthru=False, envelope='flat', split_size=0): """ A simple time domain bitcrush-like effect. The sound is cut into blocks between 1 and 64 frames in size if split_size is zero, otherwise split_size is the number of frames in each block. Every other block is discarded, and each remaining block is repeated in place. Set passthru to True to return the sound without processing. (Can be useful when processing grains in list comprehensions.) By default, a random amplitude envelope is also applied to the final sound. """ if passthru: return snd if envelope == 'flat': envelope = False elif envelope is None: envelope = 'random' if split_size == 0: split_size = dsp.WINDOW_SIZE / dsp.randint(1, dsp.WINDOW_SIZE) packets = dsp.split(snd, split_size) packets = [p * 2 for i, p in enumerate(packets) if i % 2] out = ''.join(packets) if envelope: out = dsp.env(out, envelope) return out
def alias(snd, passthru=False, envelope='flat', split_size=0): """ A simple time domain bitcrush-like effect. The sound is cut into blocks between 1 and 64 frames in size if split_size is zero, otherwise split_size is the number of frames in each block. Every other block is discarded, and each remaining block is repeated in place. Set passthru to True to return the sound without processing. (Can be useful when processing grains in list comprehensions.) By default, a random amplitude envelope is also applied to the final sound. """ if passthru: return snd if envelope == 'flat': envelope = False elif envelope is None: envelope = 'random' if split_size == 0: split_size = dsp.WINDOW_SIZE / dsp.randint(1, dsp.WINDOW_SIZE) packets = dsp.split(snd, split_size) packets = [p*2 for i, p in enumerate(packets) if i % 2] out = ''.join(packets) if envelope: out = dsp.env(out, envelope) return out
def do_s(self, cmd): cmds = cmd.split(" ") channel = self.channels[int(cmds[0])] try: channel[0].fadeout(1500 + dsp.randint(0, 500)) self.voices.append((channel[0].get_sound(), channel[1], channel[2])) except AttributeError: pass self.channels.remove(channel)
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(dsp.rand(5, 10)) volume = 0.2 octave = 2 note = 'd' quality = tune.major reps = dsp.randint(3, 11) glitch = False superglitch = False pulse = False ratios = tune.terry rhodes = dsp.read('sounds/220rhodes.wav').data #scale = [1,3,5,4] scale = [1,5,8,6] 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] == 'r': reps = int(a[1]) if a[0] == 'p': pulse = True if a[0] == 'g': glitch = True if a[0] == 'gg': glitch = True superglitch = True if a[0] == 'tr': if a[1] == 'young': ratios = tune.young elif a[1] == 'terry': ratios = tune.terry if a[0] == 's': scale = [int(s) for s in a[1].split('.')] out = '' for i in range(reps): freq = tune.step(i, note, octave, scale, quality, ratios) diff = freq / 440.0 n = dsp.transpose(rhodes, diff) n = dsp.fill(n, length) o = [dsp.tone(length, freq * i * 0.5) for i in range(4)] o = [dsp.env(oo) for oo in o] o = [dsp.pan(oo, dsp.rand()) for oo in o] o = dsp.mix([dsp.amp(oo, dsp.rand(0.05, 0.1)) for oo in o]) out += dsp.mix([n, o]) if glitch == True: if superglitch == True: mlen = dsp.mstf(100) else: mlen = dsp.flen(out) / 8 out = dsp.vsplit(out, dsp.mstf(1), mlen) out = [dsp.pan(o, dsp.rand()) for o in out] out = ''.join(dsp.randshuffle(out)) if pulse == True: plen = dsp.mstf(dsp.rand(80, 500)) out = dsp.split(out, plen) mpul = len(out) / dsp.randint(4, 8) out = [dsp.env(o) * mpul for i, o in enumerate(out) if i % mpul == 0] opads = dsp.wavetable('sine', len(out), dsp.rand(plen * 0.25, plen)) out = [dsp.pad(o, 0, int(opads[i])) for i, o in enumerate(out)] out = dsp.env(''.join(out)) 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))