def synth_sinewave(freq=1000, duration=1.0, samprate=44100): t = np.arange(0, duration*samprate) / samprate x = np.sin(2*math.pi * freq * t) return(x / np.max(np.abs(x)), t)
def synth_sawwave(freq=1000, duration=1.0, samprate=44100): t = np.arange(0, duration*samprate) / samprate x = np.zeros(len(t)) R = math.floor(samprate/2 / freq) for k in range(R): x = x + np.sin(2*math.pi * (k+1) * freq * t) / (k+1) return(x / np.max(np.abs(x)), t)
def synth_squarewave(freq=1000, duration=1.0, samprate=44100): t = np.arange(0, duration*samprate) / samprate x = np.zeros(len(t)) R = math.floor(samprate/2 / freq) for k in range(0, R, 2): x = x + np.sin(2*math.pi * (k+1) * freq * t) / (k+1) return(x / np.max(np.abs(x)), t)
def synth_whitenoise(duration=1.0, samprate=44100): """ generate whitenoise using normal distribution """ t = np.arange(start=0, stop=duration, step=1/samprate) x = np.random.normal(size=len(t)) return(x / max(abs(x)), t)
def synth_whitenoise_uniform(duration=1.0, samprate=44100): """ generate whitenoise using uniform distribution """ t = np.arange(start=0, stop=duration, step=1/samprate) x = np.random.uniform(size=len(t)) * 2.0 - 1.0 return(x / max(abs(x)), t)
def synth_pinknoise(duration=1.0, samprate=44100): """ Generate pinknoise using Voss algorithm http://www.firstpr.com.au/dsp/pink-noise/ """ f_low = 10 # lowest frequency to keep pink (Hz) levels = math.ceil(np.log2(samprate/f_low)) t = np.arange(start=0, stop=duration, step=1/samprate) out = np.zeros(len(t)) x = np.random.normal(size=levels) for n in range(math.ceil(samprate * duration)): for m in range(levels): if n % 2**(m+1) == 0: x[m] = np.random.normal() out[n] = np.random.normal() + np.sum(x) return(out / max(abs(out)), t)