From 6f9b3b1da70af7606d442309d33c374ef6dc11b4 Mon Sep 17 00:00:00 2001 From: JotaChina Date: Fri, 26 Dec 2025 21:49:51 -0300 Subject: [PATCH] tentando resolver conflitos do tone no mmpCreator --- assets/js/creations/pattern/pattern_audio.js | 25 ++++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/assets/js/creations/pattern/pattern_audio.js b/assets/js/creations/pattern/pattern_audio.js index cfccf789..792baec7 100755 --- a/assets/js/creations/pattern/pattern_audio.js +++ b/assets/js/creations/pattern/pattern_audio.js @@ -525,6 +525,13 @@ function bufferToWave(abuffer) { // =============================== const LMMS_TICKS_PER_STEP = 12; + +function ticksToSec(ticks, stepIntervalSec) { + // stepIntervalSec = duração de 1 step (1/16) em segundos + // LMMS_TICKS_PER_STEP = 12 ticks por 1/16 (porque 48 ticks por semínima e 192 por compasso em 4/4) + return (Number(ticks) / LMMS_TICKS_PER_STEP) * stepIntervalSec; +} + let songPatternScheduleId = null; export function startSongPatternPlaybackOnTransport() { @@ -596,10 +603,10 @@ export function startSongPatternPlaybackOnTransport() { const durSec = Math.max(0.01, ticksToSec(lenTicks, stepIntervalSec)); const vel = Math.max(0, Math.min(1, (Number(n.vol) || 100) / 100)); - const noteName = midiToNoteName(n.key); + const freq = Tone.Frequency(Number(n.key) || 0, "midi").toFrequency(); try { - track.instrument.triggerAttackRelease(noteName, durSec, t2, vel); + track.instrument.triggerAttackRelease(freq, durSec, t2, vel); } catch { try { track.instrument.triggerAttackRelease(noteName, durSec, t2); @@ -642,14 +649,12 @@ export function startSongPatternPlaybackOnTransport() { if (patt.steps[stepInPattern]) { if (track.type === "sampler" && track.player) { - track.player.restart = true; - try { - // Verifica se já está tocando. Se sim, para imediatamente antes de recomeçar. - if (track.player.state === "started") { - track.player.stop(time); - } - track.player.start(time); } - catch {} + if (track.type === "sampler" && track.player) { + try { + if (track.player.state === "started") track.player.stop(time); + track.player.start(time); + } catch {} + } } else if (track.type === "plugin" && track.instrument) { // plugin sem piano roll try { track.instrument.triggerAttackRelease("C5", "16n", time); } catch {}