diff --git a/packages/superdough/synth.mjs b/packages/superdough/synth.mjs index 24d1d5ef7..dafc2e7c9 100644 --- a/packages/superdough/synth.mjs +++ b/packages/superdough/synth.mjs @@ -73,13 +73,13 @@ export function waveformN(partials, type) { const ac = getAudioContext(); const osc = ac.createOscillator(); - const amplitudes = { - sawtooth: (n) => 1 / n, - square: (n) => (n % 2 === 0 ? 0 : 1 / n), - triangle: (n) => (n % 2 === 0 ? 0 : 1 / (n * n)), + const terms = { + sawtooth: (n) => [0, -1 / n], + square: (n) => [0, n % 2 === 0 ? 0 : 1 / n], + triangle: (n) => [n % 2 === 0 ? 0 : 1 / (n * n), 0], }; - if (!amplitudes[type]) { + if (!terms[type]) { throw new Error(`unknown wave type ${type}`); } @@ -87,8 +87,9 @@ export function waveformN(partials, type) { imag[0] = 0; let n = 1; while (n <= partials) { - real[n] = amplitudes[type](n); - imag[n] = 0; + const [r, i] = terms[type](n); + real[n] = r; + imag[n] = i; n++; } diff --git a/packages/webaudio/scope.mjs b/packages/webaudio/scope.mjs index cfde80ce5..9f052e8ee 100644 --- a/packages/webaudio/scope.mjs +++ b/packages/webaudio/scope.mjs @@ -25,7 +25,7 @@ export function drawTimeScope( for (let i = triggerIndex; i < bufferSize; i++) { const v = dataArray[i] + 1; - const y = (scale * (v - 1) + pos) * canvas.height; + const y = (1 - (scale * (v - 1) + pos)) * canvas.height; if (i === 0) { ctx.moveTo(x, y);