def play(ctl): #out = snds.load('genie/piano.wav') lenrange = 300 minlen = 1 if dsp.rand() > 0.5: lengths = dsp.breakpoint([dsp.rand(0, 1) for _ in range(5)], 50) else: lengths = dsp.wavetable('sine', 50) lengths = [dsp.mstf(l * lenrange + minlen) for l in lengths] out = '' for length in lengths: freq = tune.ntf('f', octave=dsp.randint(2, 5)) if dsp.rand() > 10.85: length = dsp.stf(dsp.rand(0.5, 3)) freq = dsp.randchoose( tune.fromdegrees([1, 3, 4, 5, 6], octave=4, root='f')) out += keys.pulsar(freq=freq, length=length, env='phasor') if dsp.rand() > 10.75: freq = dsp.randchoose( tune.fromdegrees([1, 3, 4, 5, 6], octave=4, root='f')) return out
def makeBloop(length, i, bfreqs): bfreq = dsp.randchoose(bfreqs) if dsp.rand() > 0.5: blength = length if length <= dsp.mstf(80) else dsp.mstf(dsp.rand(40, 80)) else: blength = length wf = dsp.breakpoint([0] + [ dsp.rand(-1,1) for _ in range(dsp.randint(8, 20)) ] + [0], 512) bloop = dsp.mix([ keys.pulsar(bf, blength, wf=wf, amp=dsp.rand(0.1, 0.5)) for bf in [ bfreq, bfreq / 2, bfreq * 2 ] ]) bloop = dsp.env(bloop, 'phasor') bloop = dsp.fill(bloop, length, silence=True) return bloop
def makeSwells(cname, numswells, length, key='e', octave=1): swells = [] freqs = tune.chord(cname, key, octave) root = tune.ntf(key, octave) # Naive pitch wrapping for i, freq in enumerate(freqs): if freq > root * 2.5: freqs[i] = freq * 0.5 for _ in range(numswells): slength = dsp.randint((length / numswells) * 0.85, length / numswells) swell = [ keys.pulsar(freq, slength, drift=dsp.rand(0.001, 0.01), speed=dsp.rand(0.1, 0.5), amp=dsp.rand(0.2, 0.5)) for freq in freqs ] swell = dsp.mix(swell) swell = dsp.env(swell, 'hann') swell = dsp.taper(swell, 30) swells += [ swell ] swells = [ dsp.fill(swell, length / numswells, silence=True) for swell in swells ] return ''.join(swells)
def play(ctl): mpk = ctl.get('midi').get('mpk') ccs = [ i + 48 for i in range(24) ] notes = [] for cc in ccs: if mpk.get(cc) < 1: notes += [ cc ] ssnd = dsp.read('/home/hecanjog/sounds/drums/78sd.wav').data ssnd = dsp.read('jesssnare.wav').data hsnd = dsp.read('/home/hecanjog/sounds/drums/Shaker.wav').data ksnd = dsp.read('/home/hecanjog/sounds/drums/Drybd2.wav').data #ksnd = dsp.read('jesskick.wav').data beat = dsp.bpm2frames(90) #beat = dsp.mstf(290 * 2) length = beat * 4 hat = 'xxx ' kick = 'x ' snare = ' x ' #snare = ' x xx' #snare = ' ' def makeHat(length, i, amp): h = hsnd h = dsp.env(h, 'phasor') h = dsp.pad(h, 0, length - dsp.flen(h)) return h def makeKick(length, i, amp): k = dsp.mix([ ksnd, drums.sinekick(length, i, amp) ]) #k = dsp.env(ksnd, 'phasor') k = dsp.fill(k, length, silence=True) k = dsp.amp(k, 1) return k def makeSnare(length, i, amp): s = ssnd s = dsp.amp(s, 1.2) s = dsp.transpose(s, dsp.rand(1.5, 3)) s = dsp.fill(s, length, silence=True) #ss = dsp.drift(s, dsp.rand(0.001, 0.1)) #s = dsp.mix([s, ss]) return s #hats = drums.parsebeat(hat, 16, beat, length, makeHat, 25) hats = drums.parsebeat(hat, 16, beat, length, makeHat, 0) kicks = drums.parsebeat(kick, 16, beat, length, makeKick, 0) snares = drums.parsebeat(snare, 8, beat, length, makeSnare, 0) out = dsp.mix([hats,kicks,snares]) shuf = True shuf = False if shuf: out = dsp.split(out, beat) out = dsp.randshuffle(out) out = ''.join(out) out = dsp.amp(out, 2) cuts = True if dsp.rand() > 0.5 else False cuts = True #cuts = False if cuts: o = dsp.split(out, beat / 2) o = dsp.randshuffle(o) o = [ dsp.amp(oo, dsp.rand(0, 2.5)) for oo in o ] o = [ dsp.env(oo, 'random') for oo in o ] out = dsp.mix([ ''.join(o), out ]) dsp.log(notes) synthy = False #synthy = True if synthy == True: s = '' for ii in range(dsp.flen(out) / (beat/2)): layers = [] if len(notes) > 0: scale = [ n - 47 for n in notes ] scale = [1,5,8,12] scale = tune.fromdegrees(scale, octave=3, root='d') p = ''.join([ keys.pulsar(scale[ii % len(scale)], pulsewidth=dsp.rand(0.1, 1), amp=0.5, length=(beat/2) / 3) for _ in range(3) ]) layers += [ p ] else: layers += [ dsp.pad('', beat / 2, 0) ] s += dsp.mix(layers) out = dsp.mix([ s, out ]) #out = dsp.alias(out) #out = dsp.drift(out, dsp.rand(0.5, 2)) return out
def play(ctl): p = ctl.get('param') key = p.get('key', 'c') mpk = ctl.get('midi').get('mpk') bpm = p.get('bpm', 100) beat = dsp.bpm2frames(bpm) length = beat * 2 * mpk.geti(6, low=1, high=6) gamut = mpk.geti(20) poly = mpk.geti(21) logistic = mpk.geti(22) layered = mpk.geti(23) fixed = mpk.get(24) perc = mpk.get(25) wobble = mpk.get(26) min_octave = mpk.geti(4, low=1, high=4) max_octave = mpk.geti(4, low=3, high=7) octave = dsp.randint(min_octave, max_octave) k = dsp.randchoose(snds.search('mc303/*kick*')) h = dsp.randchoose(snds.search('mc303/*hat*')) c = dsp.randchoose(snds.search('mc303/*clap*')) pointer = p.get('pointer', default=0) log = data.Logistic(r=dsp.rand(3.9, 3.99), x=0.5, size=1024, pointer=pointer) if fixed: seed = mpk.get(5) else: seed = time.time() dsp.seed(str(seed)) def makeOnsets(length, wobble, div, num_beats, offset=False): if offset: offset = dsp.randint(0, 3) else: offset = 0 pattern = dsp.eu(num_beats, dsp.randint(1, num_beats/div), offset) dsp.log(pattern) if wobble: points = [ dsp.mstf(100, 500) for _ in range(dsp.randint(2, 8)) ] plength = sum(points) mult = length / float(plength) onsets = curves.bezier(points, num_beats) onsets = [ int(o * mult) for o in onsets ] else: beat = float(length) / num_beats num_beats = length / beat beat = int(round(beat)) onsets = [ beat * i for i in range(int(round(num_beats))) ] return onsets def makeKicks(length, wobble): out = Tracks() onsets = makeOnsets(length, wobble, 2, 4, True) kick = dsp.taper(k, 20) kick = dsp.transpose(kick, dsp.rand(1, 2)) for onset in onsets: out.add(kick, onset) out = out.mix() out = dsp.fill(out, length, silence=False) return dsp.taper(out, 40) def makeHats(length, wobble): out = Tracks() onsets = makeOnsets(length, wobble, 1, 16, True) for onset in onsets: out.add(h, onset) out = out.mix() out = dsp.split(out, dsp.flen(out) / dsp.randchoose([2, 3, 4])) out = dsp.randshuffle(out) out = ''.join(out) out = dsp.fill(out, length, silence=False) return dsp.taper(out, 40) def makeClaps(length, wobble): out = Tracks() onsets = makeOnsets(length, wobble, 2, 8, True) for onset in onsets: clap = dsp.stretch(c, int(dsp.flen(c) * log.get(1, 10)), grain_size=dsp.randint(20, 120)) out.add(clap, onset) out = out.mix() out = dsp.split(out, dsp.flen(out) / dsp.randchoose([2, 3, 4])) out = [ dsp.taper(o, 20) for o in out ] out = dsp.randshuffle(out) out = ''.join(out) out = dsp.fill(out, length, silence=False) return dsp.taper(out, 40) if mpk.get(8) == 0: return dsp.pad('', 0, dsp.mstf(100)) def randomScale(): scale = [1,2,3,4,5,6,7,8] freqs = tune.fromdegrees(scale, octave=octave, root=key) return freqs def gamutScale(): num_notes = dsp.randint(3, 6) scale = [ dsp.randchoose([1,2,3,4,5,6,7,8]) for _ in range(num_notes) ] freqs = tune.fromdegrees(scale, octave=octave, root=key) return freqs if gamut: freqs = gamutScale() else: freqs = randomScale() if layered: num_layers = dsp.randint(2, 4) else: num_layers = 1 layers = [] for _ in range(num_layers): layer = '' elapsed = 0 while elapsed < length: if poly: num_poly = dsp.randint(1, 3) else: num_poly = 1 note_length = beat / dsp.randchoose([1, 2, 3, 4]) notes = [] for _ in range(num_poly): freq = dsp.randchoose(freqs) if logistic: pulsewidth = log.get(low=0.05, high=1) if log.get() > 0.5: wf = log.choose(['sine', 'tri', 'saw']) wf = dsp.wavetable(wf, 512) else: points = [ log.get(-1, 1) for _ in range(log.geti(4, 20)) ] wf = dsp.breakpoint(points, 512) else: pulsewidth = 1 wf = dsp.wavetable('sine', 512) note = keys.pulsar(length=note_length, freq=freq, wf=wf, env='phasor', pulsewidth=pulsewidth) notes += [ note ] notes = dsp.mix(notes) layer += notes elapsed += dsp.flen(notes) layers += [ layer ] out = dsp.mix(layers) out = dsp.amp(out, 0.75) out = dsp.fill(out, length) #out = dsp.pad(out, 0, int(dsp.stf(0.5, 1) * mpk.get(7))) p.set('pointer', log.pointer) if perc: kicks = makeKicks(length, wobble) hats = makeHats(length, wobble) claps = makeClaps(length, wobble) out = dsp.mix([ out, kicks, hats, claps ]) out = dsp.amp(out, mpk.get(8)) return out
if b % 4 == 0: chord = [ dsp.randint(1, 15) for _ in range(4) ] layers = [] length = beat * dsp.randchoose([2, 3, 4, 6]) for freq in tune.fromdegrees(chord, octave=2, root='c'): #freq = freq * 2**dsp.randint(0,3) amp = dsp.rand(0.25, 0.75) layer = keys.rhodes(length, freq, amp) layer = dsp.pan(layer, dsp.rand()) layers += [ layer ] layers = dsp.mix(layers) ctf = tune.fromdegrees([ commontone ], octave=2, root='c')[0] drone = dsp.mix([ keys.pulsar(ctf, dsp.flen(layers), amp=0.3) for _ in range(4) ]) chord = nextChord(chord) if b % 2 == 0: commontone = commontone + dsp.randchoose([-1,1]) if commontone == 0: commontone = 1 layers = dsp.split(layers, beat / 3) layers = dsp.randshuffle(layers) layers = ''.join(layers) drone = dsp.split(drone, beat) drone = dsp.randshuffle(drone) drone = ''.join(drone)
def play(ctl): mpk = ctl.get('midi').get('mpk') ccs = [i + 48 for i in range(24)] notes = [] for cc in ccs: if mpk.get(cc) < 1: notes += [cc] ssnd = dsp.read('/home/hecanjog/sounds/drums/78sd.wav').data ssnd = dsp.read('jesssnare.wav').data hsnd = dsp.read('/home/hecanjog/sounds/drums/Shaker.wav').data ksnd = dsp.read('/home/hecanjog/sounds/drums/Drybd2.wav').data #ksnd = dsp.read('jesskick.wav').data beat = dsp.bpm2frames(90) #beat = dsp.mstf(290 * 2) length = beat * 4 hat = 'xxx ' kick = 'x ' snare = ' x ' #snare = ' x xx' #snare = ' ' def makeHat(length, i, amp): h = hsnd h = dsp.env(h, 'phasor') h = dsp.pad(h, 0, length - dsp.flen(h)) return h def makeKick(length, i, amp): k = dsp.mix([ksnd, drums.sinekick(length, i, amp)]) #k = dsp.env(ksnd, 'phasor') k = dsp.fill(k, length, silence=True) k = dsp.amp(k, 1) return k def makeSnare(length, i, amp): s = ssnd s = dsp.amp(s, 1.2) s = dsp.transpose(s, dsp.rand(1.5, 3)) s = dsp.fill(s, length, silence=True) #ss = dsp.drift(s, dsp.rand(0.001, 0.1)) #s = dsp.mix([s, ss]) return s #hats = drums.parsebeat(hat, 16, beat, length, makeHat, 25) hats = drums.parsebeat(hat, 16, beat, length, makeHat, 0) kicks = drums.parsebeat(kick, 16, beat, length, makeKick, 0) snares = drums.parsebeat(snare, 8, beat, length, makeSnare, 0) out = dsp.mix([hats, kicks, snares]) shuf = True shuf = False if shuf: out = dsp.split(out, beat) out = dsp.randshuffle(out) out = ''.join(out) out = dsp.amp(out, 2) cuts = True if dsp.rand() > 0.5 else False cuts = True #cuts = False if cuts: o = dsp.split(out, beat / 2) o = dsp.randshuffle(o) o = [dsp.amp(oo, dsp.rand(0, 2.5)) for oo in o] o = [dsp.env(oo, 'random') for oo in o] out = dsp.mix([''.join(o), out]) dsp.log(notes) synthy = False #synthy = True if synthy == True: s = '' for ii in range(dsp.flen(out) / (beat / 2)): layers = [] if len(notes) > 0: scale = [n - 47 for n in notes] scale = [1, 5, 8, 12] scale = tune.fromdegrees(scale, octave=3, root='d') p = ''.join([ keys.pulsar(scale[ii % len(scale)], pulsewidth=dsp.rand(0.1, 1), amp=0.5, length=(beat / 2) / 3) for _ in range(3) ]) layers += [p] else: layers += [dsp.pad('', beat / 2, 0)] s += dsp.mix(layers) out = dsp.mix([s, out]) #out = dsp.alias(out) #out = dsp.drift(out, dsp.rand(0.5, 2)) return out
def play(ctl): p = ctl.get('param') key = p.get('key', 'c') mpk = ctl.get('midi').get('mpk') bpm = p.get('bpm', 100) beat = dsp.bpm2frames(bpm) length = beat * 2 * mpk.geti(6, low=1, high=6) gamut = mpk.geti(20) poly = mpk.geti(21) logistic = mpk.geti(22) layered = mpk.geti(23) fixed = mpk.get(24) perc = mpk.get(25) wobble = mpk.get(26) min_octave = mpk.geti(4, low=1, high=4) max_octave = mpk.geti(4, low=3, high=7) octave = dsp.randint(min_octave, max_octave) k = dsp.randchoose(snds.search('mc303/*kick*')) h = dsp.randchoose(snds.search('mc303/*hat*')) c = dsp.randchoose(snds.search('mc303/*clap*')) pointer = p.get('pointer', default=0) log = data.Logistic(r=dsp.rand(3.9, 3.99), x=0.5, size=1024, pointer=pointer) if fixed: seed = mpk.get(5) else: seed = time.time() dsp.seed(str(seed)) def makeOnsets(length, wobble, div, num_beats, offset=False): if offset: offset = dsp.randint(0, 3) else: offset = 0 pattern = dsp.eu(num_beats, dsp.randint(1, num_beats / div), offset) dsp.log(pattern) if wobble: points = [dsp.mstf(100, 500) for _ in range(dsp.randint(2, 8))] plength = sum(points) mult = length / float(plength) onsets = curves.bezier(points, num_beats) onsets = [int(o * mult) for o in onsets] else: beat = float(length) / num_beats num_beats = length / beat beat = int(round(beat)) onsets = [beat * i for i in range(int(round(num_beats)))] return onsets def makeKicks(length, wobble): out = Tracks() onsets = makeOnsets(length, wobble, 2, 4, True) kick = dsp.taper(k, 20) kick = dsp.transpose(kick, dsp.rand(1, 2)) for onset in onsets: out.add(kick, onset) out = out.mix() out = dsp.fill(out, length, silence=False) return dsp.taper(out, 40) def makeHats(length, wobble): out = Tracks() onsets = makeOnsets(length, wobble, 1, 16, True) for onset in onsets: out.add(h, onset) out = out.mix() out = dsp.split(out, dsp.flen(out) / dsp.randchoose([2, 3, 4])) out = dsp.randshuffle(out) out = ''.join(out) out = dsp.fill(out, length, silence=False) return dsp.taper(out, 40) def makeClaps(length, wobble): out = Tracks() onsets = makeOnsets(length, wobble, 2, 8, True) for onset in onsets: clap = dsp.stretch(c, int(dsp.flen(c) * log.get(1, 10)), grain_size=dsp.randint(20, 120)) out.add(clap, onset) out = out.mix() out = dsp.split(out, dsp.flen(out) / dsp.randchoose([2, 3, 4])) out = [dsp.taper(o, 20) for o in out] out = dsp.randshuffle(out) out = ''.join(out) out = dsp.fill(out, length, silence=False) return dsp.taper(out, 40) if mpk.get(8) == 0: return dsp.pad('', 0, dsp.mstf(100)) def randomScale(): scale = [1, 2, 3, 4, 5, 6, 7, 8] freqs = tune.fromdegrees(scale, octave=octave, root=key) return freqs def gamutScale(): num_notes = dsp.randint(3, 6) scale = [ dsp.randchoose([1, 2, 3, 4, 5, 6, 7, 8]) for _ in range(num_notes) ] freqs = tune.fromdegrees(scale, octave=octave, root=key) return freqs if gamut: freqs = gamutScale() else: freqs = randomScale() if layered: num_layers = dsp.randint(2, 4) else: num_layers = 1 layers = [] for _ in range(num_layers): layer = '' elapsed = 0 while elapsed < length: if poly: num_poly = dsp.randint(1, 3) else: num_poly = 1 note_length = beat / dsp.randchoose([1, 2, 3, 4]) notes = [] for _ in range(num_poly): freq = dsp.randchoose(freqs) if logistic: pulsewidth = log.get(low=0.05, high=1) if log.get() > 0.5: wf = log.choose(['sine', 'tri', 'saw']) wf = dsp.wavetable(wf, 512) else: points = [ log.get(-1, 1) for _ in range(log.geti(4, 20)) ] wf = dsp.breakpoint(points, 512) else: pulsewidth = 1 wf = dsp.wavetable('sine', 512) note = keys.pulsar(length=note_length, freq=freq, wf=wf, env='phasor', pulsewidth=pulsewidth) notes += [note] notes = dsp.mix(notes) layer += notes elapsed += dsp.flen(notes) layers += [layer] out = dsp.mix(layers) out = dsp.amp(out, 0.75) out = dsp.fill(out, length) #out = dsp.pad(out, 0, int(dsp.stf(0.5, 1) * mpk.get(7))) p.set('pointer', log.pointer) if perc: kicks = makeKicks(length, wobble) hats = makeHats(length, wobble) claps = makeClaps(length, wobble) out = dsp.mix([out, kicks, hats, claps]) out = dsp.amp(out, mpk.get(8)) return out
layers = [] #length = beat * dsp.randchoose([2, 3, 4, 6]) length = beat * 4 for freq in tune.fromdegrees(chord, octave=2, root='c'): amp = dsp.rand(0.25, 0.5) layer = keys.rhodes(length, freq, amp) layer = dsp.pan(layer, dsp.rand()) layers += [layer] layers = dsp.mix(layers) ctf = tune.fromdegrees([commontone], octave=2, root='c')[0] drone = dsp.mix([ keys.pulsar(ctf, dsp.flen(layers), amp=dsp.rand(0.01, 0.1)) for _ in range(4) ]) chord = nextChord(chord) if b % 2 == 0: commontone = commontone + dsp.randchoose([-1, 1]) if commontone == 0: commontone = 1 layers = dsp.split(layers, beat / 3) layers = dsp.randshuffle(layers) layers = ''.join(layers) drone = dsp.split(drone, beat)