From 1e9dda6e38e7ca3fd2c21b43347e816953949568 Mon Sep 17 00:00:00 2001 From: w1n5t0n Date: Tue, 7 Apr 2026 00:01:37 +0100 Subject: [PATCH] fix(a-app): create AudioCanvas before computing target output count Move the lazy AudioCanvas initialization above the outputCountForMode() call in setOutputMode() so that the real output count is available instead of the 12-output fallback. --- playground/js/a-app.js | 45 +++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/playground/js/a-app.js b/playground/js/a-app.js index c7ca070..1fcc82c 100644 --- a/playground/js/a-app.js +++ b/playground/js/a-app.js @@ -2600,6 +2600,29 @@ function syncOutputToggles(mode) { } async function setOutputMode(mode, { skipConfirm = false } = {}) { + const heatmapStrip = document.getElementById('heatmap-strip'); + const synthQuickControls = document.getElementById('synth-quick-controls'); + const midiCCQuickControls = document.getElementById('midi-cc-quick-controls'); + const audioCanvasWrap = document.getElementById('audio-canvas-wrap'); + + // Lazily create AudioCanvas BEFORE computing targetOutputs so that + // outputCountForMode returns the real count (not the 12-output fallback). + if (mode === 'audio-canvas' && !audioCanvas) { + audioCanvas = new AudioCanvas(audioCanvasWrap); + _ensureAudioCanvasOverrides(audioCanvas.getOutputCount()); + // Listen for dynamic output count changes (loop count changes) + audioCanvasWrap.addEventListener('ac:outputcount-changed', async (e) => { + if (outputMode !== 'audio-canvas') return; + const newCount = e.detail.count; + _ensureAudioCanvasOverrides(newCount); + if (newCount !== N_OUTPUTS) { + await resizeMLP(newCount); + } + buildHeatmap(); + updateHeatmap(iml.getOutputs()); + }); + } + const targetOutputs = outputCountForMode(mode); const needsResize = targetOutputs !== N_OUTPUTS; @@ -2623,28 +2646,6 @@ async function setOutputMode(mode, { skipConfirm = false } = {}) { buildHeatmap(); updateHeatmap(iml.getOutputs()); - const heatmapStrip = document.getElementById('heatmap-strip'); - const synthQuickControls = document.getElementById('synth-quick-controls'); - const midiCCQuickControls = document.getElementById('midi-cc-quick-controls'); - const audioCanvasWrap = document.getElementById('audio-canvas-wrap'); - - // Lazily create AudioCanvas on first switch - if (mode === 'audio-canvas' && !audioCanvas) { - audioCanvas = new AudioCanvas(audioCanvasWrap); - _ensureAudioCanvasOverrides(audioCanvas.getOutputCount()); - // Listen for dynamic output count changes (loop count changes) - audioCanvasWrap.addEventListener('ac:outputcount-changed', async (e) => { - if (outputMode !== 'audio-canvas') return; - const newCount = e.detail.count; - _ensureAudioCanvasOverrides(newCount); - if (newCount !== N_OUTPUTS) { - await resizeMLP(newCount); - } - buildHeatmap(); - updateHeatmap(iml.getOutputs()); - }); - } - // Hide/show audio-canvas wrap if (audioCanvasWrap) audioCanvasWrap.style.display = mode === 'audio-canvas' ? 'block' : 'none';