Fix wrong melodies across multiple synth genres

Classical:
- Hall of the Mountain King: transpose from A minor to correct B minor key
- Toccata & Fugue: extend from 39s to 74s with full toccata continuation
- Swan Lake: transpose to B minor, fix melody contour to use repeating ascending motif
- Hungarian Dance No. 5: rewrite themes in D minor with correct melody
- Dance of the Sugar Plum Fairy: replace Für Elise melody with actual Nutcracker celesta theme

Christmas:
- God Rest Ye Merry Gentlemen: fix F natural→F#(Gb4) and Bb→B for correct E minor key
- Angels We Have Heard on High: rewrite to correct F major melody with Gloria melisma

Singalong:
- Amazing Grace: fix G5 (too high) to E5, correct melody peak
- My Bonnie Lies Over the Ocean: fix G5 (too high) to E5, correct chorus range

https://claude.ai/code/session_01MhCcEPfX3JqAk8zmvLXZ1g
This commit is contained in:
Claude
2026-03-31 11:22:41 +00:00
parent fd14076173
commit 2c67ca3b7c
+116 -48
View File
@@ -863,7 +863,7 @@ const CLASSICAL_PIECES=(function(){
var hmk=(function(){
var bg=[],mel=[];
function orch(t,freq,dur,v,inst){bg.push({t:t,f:freq,d:dur,i:inst||'strings',v:v||0.3});}
var theme=[A3,B3,C4,D4,E4,C4,E4,D4,B3,D4,Db4,A3,Db4,A3];
var theme=[B3,Db4,D4,E4,Gb4,D4,Gb4,E4,Db4,E4,Eb4,B3,Eb4,B3];
var lanes=[0,1,2,0,1,2,1,0,3,0,1,3,1,3];
var t=0;
// Pass 1: Very slow, barely audible (creeping start)
@@ -906,7 +906,7 @@ const CLASSICAL_PIECES=(function(){
theme.forEach(function(f,i){
orch(t,f,d5*0.8,0.5,'strings');orch(t,f,d5*0.8,0.35,'brass');
orch(t,f/2,d5*0.8,0.35,'bass');
if(i%4===0)bg.push({t:t,f:A3/2,d:0.3,i:'timpani',v:0.45});
if(i%4===0)bg.push({t:t,f:B3/2,d:0.3,i:'timpani',v:0.45});
mel.push({t:t,l:lanes[i]});t+=d5;
});
t+=0.2;
@@ -915,7 +915,7 @@ const CLASSICAL_PIECES=(function(){
theme.forEach(function(f,i){
orch(t,f,d6*0.8,0.6,'strings');orch(t,f,d6*0.8,0.45,'brass');
orch(t,f/2,d6*0.8,0.4,'bass');
if(i%2===0)bg.push({t:t,f:A3/2,d:0.2,i:'timpani',v:0.55});
if(i%2===0)bg.push({t:t,f:B3/2,d:0.2,i:'timpani',v:0.55});
mel.push({t:t,l:lanes[i]});t+=d6;
});
t+=0.15;
@@ -924,25 +924,25 @@ const CLASSICAL_PIECES=(function(){
theme.forEach(function(f,i){
orch(t,f,d7*0.8,0.65,'strings');orch(t,f,d7*0.8,0.5,'brass');
orch(t,f/2,d7*0.8,0.45,'bass');
bg.push({t:t,f:A3/2,d:0.15,i:'timpani',v:0.6});
bg.push({t:t,f:B3/2,d:0.15,i:'timpani',v:0.6});
mel.push({t:t,l:lanes[i]});t+=d7;
});
// Big finale: repeated chords
t+=0.15;
for(var ci=0;ci<4;ci++){
var t2=t+ci*0.4;
[A3,C4,E4,A4].forEach(function(f){
[B3,D4,Gb4,B4].forEach(function(f){
orch(t2,f,0.35,0.65,'brass');orch(t2,f,0.35,0.55,'strings');
});
bg.push({t:t2,f:A3/2,d:0.4,i:'timpani',v:0.65});
bg.push({t:t2,f:B3/2,d:0.4,i:'timpani',v:0.65});
mel.push({t:t2,l:4});
}
// Final long chord
t=t+1.8;
[A3,C4,E4,A4].forEach(function(f){
[B3,D4,Gb4,B4].forEach(function(f){
orch(t,f,2.0,0.6,'brass');orch(t,f,2.0,0.5,'strings');
});
bg.push({t:t,f:A3/2,d:1.5,i:'timpani',v:0.7});
bg.push({t:t,f:B3/2,d:1.5,i:'timpani',v:0.7});
mel.push({t:t,l:4});
return {n:"Hall of the Mountain King",composer:"Grieg",bpm:120,duration:Math.ceil(t+2.5),isClassical:true,bg:bg,melody:mel};
})();
@@ -2282,28 +2282,95 @@ const CLASSICAL_PIECES=(function(){
// Big chord
[D3,A3,D4,F4,A4].forEach(function(f){org(t,f,1.5,0.6);});
bg.push({t:t,f:D3/2,d:1.2,i:'timpani',v:0.55});mel.push({t:t,l:4});t+=1.8;
// Fugue: 6 entries accelerating
// === Toccata continuation: dramatic recitative-like passages ===
// Rapid ascending arpeggios (organ virtuosity)
var arp1=[D4,F4,A4,D5,F5,D5,A4,F4];
var a1Ln=[0,2,0,1,2,1,0,2];
[0.18,0.16,0.14].forEach(function(spd,si){
var av=0.4+si*0.06;
arp1.forEach(function(f,i){org(t,f,spd*0.8,av);mel.push({t:t,l:a1Ln[i]});t+=spd;});
t+=0.2;
});
// Sustained D minor chord with pedal point
[D3,A3,D4,F4,A4].forEach(function(f){org(t,f,2.5,0.6);});
bg.push({t:t,f:D3/2,d:2.0,i:'timpani',v:0.55});mel.push({t:t,l:4});t+=3.0;
// === Second toccata section: sequence descending through keys ===
// D minor → C major → Bb major → A major (dominant)
var seqKeys=[[D4,F4,A4,D5],[C4,E4,G4,C5],[Bb3,D4,F4,Bb4],[A3,Db4,E4,A4]];
seqKeys.forEach(function(ch,ki){
var sv=0.45+ki*0.04;
// Rapid broken chord
ch.forEach(function(f,i){org(t,f,0.15,sv);mel.push({t:t,l:[0,1,2,3][i]});t+=0.16;});
// Sustained chord
ch.forEach(function(f){org(t,f,1.2,sv);});
mel.push({t:t,l:4});t+=1.5;
});
t+=0.5;
// === Dramatic ascending chromatic passage ===
[D4,Eb4,E4,F4,Gb4,G4,Ab4,A4,Bb4,B4,C5,Db5,D5].forEach(function(f,i){
org(t,f,0.14,0.5+i*0.01);
bg.push({t:t,f:f/2,d:0.14,i:'bass',v:0.3});
mel.push({t:t,l:[0,1,2,3][i%4]});t+=0.15;
});
// Massive Neapolitan chord → V → i cadence
[Eb4,G4,Bb4,Eb5].forEach(function(f){org(t,f,1.5,0.6);});mel.push({t:t,l:4});t+=1.8;
[A3,Db4,E4,A4].forEach(function(f){org(t,f,1.2,0.6);});mel.push({t:t,l:4});t+=1.5;
// === Fugue: subject entries building in intensity ===
var subj=[D4,E4,F4,G4,A4,Bb4,A4,G4,F4,E4,D4,A3,D4];
var sLn=[0,1,2,3,0,2,0,3,2,1,0,4,0];
var speeds=[0.30,0.26,0.23,0.20,0.17,0.14];
var vols=[0.3,0.35,0.4,0.48,0.55,0.62];
// 8 entries from slow to fast, quiet to loud
var speeds=[0.32,0.28,0.25,0.22,0.20,0.18,0.16,0.14];
var vols=[0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.62];
speeds.forEach(function(spd,si){
subj.forEach(function(f,i){
org(t,f,spd*0.85,vols[si]);
if(si>1)bg.push({t:t,f:f/2,d:spd*0.85,i:'bass',v:vols[si]*0.5});
if(si>3)bg.push({t:t,f:f,d:spd*0.85,i:'strings',v:vols[si]*0.4});
if(si>3&&i%3===0)bg.push({t:t,f:D3,d:0.3,i:'timpani',v:vols[si]*0.6});
if(si>3){
bg.push({t:t,f:f,d:spd*0.85,i:'strings',v:vols[si]*0.4});
if(i%3===0)bg.push({t:t,f:D3,d:0.3,i:'timpani',v:vols[si]*0.6});
}
mel.push({t:t,l:sLn[i]});t+=spd;
});
t+=0.4;
t+=0.35;
});
// Final cascade
// === Stretto: subject entries overlapping, maximum intensity ===
// Two interleaved subjects at breakneck speed
var strSpd=0.12;
subj.forEach(function(f,i){
org(t,f,strSpd*0.85,0.65);org(t,f*2,strSpd*0.85,0.4);
bg.push({t:t,f:f/2,d:strSpd*0.85,i:'bass',v:0.5});
bg.push({t:t,f:f,d:strSpd*0.85,i:'strings',v:0.45});
if(i%2===0)bg.push({t:t,f:D3,d:0.2,i:'timpani',v:0.6});
mel.push({t:t,l:sLn[i]});t+=strSpd;
});
t+=0.3;
// === Grand finale: cascading scales and massive chords ===
// Descending cascade
[D5,C5,Bb4,A4,G4,F4,E4,D4,C4,Bb3,A3,G3].forEach(function(f,i){
org(t,f,0.13,0.6);bg.push({t:t,f:f,d:0.13,i:'strings',v:0.4});mel.push({t:t,l:[0,2,3,1][i%4]});t+=0.14;
org(t,f,0.12,0.6);bg.push({t:t,f:f,d:0.12,i:'strings',v:0.4});mel.push({t:t,l:[0,2,3,1][i%4]});t+=0.13;
});
t+=0.2;
[D3,A3,D4,F4,A4,D5].forEach(function(f){org(t,f,3.0,0.7);});
bg.push({t:t,f:D3/2,d:2.5,i:'timpani',v:0.7});mel.push({t:t,l:4});
t+=0.15;
// Ascending cascade
[D3,E3,F3,G3,A3,Bb3,C4,D4,E4,F4,G4,A4,Bb4,C5,D5].forEach(function(f,i){
org(t,f,0.11,0.6);bg.push({t:t,f:f,d:0.11,i:'strings',v:0.45});mel.push({t:t,l:[0,1,2,3][i%4]});t+=0.12;
});
t+=0.3;
// Final massive chords: iv-V-i (plagal approach)
for(var fc=0;fc<3;fc++){
var fch=[[G3,Bb3,D4,G4],[A3,Db4,E4,A4],[D3,A3,D4,F4,A4,D5]][fc];
fch.forEach(function(f){org(t,f,0.8,0.65);bg.push({t:t,f:f,d:0.8,i:'strings',v:0.5});});
bg.push({t:t,f:D3/2,d:0.7,i:'timpani',v:0.6});mel.push({t:t,l:4});t+=1.0;
}
// Sustained final D minor
[D3,A3,D4,F4,A4,D5].forEach(function(f){org(t,f,4.0,0.7);bg.push({t:t,f:f,d:4.0,i:'strings',v:0.5});});
bg.push({t:t,f:D3/2,d:3.5,i:'timpani',v:0.7});mel.push({t:t,l:4});
return {n:"Toccata & Fugue in D Minor",composer:"Bach",bpm:100,duration:Math.ceil(t+3),isClassical:true,bg:bg,melody:mel};
})();
@@ -2503,8 +2570,8 @@ const CLASSICAL_PIECES=(function(){
// ── Swan Lake (Theme) ──
var swan=(function(){
var bg=[],mel=[],t=0,q=0.55;
var theme=[A4,B4,C5,B4,A4,E4,A4,G4,F4,E4,D4,E4,F4,E4,D4,C4,B3,A3,B3,C4,D4,E4,A4];
var tLn=[0,1,2,1,0,2,0,3,2,1,0,1,2,1,0,2,1,0,1,2,0,2,0];
var theme=[B4,Db5,D5,Db5,B4,B4,Db5,D5,E5,D5,Db5,B4,A4,Gb4,B4,A4,G4,Gb4,E4,Gb4,G4,Gb4,B4];
var tLn=[1,0,0,0,1,1,0,0,0,0,0,1,2,3,1,2,2,3,3,3,2,3,1];
for(var rep=0;rep<3;rep++){
var v=0.25+rep*0.12;
var inst=rep===0?'woodwind':rep===1?'strings':'brass';
@@ -2512,17 +2579,17 @@ const CLASSICAL_PIECES=(function(){
bg.push({t:t,f:f,d:q*0.85,i:inst,v:v});
if(rep>0)bg.push({t:t,f:f/2,d:q*0.85,i:'bass',v:v*0.4});
if(rep>1)bg.push({t:t,f:f,d:q*0.85,i:'strings',v:v*0.5});
if(i%3===0){bg.push({t:t,f:A3,d:q*2,i:'bass',v:v*0.3});}
if(i%3===0){bg.push({t:t,f:B3,d:q*2,i:'bass',v:v*0.3});}
mel.push({t:t,l:tLn[i]});t+=q;
});
t+=0.5;
}
for(var c=0;c<3;c++){
[A3,C4,E4,A4].forEach(function(f){bg.push({t:t,f:f,d:q*2.5,i:'strings',v:0.55});bg.push({t:t,f:f,d:q*2.5,i:'brass',v:0.45});});
[B3,D4,Gb4,B4].forEach(function(f){bg.push({t:t,f:f,d:q*2.5,i:'strings',v:0.55});bg.push({t:t,f:f,d:q*2.5,i:'brass',v:0.45});});
mel.push({t:t,l:4});t+=q*3;
}
[A3,C4,E4,A4].forEach(function(f){bg.push({t:t,f:f,d:2.5,i:'strings',v:0.55});});
bg.push({t:t,f:A3/2,d:2.0,i:'timpani',v:0.6});mel.push({t:t,l:4});
[B3,D4,Gb4,B4].forEach(function(f){bg.push({t:t,f:f,d:2.5,i:'strings',v:0.55});});
bg.push({t:t,f:B3/2,d:2.0,i:'timpani',v:0.6});mel.push({t:t,l:4});
return {n:"Swan Lake (Theme)",composer:"Tchaikovsky",bpm:110,duration:Math.ceil(t+3),isClassical:true,bg:bg,melody:mel};
})();
@@ -2647,10 +2714,11 @@ const CLASSICAL_PIECES=(function(){
// ── Dance of the Sugar Plum Fairy ──
var sugarplum=(function(){
var bg=[],mel=[],t=0,q=0.4;
var theme=[E4,Eb4,E4,B3,D4,C4,A3,C4,E4,A4,B3,E4,Ab4,B4,A4];
var tLn=[2,1,2,3,0,2,0,2,2,1,3,2,1,0,1];
var ans=[E4,Eb4,E4,B3,D4,C4,A3];
var aLn=[2,1,2,3,0,2,0];
// Celesta melody from The Nutcracker — staccato descending/ascending pattern in E minor
var theme=[B4,A4,Ab4,A4,C5,B4,A4,Ab4,E4,Ab4,B4,E5,D5,C5,B4];
var tLn=[3,0,1,0,2,3,0,1,2,1,3,2,1,0,3];
var ans=[B4,A4,Ab4,A4,C5,B4,A4];
var aLn=[3,0,1,0,2,3,0];
for(var rep=0;rep<5;rep++){
var v=0.2+rep*0.08;
var inst=rep<2?'woodwind':rep<4?'strings':'brass';
@@ -2983,7 +3051,7 @@ const CLASSICAL_PIECES=(function(){
var canon=(function(){
var bg=[],mel=[],t=0,q=0.55;
var bassLine=[D3,A3,B3,Gb3,G3,D3,G3,A3];
// Real Pachelbel violin melody: F#-E-D-C#-B-A-B-C# (var 1) then D-C#-B-A-G-F#-G-A (var 2)
// Real Pachelbel violin melody: F#5-E5-D5-C#5-B4-A4-B4-C#5 (var 1) then D5-C#5-B4-A4-G4-F#4-G4-A4 (var 2)
var melody2=[Gb4,E4,D4,Db4,B3,A3,B3,Db4,D4,Db4,B3,A3,G3,Gb3,G3,A3];
var m2Ln=[2,1,0,1,3,0,3,1,0,1,3,0,3,2,3,0];
for(var rep=0;rep<4;rep++){
@@ -3013,10 +3081,10 @@ const CLASSICAL_PIECES=(function(){
var hungarian=(function(){
var bg=[],mel=[],t=0;
function orch(t,f,d,v,i){bg.push({t:t,f:f,d:d,i:i||'strings',v:v||0.4});}
var fast=[A4,G4,A4,E4,A4,G4,A4,E4,F4,E4,D4,C4,B3,A3,B3,C4,D4,E4,F4,E4];
var fLn=[0,3,0,2,0,3,0,2,1,2,0,1,3,0,3,1,0,2,1,2];
var slow=[A4,A4,G4,F4,E4,D4,E4,F4,G4,A4];
var sLn=[0,0,3,1,2,0,2,1,3,0];
var fast=[A4,A4,A4,A4,Bb4,A4,G4,F4,F4,E4,F4,G4,A4,A4,Bb4,A4,G4,F4,E4,D4];
var fLn=[0,0,0,0,2,0,3,1,1,2,1,3,0,0,2,0,3,1,2,0];
var slow=[D4,D4,E4,F4,F4,E4,D4,E4,F4,A4];
var sLn=[0,0,2,1,1,2,0,2,1,0];
// Fast section 1
[0.20,0.18].forEach(function(qf,qi){
var v=0.35+qi*0.1;
@@ -3051,11 +3119,11 @@ const CLASSICAL_PIECES=(function(){
t+=0.3;
});
for(var c=0;c<4;c++){
[A3,C4,E4,A4].forEach(function(f){orch(t,f,0.35,0.65,'brass');});
bg.push({t:t,f:A3/2,d:0.35,i:'timpani',v:0.65});mel.push({t:t,l:4});t+=0.45;
[D3,A3,D4,F4].forEach(function(f){orch(t,f,0.35,0.65,'brass');});
bg.push({t:t,f:D3/2,d:0.35,i:'timpani',v:0.65});mel.push({t:t,l:4});t+=0.45;
}
[A3,C4,E4,A4].forEach(function(f){orch(t,f,2.0,0.6,'brass');orch(t,f,2.0,0.5);});
bg.push({t:t,f:A3/2,d:1.5,i:'timpani',v:0.7});mel.push({t:t,l:4});
[D3,A3,D4,F4,A4].forEach(function(f){orch(t,f,2.0,0.6,'brass');orch(t,f,2.0,0.5);});
bg.push({t:t,f:D3/2,d:1.5,i:'timpani',v:0.7});mel.push({t:t,l:4});
return {n:"Hungarian Dance No. 5",composer:"Brahms",bpm:140,duration:Math.ceil(t+2.5),isClassical:true,bg:bg,melody:mel};
})();
@@ -3528,7 +3596,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,Ab4=NT.Ab4,A4=NT.A4,Bb4=NT.Bb4,B4=NT.B4,
C4=NT.C4,D4=NT.D4,Eb4=NT.Eb4,E4=NT.E4,F4=NT.F4,Gb4=NT.Gb4,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;
@@ -3609,7 +3677,7 @@ const CHRISTMAS_PIECES=(function(){
// ── God Rest Ye Merry Gentlemen (E minor / A minor) ──
var godrest=carol("God Rest Ye Merry Gentlemen","English (1500s)",120,
[E4,E4,E4,D4,C4,D4,E4,F4,G4,A4,Bb4,A4,G4,F4,E4,D4,C4,D4,E4,F4,E4,D4,C4,B3,C4,G4,G4,F4,E4,F4,G4,A4,Bb4,A4,G4,F4,E4],
[E4,E4,E4,D4,C4,D4,E4,Gb4,G4,A4,B4,A4,G4,Gb4,E4,D4,C4,D4,E4,Gb4,E4,D4,C4,B3,C4,G4,G4,Gb4,E4,Gb4,G4,A4,B4,A4,G4,Gb4,E4],
[2,2,2,1,0,1,2,1,3,0,2,0,3,1,2,1,0,1,2,1,2,1,0,3,0,3,3,1,2,1,3,0,2,0,3,1,2],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,4],
4,E4);
@@ -3623,10 +3691,10 @@ const CHRISTMAS_PIECES=(function(){
// ── Angels We Have Heard on High ──
var angels=carol("Angels We Have Heard on High","French (1862)",110,
[E4,E4,E4,E4,F4,D4,E4,F4,E4,E4,F4,D4,E4,F4,G4,F4,E4,D4,E4,C4,D4,E4,F4,D4,E4,F4,G4,F4,E4,D4,E4,C4,C4],
[2,2,2,2,1,1,2,1,2,2,1,1,2,1,3,1,2,1,2,0,1,2,1,1,2,1,3,1,2,1,2,0,0],
[1,1,1,1,1,2,1,1,1,1,1,2,1,1,2,1,1,1,1,2,1,1,1,2,1,1,2,1,1,1,1,2,4],
4,C4);
[F4,F4,F4,F4,A4,G4,F4,F4,G4,A4,F4,D4,C4,D4,F4,G4,A4,G4,F4,E4,F4,G4,A4,G4,F4,E4,F4,G4,A4,G4,F4,G4,F4],
[1,1,1,1,0,3,1,1,3,0,1,1,0,1,1,3,0,3,1,2,1,3,0,3,1,2,1,3,0,3,1,3,1],
[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,1,1,1,2,4],
4,F4);
// ── O Holy Night (in C major) ──
var oholynight=carol("O Holy Night","A. Adam (1847)",72,
@@ -3718,8 +3786,8 @@ const SINGALONG_PIECES=(function(){
[1,1,2,1,1,1,2,1,1,1,2,1,1,1,2,2,1,1,2,1,1,1,2,1,1,1,2,1,1,1,2,3],
4,E4);
var amazing=pub("Amazing Grace","J. Newton (1779)",80,
[G4,C5,E5,C5,E5,D5,C5,A4,G4,G4,C5,E5,C5,E5,D5,G5,G5,E5,C5,C5,A4,G4,G4,C5,E5,C5,E5,D5,C5],
[3,0,2,0,2,1,0,0,3,3,0,2,0,2,1,3,3,2,0,0,0,3,3,0,2,0,2,1,0],
[G4,C5,E5,C5,E5,D5,C5,A4,G4,G4,C5,E5,C5,E5,D5,E5,E5,C5,A4,A4,G4,E4,G4,C5,E5,C5,E5,D5,C5],
[3,0,2,0,2,1,0,0,3,3,0,2,0,2,1,2,2,0,0,0,3,2,3,0,2,0,2,1,0],
[1,2,1,1,2,2,1,2,2,1,2,1,1,2,4,2,1,2,1,2,1,2,1,2,1,1,2,2,4],
4,C4);
var auld=pub("Auld Lang Syne","R. Burns (1788)",95,
@@ -3743,8 +3811,8 @@ const SINGALONG_PIECES=(function(){
[3,3,2,1,3,1,1,1,3,2,1,1,1,1,2,1,3,3,1,2,1,1,1,1,2,1,3,3,1,1,1,3,1,1,1,4],
4,D4);
var bonnie=pub("My Bonnie Lies Over the Ocean","Scottish (1881)",120,
[G4,C5,C5,D5,E5,E5,D5,C5,A4,G4,C5,C5,D5,E5,G5,E5,D5,G4,C5,C5,D5,E5,E5,D5,C5,A4,A4,G4,F4,E4,F4,G4,E4,C4,E5,G5,G5,G5,E5,C5,C5,D5,E5,G5,G5,G5,F5,E5,D5,C5],
[3,0,0,1,2,2,1,0,0,3,0,0,1,2,3,2,1,3,0,0,1,2,2,1,0,0,0,3,1,2,1,3,2,0,2,3,3,3,2,0,0,1,2,3,3,3,1,2,1,0],
[G4,C5,C5,D5,E5,E5,D5,C5,A4,G4,C5,C5,D5,E5,E5,D5,C5,G4,C5,C5,D5,E5,E5,D5,C5,A4,A4,G4,F4,E4,F4,G4,E4,C4,E5,E5,E5,E5,D5,C5,C5,D5,E5,E5,E5,E5,D5,C5,A4,C5],
[3,0,0,1,2,2,1,0,0,3,0,0,1,2,2,1,0,3,0,0,1,2,2,1,0,0,0,3,1,2,1,3,2,0,2,2,2,2,1,0,0,1,2,2,2,2,1,0,0,0],
[1,1,1,1,1,2,1,1,2,1,1,1,1,1,2,1,2,1,1,1,1,1,2,1,1,2,1,1,1,1,1,2,1,4,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,4],
4,C4);
// ── Wellerman (accurate melody with driving stomp beat) ──