Musichetta a 8 bit per il cartello «Manzolo (Poca) Art Presents»
tools/jingle.py la sintetizza da zero, a tempo con le scritte: arpeggio su MANZOLO, accordo su Art, trombone triste sul (Poca), accordo finale su PRESENTS. Suona una volta sola; la musica del titolo entra quando compare il titolo; saltando il cartello si salta anche lei. Senza un gesto del giocatore il browser può tenerla muta. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UdeKd62opy9PKgpQXtVctF
This commit is contained in:
+3
-1
@@ -2,9 +2,11 @@
|
||||
// Quale brano suona lo decidono i dati (story.music e scene.music). Si prova a partire subito; se il browser non lo
|
||||
// permette prima di un gesto del giocatore, il brano riparte al primo clic o tasto (unlock).
|
||||
|
||||
// Il brano del momento: titolo, fine, oppure quello della scena (o quello comune del gioco).
|
||||
// Il brano del momento: titolo, fine, oppure quello della scena (o quello comune del gioco). Sotto il cartello
|
||||
// d'apertura nessuno: lì suona la sua musichetta, una volta sola (main.js).
|
||||
export function trackFor(story, { screen, scene }) {
|
||||
const m = story.music ?? {};
|
||||
if (screen === 'splash') return null;
|
||||
if (screen === 'title' || screen === 'intro') return m.title ?? null;
|
||||
if (screen === 'ending') return m.ending ?? m.game ?? null;
|
||||
return story.scenes[scene]?.music ?? m.game ?? null;
|
||||
|
||||
+9
-1
@@ -205,7 +205,7 @@ function frame(now) {
|
||||
// sotto zero, il browser lancerebbe un errore e il ciclo dei fotogrammi si fermerebbe (gioco congelato).
|
||||
const dt = Math.max(0, Math.min(0.1, (now - last) / 1000));
|
||||
last = now;
|
||||
const screen = !$('title').hidden || !$('splash').hidden ? 'title' : !$('intro').hidden ? 'intro' : !$('ending').hidden ? 'ending' : 'game';
|
||||
const screen = !$('title').hidden ? 'title' : !$('splash').hidden ? 'splash' : !$('intro').hidden ? 'intro' : !$('ending').hidden ? 'ending' : 'game';
|
||||
music.duck = voices.playing ? 0.45 : 1;
|
||||
music.update(trackFor(story, { screen, scene: game?.state.scene }), dt);
|
||||
if (game) {
|
||||
@@ -232,8 +232,16 @@ function showSplash() {
|
||||
if (done) return;
|
||||
done = true;
|
||||
$('splash').hidden = true;
|
||||
jingle?.pause(); // saltato il cartello, si salta anche la musichetta
|
||||
reveal();
|
||||
};
|
||||
// La musichetta: senza un gesto del giocatore il browser può non lasciarla partire, e allora il cartello resta muto.
|
||||
const jingle = story.music?.splash ? new Audio(story.music.splash) : null;
|
||||
if (jingle) {
|
||||
jingle.volume = music.muted ? 0 : music.volume;
|
||||
jingle.play().catch(() => {});
|
||||
window.jingle = jingle; // per i test nel browser
|
||||
}
|
||||
setTimeout(reveal, SPLASH_FADE);
|
||||
setTimeout(end, SPLASH_END);
|
||||
$('splash').addEventListener('click', end);
|
||||
|
||||
+2
-1
@@ -13,7 +13,8 @@ export const story = {
|
||||
'E stamattina, in piazza, è successo qualcosa...',
|
||||
],
|
||||
// Colonna sonora di Andrea (fatta con Suno): titolo, paese, ricordi (fine e Trebbio).
|
||||
music: { title: 'assets/audio/titolo.mp3', game: 'assets/audio/paese.mp3', ending: 'assets/audio/ricordi.mp3' },
|
||||
// splash: la musichetta del cartello d'apertura (tools/jingle.py), suonata una volta sola.
|
||||
music: { splash: 'assets/audio/cartello.mp3', title: 'assets/audio/titolo.mp3', game: 'assets/audio/paese.mp3', ending: 'assets/audio/ricordi.mp3' },
|
||||
characters: {
|
||||
andrea: { name: 'Andrea', color: '#ffffff', sprite: 'assets/characters/andrea.json' },
|
||||
vecchietta: { name: 'Vecchietta', color: '#ffd27a', sprite: 'assets/characters/vecchietta.json' },
|
||||
|
||||
Reference in New Issue
Block a user