41 lines
912 B
Python
41 lines
912 B
Python
from pyodide import create_proxy, to_js
|
|
import numpy as np
|
|
import js
|
|
|
|
# Kreisfrequenz -> ω = 2πf
|
|
def angfreq(frequency):
|
|
return 2 * np.pi * frequency
|
|
|
|
|
|
# Schwebung -> y(t) = y^(sin(ωt) + sin(ωt))
|
|
def beat(freq1, freq2, time):
|
|
return np.sin(angfreq(freq1) * time) + np.sin(angfreq(freq2) * time)
|
|
|
|
|
|
def inp_update(event):
|
|
document.querySelector("#freqlabel").innerText = freq2.value
|
|
plot()
|
|
|
|
|
|
def scroll_update(event):
|
|
js.checkScrollDirection(event)
|
|
inp_update(event)
|
|
|
|
|
|
def plot():
|
|
beat_deflection = beat(freq1, float(freq2.value), time)
|
|
js.update(to_js(time), to_js(beat_deflection))
|
|
|
|
|
|
sampling_frequency = 140
|
|
seconds = 2
|
|
time = np.linspace(0, seconds, int(seconds * sampling_frequency))
|
|
|
|
freq1 = 440
|
|
freq2 = document.querySelector("#freq")
|
|
|
|
freq2.addEventListener("input", create_proxy(inp_update))
|
|
document.body.addEventListener("wheel", create_proxy(scroll_update))
|
|
|
|
plot()
|