tentando resolver conflitos do tone no mmpCreator
Deploy / Deploy (push) Successful in 1m58s Details

This commit is contained in:
JotaChina 2025-12-26 21:37:10 -03:00
parent 3d6621071d
commit 2b918ceaff
1 changed files with 44 additions and 1 deletions

View File

@ -34,6 +34,15 @@ const timerDisplay = document.getElementById("timer-display");
// Variável para armazenar as "Parts" (sequências melódicas) do Tone.js // Variável para armazenar as "Parts" (sequências melódicas) do Tone.js
let activeParts = []; let activeParts = [];
let currentStep = 0;
function updateStepHighlight(step) {
// usa a função já existente do seu pattern_ui
highlightStep(step, true);
setTimeout(() => highlightStep(step, false), 60);
}
function formatTime(milliseconds) { function formatTime(milliseconds) {
const totalSeconds = Math.floor(milliseconds / 1000); const totalSeconds = Math.floor(milliseconds / 1000);
const minutes = Math.floor(totalSeconds / 60) const minutes = Math.floor(totalSeconds / 60)
@ -277,10 +286,17 @@ export function schedulePianoRoll() {
part.loop = true; part.loop = true;
part.loopEnd = `${barsNeeded}m`; part.loopEnd = `${barsNeeded}m`;
scheduledParts.push(part); activeParts.push(part);
}); });
} }
function stopScheduledPianoRoll() {
activeParts.forEach((p) => {
try { p.stop(); } catch {}
try { p.dispose(); } catch {}
});
activeParts = [];
}
// ========================================================================= // =========================================================================
// Renderizar o Pattern atual para um Blob de Áudio // Renderizar o Pattern atual para um Blob de Áudio
@ -594,6 +610,33 @@ export function startSongPatternPlaybackOnTransport() {
continue; // 👈 importante: não cair na lógica de steps abaixo continue; // 👈 importante: não cair na lógica de steps abaixo
} }
// ✅ 1b) SAMPLER com piano roll (notes) — respeita oitava/pitch via playbackRate
if (
track.type === "sampler" &&
track.buffer &&
Array.isArray(patt.notes) &&
patt.notes.length > 0
) {
const stepStartTick = hit.localStep * LMMS_TICKS_PER_STEP;
const stepEndTick = stepStartTick + LMMS_TICKS_PER_STEP;
for (const n of patt.notes) {
const nPos = Number(n.pos) || 0;
if (nPos < stepStartTick || nPos >= stepEndTick) continue;
const offsetTicks = nPos - stepStartTick;
const t2 = time + ticksToSec(offsetTicks, stepIntervalSec);
const lenTicks = Math.max(1, Number(n.len) || LMMS_TICKS_PER_STEP);
const durSec = Math.max(0.01, ticksToSec(lenTicks, stepIntervalSec));
playSamplerNoteAtTime(track, n.key, t2, durSec);
}
continue; // 👈 importante: não cair na lógica de steps
}
// ✅ 2) Lógica antiga de STEP (sampler / plugin sem notes) // ✅ 2) Lógica antiga de STEP (sampler / plugin sem notes)
if (!patt.steps) continue; if (!patt.steps) continue;