Implement saw wave and honk waveform

This commit is contained in:
Anthony Wang 2023-03-21 22:56:34 -04:00
parent 838cdb1487
commit 5bba29570e
Signed by: a
GPG key ID: 42A5B952E6DD8D38
2 changed files with 18 additions and 1 deletions

View file

@ -10,7 +10,7 @@ bitrate = 44100
note = []
for i in range(0, 24):
note.append([yue.tone(yue.freq(3, i), j / bitrate) / 4 for j in range(0, 3 * bitrate)])
note.append([yue.seething(yue.freq(4, i), j / bitrate) / 4 for j in range(0, 3 * bitrate)])
sd.default.samplerate = bitrate
print("READY")

17
yue.py
View file

@ -8,6 +8,13 @@ bitrate = 44100
music = []
def saw(x):
"""
Sawtooth wave
"""
return x / 2 / math.pi % 1
def freq(octave, step):
"""
Returns the frequency of a note
@ -45,6 +52,16 @@ def seething(f, t):
return Y
def honk(f, t):
"""
Returns the intensity of the "honk" waveform of frequency f sampled at time t
"""
w = 2 * math.pi * f
Y = sum([(saw(i * w * t) / 3 + math.sin(i * w * t)) * math.exp(-0.002 * w * t) for i in range(1, 6)]) / 2
Y = math.copysign(abs(Y) ** (1 / 2), Y)
return Y
def at(t):
"""
Returns the total intensity of music sampled at time t