50 lines
1.0 KiB
Python
50 lines
1.0 KiB
Python
|
|
import math
|
|
|
|
from generate_wavetable import generateWavetable
|
|
|
|
WAVETABLE_FILE_NAME = "sharkFin"
|
|
|
|
# process expects a waveform from x=[0, 2pi) centered around f(x)=0
|
|
# normalization is handled by the wavetableGenerator
|
|
|
|
def sine(phase):
|
|
return math.sin(phase)
|
|
|
|
def square(phase):
|
|
sample = 1.0
|
|
if(phase <= math.pi):
|
|
sample = -1
|
|
return sample
|
|
|
|
def saw(phase):
|
|
return (phase / math.pi) - 1.0
|
|
|
|
def triangle(phase):
|
|
sample = 0.0
|
|
if(phase <= math.pi/2.0):
|
|
sample = phase * 2.0/math.pi
|
|
elif(phase <= 3.0*math.pi/2.0):
|
|
sample = phase * (-2.0/math.pi) + 2.0
|
|
else:
|
|
sample = phase * 2.0/math.pi - 4.0
|
|
return sample
|
|
|
|
def sharkFin(phase):
|
|
k = 10.0
|
|
if(phase <= math.pi):
|
|
sample = 2 * (phase/math.pi) ** k - 1.0
|
|
else:
|
|
sample = -2 * (phase/math.pi - 1.0) ** k + 1.0
|
|
return sample
|
|
|
|
def sphere(phase):
|
|
return 1
|
|
|
|
# pass in the name of your wavtable file and the process function
|
|
def main():
|
|
generateWavetable(WAVETABLE_FILE_NAME, process)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|