0:00/0:00
// Let's Call the Whole Thing Off — Gershwin
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 62 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)
// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order, A@4 for four bars: edit a riff to change every repeat.
// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
A B C D C D E F G H I J I J K L M N O P Q R O P S H T J T J U F V W X Y Z AA AB ~@2 AC ~ AD O AE AF R O AE L AG@3 AH
AI@3 AJ@3 AK
>`.pickRestart({
A: "b1@5 e2@7", B: "a1@9 ~ d2@14", C: "g1@9 ~ a#1@9 ~@3 a#1@2", D: "a1@5 d2@4 ~@2 d2",
E: "g2@7 ~@3 g2@2 f2@7 ~@3 f2@2", F: "e2@7 ~@3 e2@2 d#2@6 ~@4 d#2@2", G: "d2@5 ~@19", H: "a1@12 d2@11 ~",
I: "b1@4 ~ b1 a#1@3 ~@2 a#1", J: "a1@6 ~@4 a1@2 d2@7 ~@3 d2@2", K: "g2 f2", L: "e2 d#2", M: "d2 ~@5",
N: "g2@6 d2@6 g1@5 ~@7", O: "c#2", P: "f#2 b1", Q: "e2 a1", R: "d2", S: "e2 a#1", T: "g1@7 ~@3 g1@2 a#1@7 ~@3 a#1@2",
U: "g2@8 ~@2 g2@2 f2@9 ~ f2@2", V: "d2@11 ~", W: "d#2 d2", X: "a1@7 ~@11 d2@6", Y: "g1 ~@3", Z: "b2 a#2", AA: "~ c3",
AB: "b2 ~", AC: "e2 ~", AD: "~ d2 g1 ~", AE: "f#2 b2", AF: "e2 a2",
AG: "[d2@12 c#2@14 ~ c2@5 ~ e2@3 c2@2 d#2@6 ~ d#2@5 ~ d2@5 d2@5 ~ g1@5 ~ a1@4]/3",
AH: "b1 ~ c2@4 ~@2 c2@5 ~ d#2@4 ~@2 d#2@4",
AI: "[~@2 d2@5 ~ d2@6 g2@5 ~ g2@6 ~ c2@5 c2@5 ~ a#1@5 ~ a#1@6 ~ a1@5 a1@6 g#1@5 ~ g#1@4]/3",
AJ: "[~@3 c2@11 d2@12 e2@12 a2@12 d2@6 e2@4 f2@2 g2@6 g1@4]/3", AK: "~@2 c2@3 ~@3 g1@3 ~ c2@4 ~@8",
})).s("gm_acoustic_bass").gain(0.3)
// bass · acoustic bass · "ACOU BASS" · soft notes
const bass_soft = note("<~@37 A B C D E F G ~@18>".pickRestart({
A: "a2 ~", B: "~ a#2", C: "a2 d2", D: "g2 f2", E: "~ d#2", F: "d2@19 ~@5", G: "g2 ~@3",
})).s("gm_acoustic_bass").gain(0.2)
// chords · piano · "A.PIANO 1"
const piano = note(`<
A B C D C E F G H I J K J K L M N O P Q R S P T U V W X W X Y Z AA AB AC AD AE AF AE AF AG AH AI AJ AK AL AM AN AO AL
AP AQ AR@8 AS@2
>`.pickRestart({
A: "a3@9 ~ g#3@14, b2", B: "g3@9 ~ f#3@8 d3@6, a2@17 ~@7", C: "g2@9 ~ a#2@14", D: "a2@9 ~ d3@14",
E: "~@10 f#3@11 ~@3, a2", F: "g3 f3", G: "[e3,c4] [f3,a3]", H: "[d3,b3] ~@5", I: "a2@12 [d3,f#3]@11 ~, g3 ~@2",
J: "~ g3 ~ g3, b2 a#2", K: "~ g3 ~ f#3, a2 d3", L: "~@6 g3@5 ~@7 f3@6, g2@11 ~ f2@12",
M: "~@6 e3@5 ~@7 d#3@6, e2@11 ~ d#2@12", N: "d2@5 ~@13 a3@4 ~@2", O: "g3@4 ~@2 d3@2 ~@4 g2@5 ~@7", P: "[c#3,b3]@23 ~",
Q: "[f#3,a#3] [b2,a3]", R: "e3 [a2,g3], g#3 ~@3", S: "[d3,f#3]", T: "f#3@11 ~ [b2,a3]@12, a#3@5 ~@19",
U: "[e3,g#3]@11 ~ [a#2,g#3]@11 ~", V: "[a2,g3]@6 [d3,f#3]@5 ~", W: "g2@11 ~ a#2@11 ~", X: "a2@15 ~ d3@4 ~@2 d3@2",
Y: "~ f3, g2", Z: "g3@12 a3@11 ~, c3@23 ~", AA: "b3@3 a3@2 g3 a3@2 g3 f#3@3", AB: "[d#3,a3] [d3,g#3]",
AC: "c4@6 b3@4 a3@2 g3@6 f#3@5 ~", AD: "[g3,b3]@5 ~@19", AE: "b3 d4 g4 d4 a#3 c#4 g4 c#4",
AF: "~ e4 g4 e4 [c4,f#4]@3 ~, a3@3 ~@5", AG: "g4 b4 d5 b4 ~ b4 d5 b4, ~@12 f4@5 ~@7", AH: "e4 g4 c5 g4 d#4 g4 c5 g4",
AI: "b4@6 a4@3 g4@3 f#4@5 ~ f#4@6", AJ: "g4@6 d4@5 ~ g3@6 ~@6", AK: "~ b3@3, c#3, ~ g3@7", AL: "a#3 b3, f#3",
AM: "g#3 a3, e3@23 ~", AN: "f#3@11 ~ c4@12, d3@11 ~", AO: "~ b3@7, c#3", AP: "[e3,d4] [d#3,c#4]",
AQ: "[d3,c4] [c#3,b3]", // D7 C#7
AR: "[~@3 c4@3 ~@3 [a3,c4]@5 ~ b3@5 a3@6 ~ d4@5 c4@3 ~ b3@8 g3@6 c3@3 ~ c4@5 ~ a3@2 b3@6 a3@6 ~ d4@5 c4@3 ~ b3@8 g3@6 ~ c4@11 a#3@12 [f3,a3]@12 [d3,g#3]@12 [c3,b3]@12 [d3,c4]@12 [e3,d4]@11 ~ [a3,c#4]@10, ~@49 e3@12 ~@35]/8", // Am F Ddim Cmaj7 D7 E7 A
AS: "[~ f4@3 e4@2 ~ f4@6 ~@3 g2@2 c2@2 ~@4, ~@12 d4@13 ~ [c4,e4]@10 ~@12]/2", // C
})).s("gm_piano").gain(0.3)
// chords · piano · "A.PIANO 1"
const piano_2 = note(`<
A B C D C E F G H I J K J L F@2 M N O P Q R S P T U V W X Y Z AA AB AC AD AE AF AG AF AH AI AJ AK AL AM AN AO AP AQ AR
AS AT AU AV@2 AW AX@2 AY AZ BA@2
>`.pickRestart({
A: "b4@4 a#4@2 b4@3 ~ c5@11 ~@3, d4@11 ~", B: "a4@4 g#4@2 a4@3 ~ b4@9 ~@5, c4@19 ~@5",
C: "[b3,g4]@6 e4@3 ~ f#4@3 ~@3 f#4@6 e4@2, ~@5 c#4@6 ~", D: "c4@6 a4@3 ~ b4@4 ~@2 b4@6 ~@2, g4@4 ~@6 [c4,d#4]@13 ~",
E: "[c4,g4]@6 a4@2 ~@2 b4@3 ~@3 b4@5 ~@3, ~@5 [c4,e4]@5 ~@2", F: "d5@4 g4@2 ~@6 d5@3 ~ g4@2 ~@6",
G: "d5@3 ~ g4@2 ~@6 d5@3 ~ g4@5 ~@3, ~@4 d#4@3 ~", H: "d5@5 ~ c5@3 ~ b4@2 a4@6 g4@6",
I: "f#4@2 f4@2 e4@2 d#4 ~, a4@7 ~", J: "~@4 [d4,g4]@6 e4@2 f#4@2 ~@2 [c#4,f#4]@5 ~ e4@2, ~@12 c#4 ~@11",
K: "g4@5 ~ a4@3 ~ b4@3 ~@3 [c4,d#4,b4]@8, c4 ~", L: "g4@5 ~ a4@3 ~ b4@3 ~@3 [c4,e4,b4]@4 ~@4, c4 ~",
M: "d5@6 c5@4 b4@2 a4@3 ~@3 [c4,e4,g4]@3 ~@3", N: "[b3,d4,e4,g4]@9 ~@7 b4@2 c5@3 ~ d5@2",
O: "~@6 g4@3 ~ f#4@2 g4@4 a4@2 b4@3 ~ c#5@2, e5@7 ~", P: "d5@3 ~ c#5@2 b4@4 c#5@2 d5@4 ~@2 d5@6, e4@10 ~@2 f#4@9 ~@3",
Q: "b4@4 ~@2 b4@6 c5@4 ~@2 c5@5 ~, f4@5 ~ e4@5 ~", R: "[e4,a4]@6 f#4@3 ~ g4@2 a4@4 b4@2 c5@3 ~ d5@2",
S: "~@3 g4@2 f#4 g4@2 a4 b4@2 c#5, e5@11 ~", T: "b4@5 ~ b4@4 ~@2 c5@4 ~@2 c5@5 ~, f#4@2 ~ d4@3, ~@4 f4@3 ~",
U: "f#4@2 f4@2 e4@2 d4 ~, a4@19 ~@5", V: "~@4 [b3,d4,g4]@6 e4@2 [c#4,f#4]@6 e4@5 ~, ~ e4 ~@4",
W: "[c4,g4]@6 a4@3 ~ [c4,e4,b4]@13 ~", X: "~@4 [b3,d4,e4,g4]@5 ~ e4@2 f#4@6 e4@4 ~@2, ~@4 c#4@3 ~",
Y: "[c4,g4]@6 a4@3 ~ [c4,d#4,b4]@13 ~", Z: "~@4 [b4,d5]@5 ~ g4@2 [b4,d5]@6 g4@6",
AA: "[b4,d5]@6 g4@3 ~@3 [g4,d5]@6 c5@4 ~@2, ~@6 d#4@5 ~", AB: "d5@6 c5@3 ~ b4 ~ c5@3 ~ b4@2 a4@6",
AC: "g4 f#4 f4 e4, b4@19 ~@5", AD: "e5@6 d5@3 ~ c5@2 b4@6 a4@6", AE: "g4@6 a4@3 b4@3 c5@3 d5@3 e5@3 f#5@2 ~",
AF: "g5@4 ~@2 g5@3 e5@3 f#5@4 ~@2 f#5@3 e5@3", AG: "g5@4 ~@2 g5@3 a5@3 b5@3 d5@3 e5@3 f#5@3",
AH: "g5@4 ~@2 g5@3 a5@3 b5@3 a5@3 b5@3 c6@3", AI: "d6 g5 d6 g5",
AJ: "d6 ~@2 b5 d6@2 g5@2, ~@3 g5@8 ~@13, ~@6 a5@5 ~@13", AK: "d6@6 c6@3 b5@3 a5@5 ~ a5@3 ~@3",
AL: "~@3 a5@2 a5 g5 ~ a5@2 a5 g5 g5@2 g5@4 g4@6, g5@2 g5@3 ~@2 g5@3 ~@14, ~ a5@2 ~@3 a5@2 ~@3 a5@8 ~@5",
AM: "e5@2 ~ f#4 g4 a4 b4 c#5", AN: "d5 c#5 b4 c#5 d5 f#4 g#4 a4", AO: "b4@3 g#4@3 a4@3 b4@2 ~ c5@3 e4@3 f#4@3 g4@3",
AP: "a4 f#4 g4 a4 b4 a4 b4 c5", AQ: "e5@6 e4@3 f#4@3 g4@3 a4@3 b4@3 c#5@2 ~", AR: "d5@3 c#5@3 b4@3 c#5@3 d5@5 ~ d5@6",
AS: "b4@4 ~@2 b4@6 c5@5 ~ c5@6, g#4 g4", AT: "a4@4 ~@2 a4@6 b4@5 ~@2 b4@5, f#4 f4",
AU: "~@3 [g4,a4]@3 ~@2 [e4,g4,a4]@2 ~@10 a4@2 ~@2, ~@2 [e4,c5]@3 ~@10 [d#4,f#4,b4]@7 ~@2", // Gsus2 A7 C B
AV: "[~@2 c5@6 d5@2 ~@2 e5@15 ~@3 [e4,g4,a4,c5]@5 ~ a4@2 [f#4,b4]@6 a4@3 ~, ~@2 [f4,a4]@25 ~@11 d#4@8 ~@2]/2", // Am7 B5 F
AW: "~@2 c5@6 d5@2 ~@2 e5@11 ~, ~ [f4,a4]@10 ~", // F
AX: "[~ [g4,g5]@3 c5 ~ c5 g5@3 c5@3 [g4,g5]@3 c5@3 [g4,g5]@3 c5@2, ~@7 g4@2 ~@15]/2", // G
AY: "~ g4@3 f5@2 e5 f5@2 e5 d5@2, ~@2 g5@5 ~@7 a4@9 ~", AZ: "~ g4@3 a#4@3 a4@5, ~ e5@10 ~",
BA: "[~@2 a5@6 g5@3 ~ f5@2 e5@6 g5@6 [d5,g5,c6]@11 ~@11, ~ c5@5 ~ b4@6 ~@11]/2", // Csus2
})).s("gm_piano").gain(0.3)
// drums · kick
const kick = s("bd").struct(`<
A@2 B A B A C@2 D@2 E C F C@3 D G D@3 H ~ C I J C E C@4 D C K D L M ~ N O P D G ~ D ~@6 Q@3 R S Q N@3 T
>`.pickRestart({
A: "x ~@4 x ~@6", B: "x ~@10 x", C: "x!2", D: "x", E: "x ~@5 x ~@4 x", F: "x ~@4 x!2 ~@5", G: "~ x!2 ~",
H: "~ x ~ x ~@2", I: "~ x", J: "~@11 x", K: "x ~@2 x", L: "~@5 x", M: "~@7 x ~ x ~@2", N: "~ x ~@10", O: "x ~@4 x",
P: "~@8 x ~@14 x", Q: "~ x ~@5 x ~@4", R: "~ x ~@7 x ~@2", S: "x!2 ~@5 x ~@4", T: "~@5 x ~@6",
})).gain(0.3)
// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@7 A ~ B ~@5 C ~@13 C ~@23 D ~@2 B@2 ~ D ~@2>".pickRestart({
A: "~@5 x ~@6", B: "~ x", C: "~@11 x", D: "x",
})).gain(0.2)
// drums · rim
const rim = s("rim").struct("<~@36 [~ x ~ x ~ x ~ x]!6 ~@20>").gain(0.2)
// drums · snare
const snare = s("sd").struct("<A@8 ~ B A C A D A@2 ~ B E@3 ~ E@3 F A@6 ~ B ~@17 G H I J K L I M@2 ~ E>".pickRestart({
A: "~ x ~ x", B: "~ x!2 ~", C: "~@3 x ~@5 x ~ x", D: "~@3 x ~@4 x ~ x!2", E: "~ x", F: "~@6 x ~@4 x",
G: "~@17 x ~@3 x ~@2", H: "x ~@7 x ~@12 x ~@2", I: "~@2 x ~@2 x", J: "~@3 x ~@6 x ~", K: "~@4 x ~@4 x ~@2",
L: "x ~ x ~@2 x", M: "~@7 x ~@4",
})).gain(0.2)
// drums · crash
const crash = s("cr").struct("<~@35 A ~@7 B A ~@7 C ~ D B ~@2 E C@2 B>".pickRestart({
A: "x", B: "~ x", C: "~ x ~@10", D: "~ x ~@2", E: "~ x ~@5 x ~@4",
})).gain(0.35)
// drums · ride
const ride = s("rd").struct(`<
A@2 B C D E F G H I F C J D K G H I D L E G C M B I D B F N F@2 H I O ~ P Q R S T U H V W X Y Z AA X O AB AC AD AE AF
AG AH AI AJ AC AK
>`.pickRestart({
A: "x ~@2 x ~ x ~@6", B: "x ~@2 x ~@2 x ~@2 x ~ x", C: "x ~@2 x ~@2 x ~ x!2 ~ x", D: "x!4",
E: "x ~@2 x ~@2 x ~ x!2 ~@2", F: "x ~@2 x ~ x!2 ~@2 x ~@2", G: "x ~@2 x ~ x!2 ~@2 x ~ x", H: "x", I: "x!3 ~",
J: "x ~ x!2 ~@2 x ~@2 x ~ x", K: "x ~ x!2 ~@2 x ~ x!2 ~@2", L: "x ~@2 x ~ x!2 ~ x!2 ~@2",
M: "x ~ x!2 ~ x!2 ~@2 x ~ x", N: "x ~@2 x ~@2 x ~ x!4", O: "x ~ x!2", P: "x!4 ~ x!3", Q: "x ~ x!5 ~",
R: "x!2 ~ x!2 ~ x!2", S: "x ~@5 x ~@2 x ~@5 x ~@5 x ~ x", T: "x ~@5 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x", U: "x!8",
V: "x!2 ~@2", W: "~@2 x ~ x ~ x!2", X: "x ~ x!3 ~ x ~", Y: "x ~ x ~ x ~ x!2", Z: "x ~ x!3 ~ x!2", AA: "x!2",
AB: "~@12 x ~@6 x ~@4", AC: "~@4 x ~ x!2 ~@2 x ~", AD: "~ x ~@2 x ~ x!2 ~@2 x ~", AE: "~@3 x ~@8 x ~ x ~@5 x ~@3",
AF: "~ x ~ x!2 ~@5 x ~", AG: "x!2 ~@2 x ~@2 x ~@2 x ~", AH: "x!2 ~@2 x ~ x!2 ~@2 x ~", AI: "x ~ x!2 ~ x",
AJ: "~@4 x ~@2 x ~@2 x ~", AK: "~ x ~@10",
})).gain(0.25)
// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
~@4 A@3 ~@8 B ~@2 A ~@2 C ~@2 D E A F A ~@2 A ~@4 G H I J K ~@5 L ~ E ~@2 M ~ E M@2 G ~@5
>`.pickRestart({
A: "~@11 x", B: "~ x ~@2 x ~", C: "~@2 x", D: "~@5 x ~@6", E: "~@3 x", F: "~@5 x", G: "~ x", H: "~ x ~@5 x",
I: "~@2 x ~@2 x ~@2", J: "~ x ~@2 x ~ x ~", K: "~ x ~@6", L: "~@3 x ~@4", M: "x",
})).gain(0.15)
stack(bass, bass_soft, piano, piano_2, kick, kick_soft, rim, snare, crash, ride, ride_soft)
More by Gershwin
Summertime (From Porgy and Bess)A minor · 72 bpmA Foggy DayA♭ major · 120 bpmAn American in ParisC major · 122 bpmBess, you is my woman now (Porgy, Bess)G minor · 104 bpmBy StraussG major · 111 bpmFor You, for Me, for EvermoreE♭ major · 102 bpmGershwin MedleyG minor · 170 bpmIt Ain't Necessarily SoG minor · 84 bpm
Not in the database
That song isn't here.
Nothing in the database matches this link. It may have been renamed, or the address was mistyped. The closest songs to :
Real transcriptions · Editable patterns · Instrumental
Type a song.
Get Strudel code.
Chords, structure, melody, bass and drums compiled from open transcriptions into Strudel live-coding patterns. Play it here, scrub through the bars, then open it in strudel.cc and start hacking.
Smells Like Teen SpiritNirvana
The JokerSteve Miller Band · 1973
Love Me DoThe Beatles · 1964
I Don't MindJames Brown · 1961
- Real transcriptionsMcGill chord charts, Lakh MIDI and quality-filtered PDMX scores. The library includes alternate transcriptions of some songs.
- One bar, one cycleEvery layer follows the same bar timeline, keeping the code, playback and song structure aligned.
- Instrumental by designDetected vocal parts are removed. Guitar riffs, harmonica and other instrumental leads stay.