Tweaking the harmonics by changing the shape of the harmonic components and ratios can produce some interesting sounds. This one only uses sine waveforms, but a square / saw generator is trivial with numpy.

It takes a second to generate, so don't turn your volume up too loud in anticipation (it may be loud).

import math

import numpy

import pyaudio

import itertools

from scipy import interpolate

from operator import itemgetter

class Note:

NOTES = ['c','c#','d','d#','e','f','f#','g','g#','a','a#','b']

def __init__(self, note, octave=4):

self.octave = octave

if isinstance(note, int):

self.index = note

self.note = Note.NOTES[note]

elif isinstance(note, st…

## Comments