From 23258e7d026199e087e153af208a8207f3e859b8 Mon Sep 17 00:00:00 2001 From: JotaChina Date: Sat, 27 Dec 2025 10:32:00 -0300 Subject: [PATCH] =?UTF-8?q?samples=20de=20=C3=A1udio=20n=C3=A3o=20reinicia?= =?UTF-8?q?vam=20ao=20fim=20da=20playlist?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/js/creations/pattern/pattern_audio.js | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/assets/js/creations/pattern/pattern_audio.js b/assets/js/creations/pattern/pattern_audio.js index 35685fc8..280d158d 100755 --- a/assets/js/creations/pattern/pattern_audio.js +++ b/assets/js/creations/pattern/pattern_audio.js @@ -34,6 +34,29 @@ const timerDisplay = document.getElementById("timer-display"); // Variável para armazenar as "Parts" (sequências melódicas) do Tone.js let activeParts = []; +// ===================================================== +// Proteção: não “vazar” loop do Pattern Editor pro Song +// ===================================================== +let _transportLoopSnapshot = null; + +function snapshotTransportLoopOnce() { + if (_transportLoopSnapshot) return; + _transportLoopSnapshot = { + loop: Tone.Transport.loop, + loopStart: Tone.Transport.loopStart, + loopEnd: Tone.Transport.loopEnd, + }; +} + +function restoreTransportLoop() { + if (!_transportLoopSnapshot) return; + Tone.Transport.loop = _transportLoopSnapshot.loop; + Tone.Transport.loopStart = _transportLoopSnapshot.loopStart; + Tone.Transport.loopEnd = _transportLoopSnapshot.loopEnd; + _transportLoopSnapshot = null; +} + + let currentStep = 0; function updateStepHighlight(step) { @@ -182,6 +205,7 @@ export function stopPlayback(rewind = true) { Tone.Transport.stop(); Tone.Transport.cancel(); stopScheduledPianoRoll(); + restoreTransportLoop(); // ✅ Pattern Editor: para apenas o preview (não mexe no track.player da playlist) appState.pattern.tracks.forEach((track) => { @@ -255,6 +279,8 @@ export function schedulePianoRoll() { barsInput.dispatchEvent(new Event("input", { bubbles: true })); } + snapshotTransportLoopOnce(); + Tone.Transport.loop = true; Tone.Transport.loopStart = 0; Tone.Transport.loopEnd = `${barsNeeded}m`;