fix shalom

This commit is contained in:
2026-07-02 15:45:05 +02:00
parent 42406408aa
commit fbdb192a0d

20
app.js
View File

@@ -191,7 +191,7 @@
}, },
// ritorna una funzione stop(fadeSec) per interromperlo (utile per il loop) // ritorna una funzione stop(fadeSec) per interromperlo (utile per il loop)
play(key, opts = {}) { play(key, opts = {}) {
const { vol = 0.8, loop = false, fallback } = opts; const { vol = 0.8, loop = false, fallback, gain } = opts;
if (!Audio.on) return () => {}; if (!Audio.on) return () => {};
const base = this.el[key]; const base = this.el[key];
if (!base || this.ready[key] === false) { if (!base || this.ready[key] === false) {
@@ -201,6 +201,16 @@
const a = loop ? base : base.cloneNode(); // clone -> più play sovrapposti const a = loop ? base : base.cloneNode(); // clone -> più play sovrapposti
a.loop = loop; a.loop = loop;
a.volume = vol; a.volume = vol;
// Boost oltre il max (1.0) solo per QUESTO suono: instrada l'elemento in
// Web Audio con un GainNode dedicato (non tocca il volume globale).
if (gain && gain > 1 && Audio.ctx) {
try {
const src = Audio.ctx.createMediaElementSource(a);
const g = Audio.ctx.createGain();
g.gain.value = gain;
src.connect(g).connect(Audio.ctx.destination);
} catch (e) {}
}
try { try {
a.currentTime = 0; a.currentTime = 0;
} catch (e) {} } catch (e) {}
@@ -442,7 +452,8 @@
showShalom(o, "mode-fire"); showShalom(o, "mode-fire");
screenShake(); screenShake();
const stop = Samples.play("leone", { const stop = Samples.play("leone", {
vol: 0.9, vol: 1.0,
gain: 2.5, // ruggito più forte del resto (boost dedicato)
fallback: () => Audio.jackpot(), fallback: () => Audio.jackpot(),
}); });
await shalomWait(null, 3500, o); await shalomWait(null, 3500, o);
@@ -455,15 +466,18 @@
const o = ensureShalomOverlay(); const o = ensureShalomOverlay();
const v = o.querySelector(".shalom-video"); const v = o.querySelector(".shalom-video");
showShalom(o, "mode-video"); showShalom(o, "mode-video");
v.style.visibility = "hidden"; // primi 3s: solo musica, video nascosto
const stop = Samples.play("shalom", { const stop = Samples.play("shalom", {
vol: 0.9, vol: 0.9,
fallback: () => Audio.jackpot(), fallback: () => Audio.jackpot(),
}); });
await sleep(3000); // dopo 3s il video appare E parte insieme
v.style.visibility = "";
try { try {
v.currentTime = 0; v.currentTime = 0;
await v.play(); await v.play();
} catch (e) {} } catch (e) {}
await shalomWait(v, 14000, o); await shalomWait(v, 17000, o); // 3s musica + 17s video = 20s (o tap per skippare)
if (stop) stop(0.4); if (stop) stop(0.4);
hideShalom(o); hideShalom(o);
} }