diff --git a/index.html b/index.html
index 8619f58..e9e175f 100644
--- a/index.html
+++ b/index.html
@@ -98,6 +98,12 @@ canvas{display:block;}
Toggle which pads show notes. Inactive pads still make sound when hit.
+
Classical hit sound:
@@ -191,6 +197,8 @@ const LANES=[
// which pads are active (show notes) — all on by default
let activePads=[true,true,true,true,true];
+// Simple mode — thins out notes, keeping only strong beats
+let simpleMode=false;
// ── RHYTHMS ───────────────────────────────────────────
// Every pattern now uses ALL 5 lanes (0=Red/tom, 1=Yellow/snare, 2=Blue/hihat, 3=Green/tom2, 4=Kick)
@@ -4059,10 +4067,194 @@ const WORLD_PIECES=(function(){
return [hava,cucaracha,frere,cielito,waltzing,osole,ballgame,mountain];
})();
-var SYNTH_GENRES={"Prime":PRIME_PIECES,"Singalong":SINGALONG_PIECES,"Christmas":CHRISTMAS_PIECES,"Folk":FOLK_PIECES,"Spirituals":SPIRITUAL_PIECES,"World":WORLD_PIECES,"Classical":CLASSICAL_PIECES,"Video Games":VIDEOGAME_PIECES,"Chiptune Originals":CHIPTUNE_PIECES};
+// ── 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,
+ 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;
+ for(var rep=0;rep
0)bg.push({t:t,f:f/2,d:d*0.85,i:'bass',v:v*0.25});
+ mel.push({t:t,l:lanes[i]});t+=d;
+ });
+ t+=0.5;
+ }
+ 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.4});});
+ 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};
+ }
+ // ── Baa Baa Black Sheep (same melody as Twinkle but different words) ──
+ var baa=rhyme("Baa Baa Black Sheep","English (1731)",70,
+ [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],
+ [1,1,1,1,1,1,3,1,1,1,1,1,1,4],
+ 3,C4);
+ // ── London Bridge ──
+ var london=rhyme("London Bridge Is Falling Down","English (1744)",75,
+ [G4,A4,G4,F4,E4,F4,G4,D4,E4,F4,E4,F4,G4,G4,A4,G4,F4,E4,F4,G4,D4,G4,E4,C4],
+ [3,0,3,1,2,1,3,1,2,1,2,1,3,3,0,3,1,2,1,3,1,3,2,0],
+ [1,1,1,1,1,1,2,1,1,2,1,1,2,1,1,1,1,1,1,2,2,1,1,4],
+ 3,C4);
+ // ── Old MacDonald ──
+ var macdonald=rhyme("Old MacDonald Had a Farm","English (1706)",80,
+ [C4,C4,C4,G4,A4,A4,G4,E4,E4,D4,D4,C4,G4,C4,C4,C4,G4,A4,A4,G4,E4,E4,D4,D4,C4],
+ [0,0,0,3,0,0,3,2,2,1,1,0,3,0,0,0,3,0,0,3,2,2,1,1,0],
+ [1,1,1,1,1,1,2,1,1,1,1,3,2,1,1,1,1,1,1,2,1,1,1,1,4],
+ 3,C4);
+ // ── Row Row Row Your Boat ──
+ var row=rhyme("Row Row Row Your Boat","English (1852)",70,
+ [C4,C4,C4,D4,E4,E4,D4,E4,F4,G4,C5,C5,C5,G4,G4,G4,E4,E4,E4,C4,C4,C4,G4,F4,E4,D4,C4],
+ [0,0,0,1,2,2,1,2,1,3,0,0,0,3,3,3,2,2,2,0,0,0,3,1,2,1,0],
+ [1,1,1,1,2,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4],
+ 3,C4);
+ // ── Three Blind Mice ──
+ var mice=rhyme("Three Blind Mice","English (1609)",75,
+ [E4,D4,C4,E4,D4,C4,G4,F4,E4,G4,F4,E4,G4,A4,G4,F4,E4,D4,G4,A4,G4,F4,E4,D4,C4],
+ [2,1,0,2,1,0,3,1,2,3,1,2,3,0,3,1,2,1,3,0,3,1,2,1,0],
+ [1,1,2,1,1,2,1,1,2,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,4],
+ 3,C4);
+ // ── Itsy Bitsy Spider ──
+ var spider=rhyme("Itsy Bitsy Spider","English (1910s)",75,
+ [G4,C5,C5,C5,D5,E5,E5,D5,C5,D5,E5,C5,E5,E5,D5,D5,C5,G4,C5,C5,C5,D5,E5,E5,D5,C5,D5,E5,C5],
+ [3,0,0,0,1,2,2,1,0,1,2,0,2,2,1,1,0,3,0,0,0,1,2,2,1,0,1,2,0],
+ [1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,4],
+ 3,C4);
+ // ── Pop Goes the Weasel ──
+ var weasel=rhyme("Pop Goes the Weasel","English (1850s)",85,
+ [C4,E4,E4,F4,G4,G4,C4,E4,E4,D4,F4,A4,A4,G4,C4,E4,E4,F4,G4,G4,E4,C4,D4,F4,E4,C4],
+ [0,2,2,1,3,3,0,2,2,1,1,0,0,3,0,2,2,1,3,3,2,0,1,1,2,0],
+ [1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,4],
+ 3,C4);
+ // ── Hot Cross Buns ──
+ var hotcross=rhyme("Hot Cross Buns","English (1798)",65,
+ [E4,D4,C4,E4,D4,C4,C4,C4,C4,C4,D4,D4,D4,D4,E4,D4,C4],
+ [2,1,0,2,1,0,0,0,0,0,1,1,1,1,2,1,0],
+ [1,1,3,1,1,3,1,1,1,1,1,1,1,1,1,1,4],
+ 4,C4);
+ // ── Jack and Jill ──
+ var jack=rhyme("Jack and Jill","English (1765)",80,
+ [C4,C4,D4,E4,E4,F4,G4,G4,F4,E4,F4,G4,A4,A4,G4,F4,E4,D4,C4],
+ [0,0,1,2,2,1,3,3,1,2,1,3,0,0,3,1,2,1,0],
+ [1,1,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,4],
+ 3,C4);
+ // ── Humpty Dumpty ──
+ var humpty=rhyme("Humpty Dumpty","English (1797)",75,
+ [E4,G4,A4,G4,F4,E4,D4,E4,F4,E4,D4,C4,E4,G4,A4,G4,F4,E4,D4,C4],
+ [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];
+})();
+// ── RAGTIME (Scott Joplin & contemporaries, all public domain) ──
+const RAGTIME_PIECES=(function(){
+ var C3=NT.C3,D3=NT.D3,E3=NT.E3,F3=NT.F3,G3=NT.G3,A3=NT.A3,Bb3=NT.Bb3,B3=NT.B3,
+ 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 rag(name,composer,bpm,theme,lanes,durations,passes,root){
+ var bg=[],mel=[],t=0,q=0.2;
+ for(var rep=0;rep=minGap){
+ result.push(sorted[i]);
+ }
+ }
+ return result;
+}
function buildClassicalNotes(piece){
- return piece.melody.filter(function(m){return activePads[m.l];})
+ var raw=piece.melody.filter(function(m){return activePads[m.l];})
.map(function(m){
var freq=261.63;
for(var i=0;ia.time-b.time);
+ var sorted=res.sort((a,b)=>a.time-b.time);
+ return simplifyNotes(sorted);
}
function countdown(cb){