From c0a0ccd4a5eb92cfbbad802bc678790197b87863 Mon Sep 17 00:00:00 2001 From: Jage9 Date: Mon, 23 Feb 2026 01:24:13 -0500 Subject: [PATCH] Use Yama no Ongakuka melody for piano demo --- client/public/version.js | 2 +- client/src/main.ts | 59 ++++++++++++++++++++++++++++------------ 2 files changed, 42 insertions(+), 19 deletions(-) diff --git a/client/public/version.js b/client/public/version.js index d1514d6..78693e1 100644 --- a/client/public/version.js +++ b/client/public/version.js @@ -1,5 +1,5 @@ // Maintainer-controlled web client version. // Format: YYYY.MM.DD Rn (example: 2026.02.20 R2) -window.CHGRID_WEB_VERSION = "2026.02.23 R213"; +window.CHGRID_WEB_VERSION = "2026.02.23 R214"; // Optional display timezone for timestamps. Falls back to America/Detroit if unset/invalid. window.CHGRID_TIME_ZONE = "America/Detroit"; diff --git a/client/src/main.ts b/client/src/main.ts index 6fc8fe7..5524e10 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -113,24 +113,47 @@ const PIANO_SHARP_KEY_MIDI_BY_CODE: Record = { BracketRight: 78, }; const PIANO_DEMO_STEPS_F_MAJOR: Array<{ midi: number; durationMs: number; gapMs: number }> = [ - { midi: 65, durationMs: 220, gapMs: 40 }, // F4 - { midi: 69, durationMs: 220, gapMs: 40 }, // A4 - { midi: 72, durationMs: 280, gapMs: 60 }, // C5 - { midi: 74, durationMs: 220, gapMs: 40 }, // D5 - { midi: 72, durationMs: 220, gapMs: 40 }, // C5 - { midi: 69, durationMs: 260, gapMs: 60 }, // A4 - { midi: 70, durationMs: 220, gapMs: 40 }, // Bb4 - { midi: 69, durationMs: 220, gapMs: 40 }, // A4 - { midi: 67, durationMs: 260, gapMs: 60 }, // G4 - { midi: 65, durationMs: 360, gapMs: 90 }, // F4 - { midi: 67, durationMs: 220, gapMs: 40 }, // G4 - { midi: 69, durationMs: 220, gapMs: 40 }, // A4 - { midi: 70, durationMs: 220, gapMs: 40 }, // Bb4 - { midi: 72, durationMs: 280, gapMs: 60 }, // C5 - { midi: 70, durationMs: 220, gapMs: 40 }, // Bb4 - { midi: 69, durationMs: 220, gapMs: 40 }, // A4 - { midi: 67, durationMs: 260, gapMs: 60 }, // G4 - { midi: 65, durationMs: 420, gapMs: 120 }, // F4 + // "Yama no Ongakuka" / "Das Lied vom Musikanten" core melody in F major. + { midi: 65, durationMs: 240, gapMs: 40 }, // F4 + { midi: 69, durationMs: 240, gapMs: 40 }, // A4 + { midi: 72, durationMs: 240, gapMs: 60 }, // C5 + { midi: 72, durationMs: 240, gapMs: 40 }, // C5 + { midi: 70, durationMs: 240, gapMs: 40 }, // Bb4 + { midi: 69, durationMs: 240, gapMs: 60 }, // A4 + { midi: 67, durationMs: 240, gapMs: 40 }, // G4 + { midi: 69, durationMs: 240, gapMs: 40 }, // A4 + { midi: 65, durationMs: 240, gapMs: 60 }, // F4 + { midi: 65, durationMs: 480, gapMs: 120 }, // F4 (held) + { midi: 69, durationMs: 240, gapMs: 40 }, // A4 + { midi: 70, durationMs: 240, gapMs: 40 }, // Bb4 + { midi: 72, durationMs: 240, gapMs: 60 }, // C5 + { midi: 72, durationMs: 240, gapMs: 40 }, // C5 + { midi: 74, durationMs: 240, gapMs: 40 }, // D5 + { midi: 72, durationMs: 240, gapMs: 60 }, // C5 + { midi: 70, durationMs: 240, gapMs: 40 }, // Bb4 + { midi: 69, durationMs: 240, gapMs: 40 }, // A4 + { midi: 67, durationMs: 240, gapMs: 60 }, // G4 + { midi: 65, durationMs: 480, gapMs: 120 }, // F4 (held) + { midi: 72, durationMs: 240, gapMs: 40 }, // C5 + { midi: 72, durationMs: 240, gapMs: 40 }, // C5 + { midi: 74, durationMs: 240, gapMs: 60 }, // D5 + { midi: 65, durationMs: 240, gapMs: 40 }, // F4 + { midi: 65, durationMs: 240, gapMs: 40 }, // F4 + { midi: 65, durationMs: 240, gapMs: 60 }, // F4 + { midi: 67, durationMs: 240, gapMs: 40 }, // G4 + { midi: 65, durationMs: 240, gapMs: 40 }, // F4 + { midi: 64, durationMs: 240, gapMs: 60 }, // E4 + { midi: 65, durationMs: 480, gapMs: 120 }, // F4 (held) + { midi: 69, durationMs: 240, gapMs: 40 }, // A4 + { midi: 70, durationMs: 240, gapMs: 40 }, // Bb4 + { midi: 72, durationMs: 240, gapMs: 60 }, // C5 + { midi: 72, durationMs: 240, gapMs: 40 }, // C5 + { midi: 74, durationMs: 240, gapMs: 40 }, // D5 + { midi: 72, durationMs: 240, gapMs: 60 }, // C5 + { midi: 70, durationMs: 240, gapMs: 40 }, // Bb4 + { midi: 69, durationMs: 240, gapMs: 40 }, // A4 + { midi: 67, durationMs: 240, gapMs: 60 }, // G4 + { midi: 65, durationMs: 520, gapMs: 140 }, // F4 (held, phrase ending) ]; declare global {