diff --git a/packages/zig/dsp.wasm b/packages/zig/dsp.wasm index 67e9a5c2d..b90185a38 100755 Binary files a/packages/zig/dsp.wasm and b/packages/zig/dsp.wasm differ diff --git a/packages/zig/dsp.zig b/packages/zig/dsp.zig index 74a946cbb..c9b4fb8c0 100644 --- a/packages/zig/dsp.zig +++ b/packages/zig/dsp.zig @@ -1,5 +1,5 @@ const std = @import("std"); -export fn saw(t: f64) f64 { - return ((@mod(110.0 * t, 1.0)) - 0.5) * 2.0; +export fn saw(t: f64, f: f64) f64 { + return ((@mod(f * t, 1.0)) - 0.5) * 2.0; } diff --git a/packages/zig/index.html b/packages/zig/index.html index d9af426e5..35c23f255 100644 --- a/packages/zig/index.html +++ b/packages/zig/index.html @@ -5,6 +5,7 @@ + diff --git a/packages/zig/main.js b/packages/zig/main.js index fda63ac84..3feefcf9d 100644 --- a/packages/zig/main.js +++ b/packages/zig/main.js @@ -14,4 +14,8 @@ document.getElementById('play').addEventListener('click', async () => { }; node.port.postMessage({ webassembly: buffer }); node.connect(ac.destination); + + document.getElementById('freq').addEventListener('input', async (e) => { + node.port.postMessage({ frequency: e.target.value }); + }); }); diff --git a/packages/zig/worklet.js b/packages/zig/worklet.js index d4709ccef..b926bdb4b 100644 --- a/packages/zig/worklet.js +++ b/packages/zig/worklet.js @@ -2,6 +2,7 @@ class SawProcessor extends AudioWorkletProcessor { constructor() { super(); this.t = 0; // samples passed + this.f = 110; this.port.onmessage = (e) => { const key = Object.keys(e.data)[0]; const value = e.data[key]; @@ -12,6 +13,8 @@ class SawProcessor extends AudioWorkletProcessor { this.port.postMessage('OK'); }); break; + case 'frequency': + this.f = value; } }; } @@ -22,7 +25,7 @@ class SawProcessor extends AudioWorkletProcessor { for (let i = 0; i < output[0].length; i++) { let t = this.t; let out = 0; - out = this.api.saw(t / 44100, 220); + out = this.api.saw(t / 44100, this.f); output.forEach((channel) => { channel[i] = out; });