diff options
Diffstat (limited to 'tools/mq_editor/editor.js')
| -rw-r--r-- | tools/mq_editor/editor.js | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/tools/mq_editor/editor.js b/tools/mq_editor/editor.js index 868d3d5..3c07877 100644 --- a/tools/mq_editor/editor.js +++ b/tools/mq_editor/editor.js @@ -86,11 +86,11 @@ class PartialEditor { muteBtn.style.color = partial.muted ? '#fa4' : ''; this._buildCurveGrid(this._freqGrid, partial, 'freqCurve', 'f', index); - this._buildCurveGrid(this._ampGrid, partial, 'ampCurve', 'a', index); + this._buildCurveGrid(this._ampGrid, partial, 'freqCurve', 'a', index, 'a'); this._buildSynthGrid(partial, index); } - _buildCurveGrid(grid, partial, curveKey, valueLabel, partialIndex) { + _buildCurveGrid(grid, partial, curveKey, valueLabel, partialIndex, valueKey = 'v') { grid.innerHTML = ''; const curve = partial[curveKey]; if (!curve) { grid.style.color = '#444'; grid.textContent = 'none'; return; } @@ -108,10 +108,10 @@ class PartialEditor { const vInput = document.createElement('input'); vInput.type = 'number'; - vInput.value = curveKey === 'freqCurve' ? curve['v' + i].toFixed(2) : curve['v' + i].toFixed(4); - vInput.step = curveKey === 'freqCurve' ? '1' : '0.0001'; + vInput.value = valueKey === 'v' ? curve['v' + i].toFixed(2) : curve[valueKey + i].toFixed(4); + vInput.step = valueKey === 'v' ? '1' : '0.0001'; vInput.title = valueLabel + i; - vInput.addEventListener('change', this._makeCurveUpdater(partialIndex, curveKey, 'v', i)); + vInput.addEventListener('change', this._makeCurveUpdater(partialIndex, curveKey, valueKey, i)); grid.appendChild(lbl); grid.appendChild(tInput); @@ -444,7 +444,7 @@ class PartialEditor { } // Bezier curve - const curve = partial.ampCurve; + const curve = partial.freqCurve; if (!curve) return; const color = this.viewer ? this.viewer.partialColor(this._selectedIndex) : '#f44'; @@ -456,7 +456,7 @@ class PartialEditor { const t = curve.t0 + (curve.t3 - curve.t0) * i / 120; const x = this._tToX(t); if (x < -1 || x > W + 1) { started = false; continue; } - const y = this._ampToY(evalBezier(curve, t)); + const y = this._ampToY(evalBezierAmp(curve, t)); if (!started) { ctx.moveTo(x, y); started = true; } else ctx.lineTo(x, y); } ctx.stroke(); @@ -464,7 +464,7 @@ class PartialEditor { // Control points for (let i = 0; i < 4; ++i) { const x = this._tToX(curve['t' + i]); - const y = this._ampToY(curve['v' + i]); + const y = this._ampToY(curve['a' + i]); ctx.fillStyle = color; ctx.beginPath(); ctx.arc(x, y, 6, 0, 2 * Math.PI); @@ -485,17 +485,17 @@ class PartialEditor { canvas.addEventListener('mousedown', (e) => { if (this._selectedIndex < 0 || !this.partials) return; const partial = this.partials[this._selectedIndex]; - if (!partial || !partial.ampCurve) return; + if (!partial || !partial.freqCurve) return; const {x, y} = getCanvasCoords(e, canvas); - const curve = partial.ampCurve; + const curve = partial.freqCurve; for (let i = 0; i < 4; ++i) { - if (Math.hypot(this._tToX(curve['t' + i]) - x, this._ampToY(curve['v' + i]) - y) <= 8) { + if (Math.hypot(this._tToX(curve['t' + i]) - x, this._ampToY(curve['a' + i]) - y) <= 8) { this._dragPointIndex = i; this._dragCompanionOff = null; if (i === 0) - this._dragCompanionOff = { dt: curve.t1 - curve.t0, dv: curve.v1 - curve.v0 }; + this._dragCompanionOff = { da: curve.a1 - curve.a0 }; else if (i === 3) - this._dragCompanionOff = { dt: curve.t2 - curve.t3, dv: curve.v2 - curve.v3 }; + this._dragCompanionOff = { da: curve.a2 - curve.a3 }; canvas.style.cursor = 'grabbing'; e.preventDefault(); return; @@ -507,14 +507,13 @@ class PartialEditor { const {x, y} = getCanvasCoords(e, canvas); if (this._dragPointIndex >= 0) { - const curve = this.partials[this._selectedIndex].ampCurve; + const curve = this.partials[this._selectedIndex].freqCurve; const i = this._dragPointIndex; - curve['t' + i] = Math.max(0, Math.min(this.viewer ? this.viewer.t_max : 1e6, this._xToT(x))); - curve['v' + i] = Math.max(0, this._yToAmp(y)); + curve['a' + i] = Math.max(0, this._yToAmp(y)); if (this._dragCompanionOff) { const off = this._dragCompanionOff; - if (i === 0) { curve.t1 = curve.t0 + off.dt; curve.v1 = curve.v0 + off.dv; } - else { curve.t2 = curve.t3 + off.dt; curve.v2 = curve.v3 + off.dv; } + if (i === 0) { curve.a1 = curve.a0 + off.da; } + else { curve.a2 = curve.a3 + off.da; } } this._renderAmpEditor(); if (this.viewer) this.viewer.render(); @@ -524,11 +523,11 @@ class PartialEditor { // Cursor hint if (this._selectedIndex >= 0 && this.partials) { - const curve = this.partials[this._selectedIndex]?.ampCurve; + const curve = this.partials[this._selectedIndex]?.freqCurve; if (curve) { let near = false; for (let i = 0; i < 4; ++i) { - if (Math.hypot(this._tToX(curve['t' + i]) - x, this._ampToY(curve['v' + i]) - y) <= 8) { + if (Math.hypot(this._tToX(curve['t' + i]) - x, this._ampToY(curve['a' + i]) - y) <= 8) { near = true; break; } } |
