Here I present you my python code for all those kick samples I used in the video.

import numpy as np
from scipy.io.wavfile import write
import matplotlib.pyplot as plt

rate = 44100
t_max = 0.5
t = np.linspace(0,t_max,round(t_max*rate))

def save_sample(sample,name):
    sample = np.append(sample,np.zeros(round(rate/5)))
    scaled = np.int16(sample / np.max(np.abs(sample)) * 32767)
    write(name, rate, scaled)

f0 = 60
sine = np.sin(2*np.pi*f0*t)

####build a gaussian sound pulse
def gaussian_envelope(sig,t):
    g = np.exp(-((t-t_max/2)**2/(sig)**2))
    g = g/np.max(g)
    return g

sig = t_max/4
carrier_envelope = gaussian_envelope(sig,t)
sound_pulse = sine*carrier_envelope
save_sample(sound_pulse,'samples/sound_pulse_gauss_60.wav')


####build a super-gaussian sound pulse
def supergaussian_envelope(sig,N,t):
    g = np.exp(-((t-t_max/2)**2/(sig)**2)**N)
    g = g/np.max(g)
    return g

sig = t_max/4
carrier_envelope = supergaussian_envelope(sig,50,t)
sound_pulse = sine*carrier_envelope
save_sample(sound_pulse,'samples/sound_pulse_supergauss.wav')


####build gaussian sound pulse 
f0 = 40; fend = 23
sine = np.sin(2*np.pi*f0*t)

sig = t_max/4
carrier_envelope = gaussian_envelope(sig,t)
sound_pulse = sine*carrier_envelope
save_sample(sound_pulse,'samples/sound_pulse_gauss_40.wav')


####kick shaped samples
def envelope(attack,sus,sig,t):
    g = 1-np.exp(-attack*rate*t[0:round(t_max*sus*rate)])
    g2 = np.exp(-((t)**2/(sig)**2))
    g = np.append(g,g2)
    g = g/np.max(g)
    return g[0:len(t)]


####build boomy kick
f0 = 42
sine = np.sin(2*np.pi*f0*t)
attack=0.05; sus=1/4; sig=0.3*t_max
carrier_envelope = envelope(attack,sus,sig,t)
kick_boomy = sine*carrier_envelope
save_sample(kick_boomy,'samples/kick_boomy.wav')


####build plain kick
f0 = 42
fend = 23
changing_frequency = f0+t*(fend-f0)/t_max
sine = np.sin(2*np.pi*changing_frequency*t)
attack=0.05; sus=1/4; sig=0.3*t_max
carrier_envelope = envelope(attack,sus,sig,t)
kick_plain = sine*carrier_envelope
kick_plain = kick_plain/np.max(np.abs(kick_plain))
save_sample(kick_plain,'samples/kick_plain.wav')


####add punch (click)
attack=0.05; sus=1/12; sig=0.02*t_max
punch_envelope = envelope(attack,sus,sig,t)
punch = 0
for f in range(100,10000):
    punch += punch_envelope*np.sin(2*np.pi*f*t)

punch = punch_envelope*punch/np.max(np.abs(punch))
kick_clicky = kick_plain+0.05*punch
save_sample(kick_clicky,'samples/kick_clicky.wav')


####add punch (clink)
attack=0.05; sus=1/12; sig=0.02*t_max
punch_envelope = envelope(attack,sus,sig,t)
punch = 0
for f in range(100,10000):
    punch += punch_envelope*np.sin(2*np.pi*f*t+f)

punch = punch_envelope*punch/np.max(np.abs(punch))
kick_clink = kick_plain+0.05*punch
save_sample(kick_clink,'samples/kick_clink.wav')


####add punch (squeeky)
attack=0.05; sus=1/12; sig=0.02*t_max
punch_envelope = envelope(attack,sus,sig,t)
punch = 0
for f in range(100,10000,100):
    punch += punch_envelope*np.sin((2*np.pi*f*t))
punch = punch_envelope*punch/np.max(np.abs(punch))
kick_squeeky = kick_plain+0.05*punch
save_sample(kick_squeeky,'samples/kick_squeeky.wav')


####add punch (white)
attack=0.05; sus=1/12; sig=0.02*t_max
punch_envelope = envelope(attack,sus,sig,t)
punch = 0
fib0 = 0
fib1 = 1
for f in range(100,10000,1):
    phase = np.array(fib0+fib1)
    fib0 = fib1
    fib1=phase
    punch += punch_envelope*np.sin((2*np.pi*f*t+phase))
punch = punch_envelope*punch/np.max(np.abs(punch))
kick_white = kick_plain+0.05*punch
save_sample(kick_white,'samples/kick_white.wav')


####add punch (noise)
attack=0.05; sus=1/12; sig=0.02*t_max
punch_envelope = envelope(attack,sus,sig,t)
punch = 0
fib0 = 0; fib1 = 1
loudness = 10; a0 = 7**5; m = 2**31-1
for f in range(100,10000,1):
    phase = np.array(fib0+fib1)
    fib0 = fib1
    fib1=phase
    loudness = (a0*loudness) % m
    punch += punch_envelope*loudness*np.sin((2*np.pi*f*t+phase))
punch = punch_envelope*punch/np.max(np.abs(punch))
kick_noise = kick_plain+0.05*punch
save_sample(kick_noise,'samples/kick_noise.wav')


####add punch (low)
attack=0.05; sus=1/12; sig=0.02*t_max
punch_envelope = envelope(attack,sus,sig,t)
punch = 0; amp_low = 0.3
fib0 = 0; fib1 = 1
loudness = 10; a0 = 7**5; m = 2**31-1
for f in range(10,150,1):
    phase = np.array(fib0+fib1)
    fib0 = fib1
    fib1=phase
    loudness = (a0*loudness) % m
    punch += loudness*punch_envelope*np.sin((2*np.pi*f*t+phase))
punch_low = punch_envelope*punch/np.max(np.abs(punch))
kick_low = kick_plain+amp_low*punch_low
save_sample(kick_low,'samples/kick_low.wav')


####add punch (high)
attack=0.05; sus=1/20; sig=0.01*t_max
punch_envelope = envelope(attack,sus,sig,t)
punch = 0; amp_high = 0.0003
loudness = 10; a0 = 7**5; m = 2**31-1
for f in range(1000,10000,1):
    phase = np.array(fib0+fib1)
    fib0 = fib1
    fib1=phase
    loudness = (a0*loudness) % m
    punch += punch_envelope*loudness*np.sin((2*np.pi*f*t+phase))
punch_high = punch_envelope*punch/np.max(np.abs(punch))
kick_high = kick_low + amp_high*punch_high
save_sample(kick_high,'samples/kick_high.wav')


####add LOFI
attack=0.05; sus=1/2; sig=0.2*t_max
LOFI_envelope = envelope(attack,sus,sig,t)
punch = 0; amp_LOFI = 0.0001
loudness = 10; a0 = 7**5; m = 2**31-1
for f in range(0,10000,1):
    phase = np.array(fib0+fib1)
    fib0 = fib1
    fib1=phase
    loudness = (a0*loudness) % m
    punch += LOFI_envelope*loudness*np.sin((2*np.pi*f*t+phase))
punch_LOFI = LOFI_envelope*punch/np.max(np.abs(punch))
kick = kick_high + amp_LOFI*punch_LOFI
save_sample(kick,'samples/kick.wav')


####repeating kick file
beat = 0
for i in range(1,10):
    beat = np.append(beat,kick)
save_sample(beat,'samples/beat.wav')

Leave a Reply

Your email address will not be published. Required fields are marked *