Last active
August 25, 2021 02:34
-
-
Save hecanjog/d98a57b9c514be1fec27791caf26281e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import aubio | |
import numpy as np | |
from pippi import dsp, fx, oscs, shapes, tune, rhythm, noise | |
from pippi.wavesets import Waveset | |
from pathlib import Path | |
RN = 56 | |
dsp.seed(RN) | |
WINSIZE = 4096 | |
HOPSIZE = WINSIZE//2 | |
SR = 44100 | |
KEY = 'e' | |
c3 = dsp.read('/home/hecanjog/sounds/kits/001/clap3.wav') | |
sn = dsp.read('/home/hecanjog/sounds/kits/001/snap1.wav') | |
snr = dsp.read('/home/hecanjog/sounds/kits/001/snare4.wav') | |
kik = dsp.read('/home/hecanjog/sounds/kits/002/707 KICK 1.wav') | |
rhodes = dsp.read('sounds/nycrhodesC.wav') | |
suite = dsp.read('sounds/suitetoneC#.wav').remix(2).speed(0.99) | |
rolls = dsp.read('sounds/melonpans.wav') | |
pour = dsp.read('sounds/melonpour.wav') | |
hat_lfo = dsp.win(shapes.win('sine'), 0.01, 0.1) | |
kick_lfo = dsp.win(shapes.win('sine'), 0.05, 0.1) | |
clap_lfo = dsp.win(shapes.win('sine'), 0.01, 0.07) | |
snar_lfo = dsp.win(shapes.win('sine'), 0.01, 0.07) | |
time_lfo = dsp.win('hann', 0.001, 0.2) | |
segs = [ dsp.read(s) for s in Path('./segments').glob('seg-*.wav') ] | |
chords = ['ii6', 'V', 'V7', 'i11', 'I', 'I11', 'vi9'] | |
chords = ['ii11', 'ii11', 'III7', 'ii11', 'i11', 'i11', 'vii*9'] | |
chords = ['ii7', 'ii9', 'ii7', 'ii11', 'IV9', 'vii*9'] | |
chords = ['ii7'] | |
#freqs = tune.chord('i11', octave=2, key='e') | |
########## | |
# SEGMENTS | |
########## | |
def flatten(snd): | |
return np.asarray(snd.remix(1).frames, dtype='f').flatten() | |
def divide(snd, lpf=None, hpf=None): | |
o = aubio.onset('specflux', WINSIZE, HOPSIZE, SR) | |
# Filters | |
if lpf is not None: | |
snd = fx.hpf(snd, 200) | |
if hpf is not None: | |
snd = fx.lpf(snd, 12000) | |
pos = 0 | |
length = len(snd) | |
start = None | |
while pos < length - HOPSIZE: | |
frames = flatten(snd[pos:pos+HOPSIZE]) | |
if o(frames): | |
# Found onset | |
onset = o.get_last() | |
#print(count, onset, start, pos) | |
if start is not None: | |
yield snd[start:onset] | |
start = onset | |
pos += HOPSIZE | |
def chop(): | |
segcount = 0 | |
for s in divide(g): | |
s.write('segments/seg-%00d.wav' % segcount) | |
segcount += 1 | |
####### | |
# DRUMS | |
####### | |
def makehat(pos, count): | |
length = hat_lfo.interp(pos) | |
lowhz = dsp.win('rnd', 5000, 6000) | |
highhz = dsp.win('rnd', 6000, 14000) | |
h = noise.bln('sine', length, lowhz, highhz).env('pluckout') * dsp.rand(0.2, 0.4) | |
basehz = dsp.rand(3000, 10000) | |
widthz = dsp.rand(100, 3000) | |
curve = dsp.win(shapes.win('hann'), basehz, basehz + widthz) | |
return fx.hpf(h, curve, dsp.rand()) | |
def makekick(pos, count): | |
return kik.copy().env(dsp.choice(['pluckout', 'hannout', 'sineout'])) * dsp.rand(1.2, 1.5) | |
def makeclap(pos, count): | |
length = clap_lfo.interp(pos) | |
lowhz = dsp.win('rnd', 3000, 6000) | |
highhz = dsp.win('rnd', 2000, 8000) | |
out = noise.bln('tri', length, lowhz, highhz).env('pluckout') * 2 | |
out = fx.fold(out, amp=dsp.win(shapes.win('hann', length=length/2), 1, 8)) | |
out = fx.lpf(out, 6000).vspeed([1, 0.4]) | |
out.dub(c3) | |
if dsp.rand() > 0.5: | |
out.dub(sn) | |
if dsp.rand() > 0.4: | |
if dsp.rand() > 0.4: | |
out = fx.delay(out, dsp.rand(0.01, 2), dsp.rand(0.25, 0.5)) | |
elif dsp.rand() > 0.8: | |
out = fx.mdelay(out, [ dsp.rand(0, 8) for _ in range(dsp.randint(3, 10)) ], 0.7) | |
basehz = dsp.rand(300, 2000) | |
widthz = dsp.rand(100, 3000) | |
curve = dsp.win(shapes.win('hann'), basehz, basehz + widthz) | |
out = fx.lpf(out, curve) | |
return out * 0.7 | |
def makesnare(pos, count): | |
length = snar_lfo.interp(pos) | |
lowhz = dsp.win('rnd', 3000, 6000) | |
highhz = dsp.win('rnd', 2000, 8000) | |
out = noise.bln('tri', length, lowhz, highhz).env('pluckout') * 2 | |
out = fx.fold(out, amp=dsp.win(shapes.win('hann', length=length/2), 1, 8)) | |
out = fx.lpf(out, 6000) | |
if dsp.rand() > 0.9: | |
out = out.vspeed([1, 0.4]) | |
s = snr.copy() | |
s = s.cut(0, dsp.rand(s.dur/4, s.dur)).env('pluckout') | |
s = s.speed(dsp.rand(1.5, 2)) | |
out.dub(s) | |
return out * 2 | |
################### | |
# PITCHED / MELODIC | |
################### | |
def makecrd(pos, count): | |
def make_imp(freqs, segs): | |
seg = dsp.choice(segs) | |
ilen = dsp.rand(0.3, 3) | |
imp = dsp.buffer(length=ilen) | |
stack = Waveset(seg, offset=dsp.randint(50, 100), limit=dsp.randint(10, 40)) | |
stack.normalize() | |
for _ in range(dsp.randint(2,6)): | |
freq = dsp.choice(freqs) * 2**dsp.randint(0, 3) | |
i = oscs.Pulsar2d(stack, windows=['hann'], freq=freq).play(ilen).pan(dsp.rand()).env('pluckout') * dsp.rand() | |
#i = i.env(dsp.choice(['hannout', 'sineout', 'saw', 'rsaw', 'pluckout'])) | |
imp.dub(i) | |
if dsp.rand() > 0.5: | |
imp.dub(imp.rcut(dsp.rand()).repeat(dsp.randint(2, 30)).env('pluckout')) | |
#curve = dsp.win('rnd', dsp.choice(freqs) * 2, max(freqs) * 2) | |
#imp = fx.lpf(imp, curve) | |
return imp * 1.5 | |
def make_src(freqs, segs): | |
seg = dsp.choice(segs) | |
src = fx.norm(seg, 1).env('pluckout') | |
src = src.vspeed(dsp.win('rnd', 0.75, 1)) | |
if dsp.rand() > 0.5: | |
src = src.rcut(dsp.rand()).repeat(dsp.randint(2, 30)).env('pluckout') | |
return src | |
freqs = tune.chord(chords[0], octave=2, key=KEY) | |
out = make_src(freqs, segs) | |
imp = make_imp(freqs, segs) | |
out.dub(imp) | |
out = fx.norm(out, dsp.rand(0.7, 1)) | |
return out.env('pluckout') * 1.6 | |
def makebas(pos, count): | |
s = ['e1', 'e1', 'e1', 'e1', 'd1', 'd1', 'c1'] | |
freq = tune.ntf(s[count % len(s)]) * 1.5 | |
if dsp.rand() > 0.8 and count % 3 == 0: | |
freq *= 2 | |
blength = dsp.rand(0.4, 0.6) | |
out = dsp.buffer(length=blength) | |
for o in range(3): | |
amp = abs(1 - (o/3)) + 0.15 | |
b = oscs.Osc('square', freq=freq * 2**o, quality=8, phase=dsp.rand()).play(blength).pan(dsp.rand()) * amp | |
out.dub(b) | |
out = fx.fold(out, amp=dsp.win('rnd', 10, dsp.rand(30,100))) | |
out = fx.lpf(out, freq*dsp.rand(3,7)) | |
out = fx.norm(out, dsp.rand(0.7, 0.9)) | |
return out.env('pluckout') * 5 | |
def makeswell(pos, count): | |
swelllength = dsp.rand(4, 10) | |
out = dsp.buffer(length=swelllength) | |
freq = dsp.choice(tune.chord(chords[0], key=KEY, octave=dsp.randint(4, 10))) | |
rfreq = False | |
if dsp.rand() > 0.5: | |
rfreq = True | |
for _ in range(dsp.randint(1,4)): | |
if rfreq: | |
freq = dsp.choice(tune.chord(chords[0], key='e', octave=dsp.randint(1, 4))) | |
o = oscs.Osc('sine', freq=freq, phase=dsp.rand(), quality=6).play(swelllength) * dsp.rand(0.04, 0.1) | |
o = o.pan(dsp.rand()) | |
out.dub(o) | |
out = out.env(dsp.win(shapes.win('hann'), 0.4, 0.8)).env('sine').env('hann') | |
out = out.pad(start=dsp.rand()) | |
return out | |
def makebells(pos, count): | |
#freqs = tune.chord(chords[0], octave=2, key=KEY) | |
freqs = tune.fromdegrees([2,4,2,4,2,3,6,7,2,4,7,8], octave=3, root=KEY) | |
freq = freqs[count % len(freqs)] | |
r = rhodes.copy().speed(freq / tune.ntf('c3')) | |
r = r.cut(0.05, dsp.rand(1, 4)).env('pluckout') | |
r = r.pan(dsp.rand()) | |
if dsp.rand() > 0.4: | |
rd = fx.delay(r, dsp.rand(0.01, 2), dsp.rand(0.25, 0.5)) | |
elif dsp.rand() > 0.8: | |
rd = fx.mdelay(r, [ dsp.rand(0, 8) for _ in range(dsp.randint(3, 10)) ], 0.7) | |
else: | |
rd = r.copy() | |
rd = rd.cut(0, 0.5).cloud(rd.dur, | |
grainlength=dsp.win(shapes.win('hann'), dsp.MS*40, dsp.MS*400), | |
grid=dsp.win(shapes.win('hann'), dsp.MS*40, dsp.MS*4000), | |
) | |
rd = fx.hpf(rd, dsp.win(shapes.win('hann'), freq, freq*4)) | |
r.dub(rd) | |
s = suite.copy().speed(freq / tune.ntf('c#4')) * dsp.rand(0.2, 0.5) | |
s = s.cut(0.05, dsp.rand(1, 4)).env('pluckout') | |
s = s.pan(dsp.rand()) | |
#if dsp.rand() > 0.5: | |
# s = s.speed(dsp.choice([2,4])) | |
if dsp.rand() > 0.4: | |
sd = fx.delay(s, dsp.rand(0.01, 2), dsp.rand(0.25, 0.5)) | |
elif dsp.rand() > 0.8: | |
sd = fx.mdelay(s, [ dsp.rand(0, 8) for _ in range(dsp.randint(3, 10)) ], 0.7) | |
else: | |
sd = s.copy() | |
sd = sd.cut(0, 0.5).cloud(sd.dur, | |
grainlength=dsp.win(shapes.win('hann'), dsp.MS*40, dsp.MS*400), | |
grid=dsp.win(shapes.win('hann'), dsp.MS*40, dsp.MS*4000), | |
) | |
sd = fx.hpf(sd, dsp.win(shapes.win('hann'), freq, freq*4)) | |
s.dub(sd) | |
out = r & s | |
for o in range(3): | |
amp = abs(1 - (o/3)) + 0.15 | |
b = oscs.Osc('square', freq=freq * 2**o, quality=8, phase=dsp.rand()).play(out.dur).pan(dsp.rand()) * amp * 0.25 | |
b = fx.lpf(b, freq * 2**o * 2).env('pluckout') | |
out.dub(b) | |
if dsp.rand() > 0.5: | |
out = fx.fold(out, amp=dsp.win(shapes.win('hann'), 2, 20)) | |
out = out.env('pluckout') | |
if dsp.rand() > 0.8: | |
out = fx.hpf(out, dsp.win(shapes.win('hann'), freq, freq*4)) | |
return out | |
def makerolls(pos, count): | |
return rolls.cloud(dsp.rand(2,rolls.dur), | |
grainlength=dsp.win(shapes.win('hann'), 1, rolls.dur/2), | |
speed=dsp.win(shapes.win('hann'), 0.5, 1.5), | |
spread=1 | |
).env(dsp.win(shapes.win('hann'), 0, 0.3)) * 2 | |
def makepour(pos, count): | |
return pour.cloud(dsp.rand(2,pour.dur), | |
grainlength=dsp.win(shapes.win('hann'), 1, rolls.dur/2), | |
speed=dsp.win(shapes.win('hann'), 0.25, 1.5), | |
spread=1 | |
).env(dsp.win(shapes.win('hann'), 0, 0.75)) | |
def makebeat(): | |
hatpat = {'a': 'x..x..x..'} | |
ha2pat = {'a': 'x.x.'} | |
kikpat = {'a': 'x..x..'} | |
clapat = {'a': '.x..x'} | |
snarat = {'a': '...x..', 'b': '...xx.', 'c': '..x.'} | |
crdpat = {'a': 'x...x.', 'b': 'xx..xx', 'c': 'xx.xx.'} | |
baspat = {'a': 'x...' '....' '....' '..x.'} | |
swellpat = {'a': 'x.x.'} | |
bellpat = {'a': 'xx..xx', 'b': 'xxx', 'c': 'xx.'} | |
rollpat = {'a': 'x..'} | |
pourpat = {'a': 'x.'} | |
score = { | |
# sections | |
'a': { | |
'swell': 'aaaa' 'aaaa', | |
'hats': '----' 'aa--', | |
'hatsalt': 'aaaa' 'aaaa', | |
'kicks': '--aa' 'a-aa', | |
'claps': '----' '----', | |
'snr': '----' '----', | |
'crd': 'aaaa' 'aaaa', | |
'bass': 'aaaa' 'aaa-', | |
'pour': 'aaaa' 'aaaa', | |
}, | |
'b': { | |
'swell': 'aaaa' 'aaaa', | |
'hats': 'aaaa' 'aaa-', | |
'hatsalt': 'aaaa' 'aaa-', | |
'kicks': 'aaaa' 'aaaa', | |
'claps': 'aaaa' 'aaaa', | |
'snr': 'aaab' 'aaab', | |
'crd': 'bbbb' 'cccc', | |
'bass': 'aaaa' 'a-a-', | |
'pour': 'aaaa' 'aaaa', | |
'roll': '----' '---aa', | |
}, | |
'c': { | |
'swell': 'aaaa' 'aaaa', | |
'hats': 'aaaa' '----', | |
'hatsalt': 'aaaa' '----', | |
'kicks': '--aa' 'a-a-', | |
'claps': '----' '----', | |
'snr': 'cccc' '----', | |
'crd': 'aaaa' 'aaa-', | |
'bass': 'aaaa' 'aaaa', | |
'bell': 'cccc' 'aac-', | |
'roll': 'aaaa' '----', | |
}, | |
'z': { | |
'swell': 'aaaa' 'aaaa', | |
'hats': 'aaaa' '----', | |
'kicks': '--aa' 'a-a-', | |
'bass': 'aaaa' 'aaaa', | |
'bell': 'cccc' 'bbaa', | |
'roll': 'a---' '----', | |
}, | |
'seq': 'aabbccaabbccz', # section sequence | |
#'seq': 'abccz', | |
} | |
beat = dsp.win(shapes.win('hann'), 60 / 90., 60 / 130.) | |
#beat = 60 / 100.0 | |
dm = rhythm.Seq(beat) | |
dm.add('swell', swellpat, makeswell, div=1) | |
dm.add('hats', hatpat, makehat, div=6) | |
dm.add('hatsalt', ha2pat, makehat, div=4) | |
dm.add('kicks', kikpat, makekick, div=2) | |
dm.add('claps', clapat, makeclap, div=2) | |
dm.add('snr', snarat, makesnare, div=4) | |
dm.add('crd', crdpat, makecrd, div=6) | |
dm.add('bass', baspat, makebas, div=4) | |
dm.add('bell', bellpat, makebells, div=1.5) | |
dm.add('roll', rollpat, makerolls, div=3) | |
dm.add('pour', pourpat, makepour, div=2) | |
return dm.score(score, barlength=4, stems=True, stemsdir='stems/', pool=True) | |
def main(): | |
#g = dsp.read('soup.flac') | |
out = makebeat() | |
out = fx.compressor(out, 15, -15) | |
out = fx.norm(out, 1).trim() | |
out.write('renders/soup-breaks%03d.wav' % RN) | |
if __name__ == '__main__': | |
exit(main()) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(..sions/happy-little-lines) % ls -R . Tue 24 9:33PM lake | |
.: | |
bellscripts process002.py process.py profileprocess.py __pycache__ renders score043.png sounds stems | |
'happy little lines codes.csv' process-7.py profile profile.prof radiopost score035.png segments splitter.py | |
./bellscripts: | |
chorale.py ingest.py megasort.py mixture.py wtcompose.py | |
./__pycache__: | |
process.cpython-38.pyc | |
./radiopost: | |
radiopost | |
./radiopost/radiopost: | |
graph.py __init__.py recipes.py render.py segments.py synth.py waves.py | |
./renders: | |
soup-bits11.mp3 soup-bits.mp3 soup-breaks007.wav soup-breaks014.wav soup-breaks019.wav soup-breaks026.wav soup-breaks031.wav soup-breaks037.wav soup-breaks043.wav soup-breaks051.wav soup-breaks-320-056.mp3 | |
soup-bits11.wav soup-bits.wav soup-breaks008.wav soup-breaks015.mp3 soup-breaks020.wav soup-breaks027.wav soup-breaks032.wav soup-breaks038.wav soup-breaks044.wav soup-breaks052.wav soup.flac | |
soup-bits12.wav soup-breaks003.wav soup-breaks009.wav soup-breaks015.wav soup-breaks021.wav soup-breaks028.wav soup-breaks033.wav soup-breaks039.wav soup-breaks045.wav soup-breaks053.wav | |
soup-bits13.wav soup-breaks004.wav soup-breaks010.wav soup-breaks016.mp3 soup-breaks022.wav soup-breaks029.wav soup-breaks034.wav soup-breaks040.wav soup-breaks046.wav soup-breaks054.wav | |
soup-bits14.wav soup-breaks005.wav soup-breaks011.wav soup-breaks016.wav soup-breaks023.wav soup-breaks030.wav soup-breaks035.mp3 soup-breaks041.wav soup-breaks048.wav soup-breaks055.wav | |
soup-bits15.wav soup-breaks006.wav soup-breaks012.wav soup-breaks017.wav soup-breaks024.wav soup-breaks031a.mp3 soup-breaks035.wav soup-breaks042.wav soup-breaks049.wav soup-breaks056.mp3 | |
soup-bits16.wav soup-breaks007.mp3 soup-breaks013.wav soup-breaks018.wav soup-breaks025.wav soup-breaks031.mp3 soup-breaks036.wav soup-breaks043.mp3 soup-breaks050.wav soup-breaks056.wav | |
./segments: | |
seg-0.wav seg-118.wav seg-136.wav seg-154.wav seg-172.wav seg-190.wav seg-208.wav seg-226.wav seg-244.wav seg-262.wav seg-280.wav seg-299.wav seg-316.wav seg-36.wav seg-54.wav seg-72.wav seg-90.wav | |
seg-100.wav seg-119.wav seg-137.wav seg-155.wav seg-173.wav seg-191.wav seg-209.wav seg-227.wav seg-245.wav seg-263.wav seg-281.wav seg-29.wav seg-317.wav seg-37.wav seg-55.wav seg-73.wav seg-91.wav | |
seg-101.wav seg-11.wav seg-138.wav seg-156.wav seg-174.wav seg-192.wav seg-20.wav seg-228.wav seg-246.wav seg-264.wav seg-282.wav seg-2.wav seg-318.wav seg-38.wav seg-56.wav seg-74.wav seg-92.wav | |
seg-102.wav seg-120.wav seg-139.wav seg-157.wav seg-175.wav seg-193.wav seg-210.wav seg-229.wav seg-247.wav seg-265.wav seg-283.wav seg-300.wav seg-319.wav seg-39.wav seg-57.wav seg-75.wav seg-93.wav | |
seg-103.wav seg-121.wav seg-13.wav seg-158.wav seg-176.wav seg-194.wav seg-211.wav seg-22.wav seg-248.wav seg-266.wav seg-284.wav seg-301.wav seg-31.wav seg-3.wav seg-58.wav seg-76.wav seg-94.wav | |
seg-104.wav seg-122.wav seg-140.wav seg-159.wav seg-177.wav seg-195.wav seg-212.wav seg-230.wav seg-249.wav seg-267.wav seg-285.wav seg-302.wav seg-320.wav seg-40.wav seg-59.wav seg-77.wav seg-95.wav | |
seg-105.wav seg-123.wav seg-141.wav seg-15.wav seg-178.wav seg-196.wav seg-213.wav seg-231.wav seg-24.wav seg-268.wav seg-286.wav seg-303.wav seg-321.wav seg-41.wav seg-5.wav seg-78.wav seg-96.wav | |
seg-106.wav seg-124.wav seg-142.wav seg-160.wav seg-179.wav seg-197.wav seg-214.wav seg-232.wav seg-250.wav seg-269.wav seg-287.wav seg-304.wav seg-322.wav seg-42.wav seg-60.wav seg-79.wav seg-97.wav | |
seg-107.wav seg-125.wav seg-143.wav seg-161.wav seg-17.wav seg-198.wav seg-215.wav seg-233.wav seg-251.wav seg-26.wav seg-288.wav seg-305.wav seg-323.wav seg-43.wav seg-61.wav seg-7.wav seg-98.wav | |
seg-108.wav seg-126.wav seg-144.wav seg-162.wav seg-180.wav seg-199.wav seg-216.wav seg-234.wav seg-252.wav seg-270.wav seg-289.wav seg-306.wav seg-324.wav seg-44.wav seg-62.wav seg-80.wav seg-99.wav | |
seg-109.wav seg-127.wav seg-145.wav seg-163.wav seg-181.wav seg-19.wav seg-217.wav seg-235.wav seg-253.wav seg-271.wav seg-28.wav seg-307.wav seg-325.wav seg-45.wav seg-63.wav seg-81.wav seg-9.wav | |
seg-10.wav seg-128.wav seg-146.wav seg-164.wav seg-182.wav seg-1.wav seg-218.wav seg-236.wav seg-254.wav seg-272.wav seg-290.wav seg-308.wav seg-326.wav seg-46.wav seg-64.wav seg-82.wav | |
seg-110.wav seg-129.wav seg-147.wav seg-165.wav seg-183.wav seg-200.wav seg-219.wav seg-237.wav seg-255.wav seg-273.wav seg-291.wav seg-309.wav seg-327.wav seg-47.wav seg-65.wav seg-83.wav | |
seg-111.wav seg-12.wav seg-148.wav seg-166.wav seg-184.wav seg-201.wav seg-21.wav seg-238.wav seg-256.wav seg-274.wav seg-292.wav seg-30.wav seg-328.wav seg-48.wav seg-66.wav seg-84.wav | |
seg-112.wav seg-130.wav seg-149.wav seg-167.wav seg-185.wav seg-202.wav seg-220.wav seg-239.wav seg-257.wav seg-275.wav seg-293.wav seg-310.wav seg-329.wav seg-49.wav seg-67.wav seg-85.wav | |
seg-113.wav seg-131.wav seg-14.wav seg-168.wav seg-186.wav seg-203.wav seg-221.wav seg-23.wav seg-258.wav seg-276.wav seg-294.wav seg-311.wav seg-32.wav seg-4.wav seg-68.wav seg-86.wav | |
seg-114.wav seg-132.wav seg-150.wav seg-169.wav seg-187.wav seg-204.wav seg-222.wav seg-240.wav seg-259.wav seg-277.wav seg-295.wav seg-312.wav seg-330.wav seg-50.wav seg-69.wav seg-87.wav | |
seg-115.wav seg-133.wav seg-151.wav seg-16.wav seg-188.wav seg-205.wav seg-223.wav seg-241.wav seg-25.wav seg-278.wav seg-296.wav seg-313.wav seg-33.wav seg-51.wav seg-6.wav seg-88.wav | |
seg-116.wav seg-134.wav seg-152.wav seg-170.wav seg-189.wav seg-206.wav seg-224.wav seg-242.wav seg-260.wav seg-279.wav seg-297.wav seg-314.wav seg-34.wav seg-52.wav seg-70.wav seg-89.wav | |
seg-117.wav seg-135.wav seg-153.wav seg-171.wav seg-18.wav seg-207.wav seg-225.wav seg-243.wav seg-261.wav seg-27.wav seg-298.wav seg-315.wav seg-35.wav seg-53.wav seg-71.wav seg-8.wav | |
./sounds: | |
melonpans.wav melonpour.wav nycrhodesC.wav soup.flac suitetoneC#.wav | |
./stems: | |
stem-bass.wav stem-bell.wav stem-claps.wav stem-crd.wav stem-hatsalt.wav stem-hats.wav stem-kicks.wav stem-pour.wav stem-roll.wav stem-snr.wav stem-swell.wav |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment