From 5b0100270789be9954842bdfe2ec065dcd374938 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 31 Mar 2026 04:12:28 +0000 Subject: [PATCH] Remove Prime genre (merged into Nursery Rhymes), add missing genre icons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove "Prime":PRIME_PIECES from SYNTH_GENRES (fixes ReferenceError crash) - Add Nursery Rhymes 🧒 and Ragtime 🎹 icons to synthIcons map https://claude.ai/code/session_016nhMjrAqwWXKKgBm6EQuX1 --- index.html | 113 ++++++++++++++++++----------------------------------- 1 file changed, 38 insertions(+), 75 deletions(-) diff --git a/index.html b/index.html index 4bbb0ac..df7caf3 100644 --- a/index.html +++ b/index.html @@ -598,7 +598,7 @@ const GENRES={ }; // ── CLASSICAL MODE ──────────────────────────────────── -const NT={C3:130.81,D3:146.83,Eb3:155.56,E3:164.81,F3:174.61,G3:196.00,Ab3:207.65,A3:220.00,Bb3:233.08,B3:246.94,C4:261.63,D4:293.66,Eb4:311.13,E4:329.63,F4:349.23,G4:392.00,Ab4:415.30,A4:440.00,Bb4:466.16,B4:493.88,C5:523.25,D5:587.33,Eb5:622.25,E5:659.25,F5:698.46,G5:783.99,A5:880.00,Gb3:185.00,Db4:277.18,Gb4:369.99,Db5:554.37,C6:1046.50}; +const NT={C3:130.81,D3:146.83,Eb3:155.56,E3:164.81,F3:174.61,G3:196.00,Ab3:207.65,A3:220.00,Bb3:233.08,B3:246.94,C4:261.63,D4:293.66,Eb4:311.13,E4:329.63,F4:349.23,G4:392.00,Ab4:415.30,A4:440.00,Bb4:466.16,B4:493.88,C5:523.25,D5:587.33,Eb5:622.25,E5:659.25,F5:698.46,G5:783.99,A5:880.00,Ab5:830.61,Gb3:185.00,Db4:277.18,Gb4:369.99,Db5:554.37,C6:1046.50}; function playSynth(ac,freq,t,dur,inst,vol,arr){ if(t1)bg.push({t:t,f:f/2,d:d*0.85,i:'bass',v:v*0.3}); - mel.push({t:t,l:lanes[i]});t+=d; - }); - t+=0.4; - } - var r=root||theme[0]; - [r,r*5/4,r*3/2,r*2].forEach(function(f){bg.push({t:t,f:f,d:2.0,i:'strings',v:0.45});}); - bg.push({t:t,f:r/2,d:1.5,i:'timpani',v:0.5});mel.push({t:t,l:4}); - return {n:name,composer:origin,bpm:bpm,duration:Math.ceil(t+2.5),isClassical:true,bg:bg,melody:mel}; - } - - // ── Twinkle Twinkle Little Star (C major, slow & simple) ── - var twinkle=primer("Twinkle Twinkle Little Star","Traditional (1760s)",75, - [C4,C4,G4,G4,A4,A4,G4,F4,F4,E4,E4,D4,D4,C4,G4,G4,F4,F4,E4,E4,D4,C4,C4,G4,G4,A4,A4,G4,F4,F4,E4,E4,D4,D4,C4], - [0,0,3,3,0,0,3,1,1,2,2,1,1,0,3,3,1,1,2,2,1,0,0,3,3,0,0,3,1,1,2,2,1,1,0], - [1,1,1,1,1,1,3,1,1,1,1,1,1,3,1,1,1,1,1,1,3,1,1,1,1,1,1,3,1,1,1,1,1,1,4], - 3,C4); - - // ── Mary Had a Little Lamb (C major, slow & simple) ── - var mary=primer("Mary Had a Little Lamb","S.J. Hale (1830)",80, - [E4,D4,C4,D4,E4,E4,E4,D4,D4,D4,E4,G4,G4,E4,D4,C4,D4,E4,E4,E4,D4,D4,E4,D4,C4], - [2,1,0,1,2,2,2,1,1,1,2,3,3,2,1,0,1,2,2,2,1,1,2,1,0], - [1,1,1,1,1,1,3,1,1,3,1,1,3,1,1,1,1,1,1,1,1,1,1,1,4], - 3,C4); - - // ── Happy Birthday (C major, slow & simple) ── - var birthday=primer("Happy Birthday","P.S. Hill (1893)",75, - [C4,C4,D4,C4,F4,E4,C4,C4,D4,C4,G4,F4,C4,C4,C5,A4,F4,E4,D4,Bb4,Bb4,A4,F4,G4,F4], - [0,0,1,0,1,2,0,0,1,0,3,1,0,0,0,0,1,2,1,2,2,0,1,3,1], - [1,1,2,2,2,3,1,1,2,2,2,3,1,1,2,1,1,1,2,1,1,1,1,2,4], - 3,C4); - - // ── Chopsticks (C major, simplified alternating pattern) ── - var chopsticks=primer("Chopsticks","Euphemia Allen (1877)",95, - [F4,G4,F4,G4,F4,G4,E4,G4,E4,G4,E4,G4,D4,F4,D4,F4,C4,E4,C4,E4,F4,G4,F4,G4,E4,G4,E4,G4,D4,F4,D4,F4,C4,E4,C4,E4], - [1,3,1,3,1,3,2,3,2,3,2,3,1,1,1,1,0,2,0,2,1,3,1,3,2,3,2,3,1,1,1,1,0,2,0,2], - [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4], - 3,C4); - - // ── Lavender's Blue (C major, gentle waltz feel) ── - var lavender=primer("Lavender's Blue","English Traditional (1670s)",80, - [E4,E4,D4,E4,F4,G4,G4,A4,G4,F4,F4,E4,D4,E4,E4,E4,D4,E4,F4,G4,G4,A4,G4,F4,E4], - [2,2,1,2,1,3,3,0,3,1,1,2,1,2,2,2,1,2,1,3,3,0,3,1,2], - [1,1,1,1,1,1,1,1,1,2,1,1,1,3,1,1,1,1,1,1,1,1,1,1,4], - 3,C4); - - // ── Shortnin' Bread (C major, bouncy but approachable) ── - var shortnin=primer("Shortnin' Bread","Traditional (1900s)",95, - [E5,E5,D5,C5,D5,C5,A4,G4,A4,G4,A4,G4,E5,E5,D5,C5,D5,C5,A4,G4,A4,G4,C5], - [2,2,1,0,1,0,0,3,0,3,0,3,2,2,1,0,1,0,0,3,0,3,0], - [1,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,4], - 3,C4); - - return [twinkle,mary,birthday,chopsticks,lavender,shortnin]; -})(); - // ── FOLK (public domain traditional songs) ── const FOLK_PIECES=(function(){ var C3=NT.C3,D3=NT.D3,E3=NT.E3,F3=NT.F3,G3=NT.G3,Ab3=NT.Ab3,A3=NT.A3,B3=NT.B3, @@ -3595,7 +3527,7 @@ const FOLK_PIECES=(function(){ // ── CHRISTMAS (public domain carols) ── const CHRISTMAS_PIECES=(function(){ var C3=NT.C3,D3=NT.D3,E3=NT.E3,F3=NT.F3,G3=NT.G3,A3=NT.A3,B3=NT.B3, - C4=NT.C4,D4=NT.D4,Eb4=NT.Eb4,E4=NT.E4,F4=NT.F4,G4=NT.G4,A4=NT.A4,Bb4=NT.Bb4,B4=NT.B4, + C4=NT.C4,D4=NT.D4,Eb4=NT.Eb4,E4=NT.E4,F4=NT.F4,G4=NT.G4,Ab4=NT.Ab4,A4=NT.A4,Bb4=NT.Bb4,B4=NT.B4, C5=NT.C5,D5=NT.D5,Eb5=NT.Eb5,E5=NT.E5,F5=NT.F5,G5=NT.G5; function carol(name,origin,bpm,theme,lanes,durations,passes,root){ var bg=[],mel=[],t=0,q=0.25; @@ -4075,7 +4007,7 @@ const WORLD_PIECES=(function(){ // ── NURSERY RHYMES (very simple, beginner-friendly) ── const NURSERY_PIECES=(function(){ - var C4=NT.C4,D4=NT.D4,E4=NT.E4,F4=NT.F4,G4=NT.G4,A4=NT.A4,B4=NT.B4, + var C4=NT.C4,D4=NT.D4,E4=NT.E4,F4=NT.F4,G4=NT.G4,A4=NT.A4,Bb4=NT.Bb4,B4=NT.B4, C5=NT.C5,D5=NT.D5,E5=NT.E5,G3=NT.G3,A3=NT.A3,B3=NT.B3; function rhyme(name,origin,bpm,theme,lanes,durations,passes,root){ var bg=[],mel=[],t=0,q=0.3; @@ -4155,7 +4087,38 @@ const NURSERY_PIECES=(function(){ [2,3,0,3,1,2,1,2,1,2,1,0,2,3,0,3,1,2,1,0], [1,1,2,1,1,1,2,1,1,1,1,2,1,1,2,1,1,1,1,4], 3,C4); - return [baa,london,macdonald,row,mice,spider,weasel,hotcross,jack,humpty]; + // ── Classics (from Prime, simple versions) ── + var twinkle=rhyme("Twinkle Twinkle Little Star","Traditional (1760s)",75, + [C4,C4,G4,G4,A4,A4,G4,F4,F4,E4,E4,D4,D4,C4,G4,G4,F4,F4,E4,E4,D4,C4,C4,G4,G4,A4,A4,G4,F4,F4,E4,E4,D4,D4,C4], + [0,0,3,3,0,0,3,1,1,2,2,1,1,0,3,3,1,1,2,2,1,0,0,3,3,0,0,3,1,1,2,2,1,1,0], + [1,1,1,1,1,1,3,1,1,1,1,1,1,3,1,1,1,1,1,1,3,1,1,1,1,1,1,3,1,1,1,1,1,1,4], + 3,C4); + var mary=rhyme("Mary Had a Little Lamb","S.J. Hale (1830)",80, + [E4,D4,C4,D4,E4,E4,E4,D4,D4,D4,E4,G4,G4,E4,D4,C4,D4,E4,E4,E4,D4,D4,E4,D4,C4], + [2,1,0,1,2,2,2,1,1,1,2,3,3,2,1,0,1,2,2,2,1,1,2,1,0], + [1,1,1,1,1,1,3,1,1,3,1,1,3,1,1,1,1,1,1,1,1,1,1,1,4], + 3,C4); + var birthday=rhyme("Happy Birthday","P.S. Hill (1893)",75, + [C4,C4,D4,C4,F4,E4,C4,C4,D4,C4,G4,F4,C4,C4,C5,A4,F4,E4,D4,Bb4,Bb4,A4,F4,G4,F4], + [0,0,1,0,1,2,0,0,1,0,3,1,0,0,0,0,1,2,1,2,2,0,1,3,1], + [1,1,2,2,2,3,1,1,2,2,2,3,1,1,2,1,1,1,2,1,1,1,1,2,4], + 3,C4); + var chopsticks=rhyme("Chopsticks","Euphemia Allen (1877)",95, + [F4,G4,F4,G4,F4,G4,E4,G4,E4,G4,E4,G4,D4,F4,D4,F4,C4,E4,C4,E4,F4,G4,F4,G4,E4,G4,E4,G4,D4,F4,D4,F4,C4,E4,C4,E4], + [1,3,1,3,1,3,2,3,2,3,2,3,1,1,1,1,0,2,0,2,1,3,1,3,2,3,2,3,1,1,1,1,0,2,0,2], + [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4], + 3,C4); + var lavender=rhyme("Lavender's Blue","English Traditional (1670s)",80, + [E4,E4,D4,E4,F4,G4,G4,A4,G4,F4,F4,E4,D4,E4,E4,E4,D4,E4,F4,G4,G4,A4,G4,F4,E4], + [2,2,1,2,1,3,3,0,3,1,1,2,1,2,2,2,1,2,1,3,3,0,3,1,2], + [1,1,1,1,1,1,1,1,1,2,1,1,1,3,1,1,1,1,1,1,1,1,1,1,4], + 3,C4); + var shortnin=rhyme("Shortnin' Bread","Traditional (1900s)",95, + [E5,E5,D5,C5,D5,C5,A4,G4,A4,G4,A4,G4,E5,E5,D5,C5,D5,C5,A4,G4,A4,G4,C5], + [2,2,1,0,1,0,0,3,0,3,0,3,2,2,1,0,1,0,0,3,0,3,0], + [1,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,4], + 3,C4); + return [baa,london,macdonald,row,mice,spider,weasel,hotcross,jack,humpty,twinkle,mary,birthday,chopsticks,lavender,shortnin]; })(); // ── RAGTIME (Scott Joplin & contemporaries, all public domain) ── @@ -4244,7 +4207,7 @@ const RAGTIME_PIECES=(function(){ return [entertainer,maple,easyw,elite,solace,peacherine,cascades,pineapple]; })(); -var SYNTH_GENRES={"Prime":PRIME_PIECES,"Nursery Rhymes":NURSERY_PIECES,"Singalong":SINGALONG_PIECES,"Christmas":CHRISTMAS_PIECES,"Folk":FOLK_PIECES,"Spirituals":SPIRITUAL_PIECES,"World":WORLD_PIECES,"Ragtime":RAGTIME_PIECES,"Classical":CLASSICAL_PIECES,"Video Games":VIDEOGAME_PIECES,"Chiptune Originals":CHIPTUNE_PIECES}; +var SYNTH_GENRES={"Nursery Rhymes":NURSERY_PIECES,"Singalong":SINGALONG_PIECES,"Christmas":CHRISTMAS_PIECES,"Folk":FOLK_PIECES,"Spirituals":SPIRITUAL_PIECES,"World":WORLD_PIECES,"Ragtime":RAGTIME_PIECES,"Classical":CLASSICAL_PIECES,"Video Games":VIDEOGAME_PIECES,"Chiptune Originals":CHIPTUNE_PIECES}; function simplifyNotes(notes){ if(!simpleMode||notes.length<2)return notes; @@ -4387,7 +4350,7 @@ function updateHitModeVisibility(){ // ── MENU ─────────────────────────────────────────────── function buildMenu(){ const gt=document.getElementById("gtabs");gt.innerHTML=""; - var synthIcons={"Singalong":"\uD83C\uDFB5","Christmas":"\uD83C\uDF84","Folk":"\uD83C\uDFB6","Spirituals":"\uD83D\uDE4F","World":"\uD83C\uDF0D","Classical":"\uD83C\uDFBB","Video Games":"\uD83C\uDFAE","Chiptune Originals":"\uD83D\uDC7E"}; + var synthIcons={"Nursery Rhymes":"\uD83E\uDDD2","Singalong":"\uD83C\uDFB5","Christmas":"\uD83C\uDF84","Folk":"\uD83C\uDFB6","Spirituals":"\uD83D\uDE4F","World":"\uD83C\uDF0D","Ragtime":"\uD83C\uDFB9","Classical":"\uD83C\uDFBB","Video Games":"\uD83C\uDFAE","Chiptune Originals":"\uD83D\uDC7E"}; var allGenres=Object.keys(SYNTH_GENRES).concat(Object.keys(GENRES)); var anyHidden=hiddenGenres.length>0; allGenres.forEach(function(g){