0:00/0:00
// Boogie Wonderland — Earth, Wind & Fire
// 128 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 135 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(128/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: edit a riff to change every repeat.
// chords · piano · "A.PIANO 2"
const piano = note(`<
~ A B C D E ~ F G H I J K L ~@4 M N O P Q R S T U V W X Y Z AA AB I J K L ~@4 M N O P Q R S T U V W AC AD AE AF AG@2
AH@2 AI AJ AK AL AM AN AO AP I J K L I J K L U V W X Y Z AA AB I J K L ~@4 AQ AR AS AD AE AF AG@2 AH@2 AI AJ AK AL AM
AN AO AP I J K L I J K L U V W X Y Z AA AB I J K L ~@4
>`.pickRestart({
A: "[a1,a2,g3,d4]@3 ~ [g3,d4]@2 a2 ~ [g3,db4]@3 ~ db4@2 d4@2, ~@12 g3 ~ f3 ~", // Dsus4 G5 Gdim
B: "d1@2 [d2,c4,f4]@2 [g3,b3,e4] ~ [d2,a3,c4,f4]@2 ~@2 [d2,a3,d4]@2 [b3,e4]@2 [d2,f3,a3,d4] ~, ~@2 a3 ~@5 d1@5 ~@3, ~@10 f3 ~ g3 ~@3", // Dm7 Em Dm7 D5 E5 Dm
C: "[a3,c4,f4] ~ [d2,c4,f4]@2 [g3,e4] ~ [a3,c4,f4]@2 e1@2 [a3,d4]@2 [g3,b3,e4] ~ f2@2, d1@5 ~ d2 ~@3 [e2,f3] ~ f1@2 ~@2, ~@2 a3 ~ b3@2 ~@10", // F Dm7 C F D5 Em Fmaj7
D: "[g1,f3,a3,bb3,d4]@6 f3@2 ~@4 a3@2 bb3 ~, g2@5 f3@2 ~, ~@6 [a3,bb3,d4]@5 ~@5, ~@4 g1@3 ~", // Gm7 Bbmaj7
E: "[g3,d4]@2 ~@2 d4@2 [a2,g3] ~ [g3,db4]@3 ~ db4@2 [f3,d4]@2, ~@4 g3 ~@7 g3 ~@3", F: "~@6 [g3,e4] ~, ~@12 b3 ~@3",
G: "[f3,a3,bb3,d4]@10 ~@2 [a3,bb3,d4]@2 [g2,f3] ~, ~@5 f3@2 ~", // Bbmaj7 G7
H: "[g3,d4]@2 ~@2 d4@2 g3 ~ [g3,db4]@2 ~@2 db4@2 [f3,d4]@2, ~@4 g3 ~@7 g3 ~@3", // G5 Gdim Dm
I: "~@2 [a3,c4]@2 [g3,b3,e4]@2 [c4,f4]@2 ~@2 [f3,a3,d4]@2 [g3,b3,e4]@2 [f3,a3,d4] ~, ~@2 f4 ~@3 a3 ~@9", // Am Em F5 Dm Em Dm
J: "[a3,c4,f4] ~ [a3,c4]@2 [g3,b3,e4]@2 [a3,c4,f4] ~@3 [f3,a3,d4]@2 [b3,e4] ~@3, ~@2 f4 ~@9 g3@2 ~@2", // F Am Em F Dm E5
K: "[f3,a3,bb3,d4]@7 ~", L: "[g3,d4]@3 ~ [g3,d4]@3 ~ [g3,db4]@3 ~ [g3,db4]@2 [f3,d4]@2",
M: "~@2 [a3,d4,f4]@2 [g3,c4,e4]@2 [a3,d4,f4]@2 ~@2 [f3,d4]@2 [g3,b3,e4]@2 [f3,a3,d4] ~, ~@10 a3 ~@5", // Dm C Dm Em Dm
N: "[a3,d4,f4] ~ [a3,d4,f4]@2 [g3,c4]@2 [a3,d4,f4] ~@3 [f3,a3,d4]@2 [g3,b3,e4]@2 a3 ~, ~@4 e4 ~@11", // Dm C5 Dm Em
O: "d4@2 [bb3,d4]@2 c4@2 [bb3,d4]@3 ~ [f3,a3,c4]@2 [bb3,d4]@2 f3 ~, f3@9 ~@7, bb3 ~@3 a3 ~@11", // Bb F Bb
P: "[a3,d4,e4]@3 ~ [a3,d4,e4]@2 ~@2 [a3,db4,f4]@2 ~@2 [a3,db4,f4]@2 [a3,d4,f4]@2", // Asus4 Aaug Dm
Q: "~@2 [a3,d4,f4]@2 [g3,c4]@2 [a3,f4]@2 ~@2 [f3,a3,d4]@2 [g3,b3,e4]@2 [f3,a3,d4] ~, ~@4 e4 ~ d4 ~@9", // Dm C5 Dm Em Dm
R: "[a3,d4,f4] ~ [d4,f4] ~ [g3,c4,e4]@2 [a3,d4,f4] ~@3 [f3,a3,d4]@2 [g3,b3,e4]@2 a3 ~, ~ a3 ~@6", // Dm C Dm Em
S: "[f3,bb3,d4] ~ [f3,bb3,d4]@2 [a3,c4]@2 [f3,d4]@2 ~@2 [f3,a3,c4]@2 [bb3,d4]@2 f3 ~, ~@6 bb3 ~@9", // Bb Am Dm F Bb
T: "[a3,d4,e4] ~ [a3,d4,e4] ~ [a3,db4,f4] ~ [db4,f4] [a3,d4,f4], ~@12 a3 ~@3", // Asus4 Aaug Db Dm
U: "~@2 [a3,f4]@2 [g3,c4]@2 [a3,f4]@2 ~@2 [f3,d4]@2 [g3,e4]@2 [f3,a3,d4] ~, ~@2 d4 ~ e4 ~ d4 ~@3 a3 ~ b3 ~@3", // Dm C5 Dm C Dm
V: "[a3,d4,f4] ~ [d4,f4] ~ [c4,e4] ~ [d4,f4] ~@3 [f3,d4]@2 [g3,b3,e4]@2 a3 ~, ~@2 a3@2 g3@2 a3@2 ~@2 a3 ~@5", // Dm C Dm Em
W: "[bb3,d4] ~ bb3@2 [a3,c4] ~ [f3,d4] ~@3 [f3,c4]@2 [bb3,d4]@2 f3 ~, f3@5 ~@11, ~@2 d4 ~@3 bb3@2 ~@2 a3 ~@5", // Bb Am Dm F5 Bb
X: "[a3,d4,e4]@2 ~@2 [a3,d4,e4]@2 ~@2 [a3,db4,f4]@2 ~@2 [a3,f4] ~ [a3,d4,f4]@2, ~@6 db4 ~", // Asus4 Aaug Dm
Y: "~@2 [a3,f4]@2 [c4,e4] ~ [a3,f4]@2 ~@2 [a3,d4]@2 [g3,b3,e4] ~ [f3,a3,d4] ~, ~@2 d4 ~ g3@2 d4 ~@3 f3 ~@5", // Dm C Dm D5 Em Dm
Z: "[a3,d4,f4] ~ [a3,d4,f4]@2 [c4,e4] ~ [a3,d4,f4] ~@3 [f3,d4]@2 [g3,e4]@2 ~@2, ~@4 g3@2 ~@4 a3 ~ b3 ~@3", // Dm C Dm C
AA: "[bb3,d4] ~ [f3,bb3]@2 [a3,c4] ~ [f3,bb3,d4]@2 ~@2 [f3,c4]@2 d4@2 f3 ~, f3@2 d4 ~@7 a3 ~ bb3 ~@3", // Bb Bb5 Am Bb F5
AB: "[a3,d4,e4]@2 ~@2 [a3,d4,e4]@3 ~ [a3,db4,f4]@2 ~@2 [a3,f4] ~ [a3,d4,f4]@2, ~@6 db4 ~", // Asus4 Aaug Dm
AC: "[a3,d4,e4]@2 ~@2 [a3,d4,e4]@2 ~@2 [a3,c4,f4]@2 ~@2 [a3,f4] ~ [a3,d4,f4]@2, ~@6 c4 ~", // Asus4 F Dm
AD: "d4@12 f4@2 d4 ~, bb3@7 ~, f4@9 ~@7", AE: "~@8 d4 ~@3 d4@2 ~@2, [e4,g4]@7 ~, bb3@3 ~",
AF: "c4@3 ~ c4 ~@3 [d4,f4]@4 a3@2 d4 ~, [a3,e4,g4]@6 ~@6 c4 ~@3", // Dm A7
AG: "[~@12 bb3@2 ~@2 [d4,f4]@6 ~@2 [e4,c5]@3 ~@2 e5@3, [d4,f4]@13 ~@11 g4@6 ~@2, bb3@11 ~@5 bb3@11 d5@3 ~@2, ~@8 g3@20 [c4,e4]@3 ~]/2", // Dm C Dm C
AH: "[[c4,e4,g4]@6 ~@2 [d4,f4]@4 c4@2 d4 ~ [d4,f4]@12 bb3 ~@3, c5@11 ~@5, a3@6 ~@2 g3@7 ~, ~@8 c4@3 ~@5 bb3@8 ~@8]/2", // C Dm
AI: "[d4,f4]@8 [e4,g4,c5]@3 ~ d4 ~ e5@2, bb3@11 d5@2 ~@3", AJ: "[e4,g4]@5 ~@3 [d4,f4]@4 c4 ~@3, c5, a3@3 ~, c4 ~",
AK: "[d4,f4]@7 ~@5 bb3 ~ d4 ~, g3@3 ~, bb3@4 [d4,f4]@3 ~", // Dm
AL: "[bb3,d4]@7 ~ db4@4 a3 ~@3, g3@11 ~@5, e4@5 ~@3 f4@6 ~@2", AM: "d4@6 c4 ~, [a3,f4]@7 ~",
AN: "d4@8 ~@4 d4 ~@3, [a3,f4]@3 ~, ~@8 a4@7 ~", AO: "[bb3,f4]@12 d4 ~@3, d4@5 ~@3",
AP: "[a3,db4,e4,g4,a4] ~ [a3,db4,e4,g4,a4] ~ [a3,db4,e4,g4,a4] ~@5 [a3,db4,e4,g4,a4] ~ [a3,db4,e4,g4,a4] ~@3", // A7
AQ: "~@2 [a3,d4,f4]@2 [g3,c4]@2 [a3,d4,f4] ~@3 [f3,a3,d4]@2 [b3,e4]@2 [f3,a3,d4] ~, ~@4 e4 ~@7 g3 ~@3", // Dm C5 Dm E5 Dm
AR: "[a3,d4,f4] ~ [a3,d4]@2 [g3,c4]@2 [a3,d4,f4] ~@3 [f3,a3,d4]@2 [g3,b3,e4] ~@3, ~@2 f4 ~ e4 ~@11", // Dm D5 C5 Dm Em
AS: "[f3,a3,bb3,d4]@13 ~@3", // Bbmaj7
})).s("gm_piano").gain(0.31)
// bass · fretless bass · "FRETLESS"
const bass = note(`<
~ A ~@3 B C D E F G H I J K L I J M N O J M P Q J M R Q J M R Q J G H I J K L I J M N O J M P Q J M R Q J S T U V T U
W T X Y Z AA AB AC AD G H I J K L I J M R Q J M R Q J G H I J K L I J M P AE AF@2 U V T U W T X Y Z AA AB AC AD G H I
J K L I J M R Q J M R Q J G H I J K L I J
>`.pickRestart({
A: "a1@2 ~@2 a1@3 ~ a1@2 ~@2 a1@2 d2@2", B: "a1 ~ a1 ~ a1 ~ a1 d2", C: "~ d2 c2 d2 ~ d2 c2 ~",
D: "d2!2 f2 ~ f1 ~ gb1 g1", E: "~@2 g2@2 f2@2 g2@2 d2 ~ d2@2 f2@2 g2@2", F: "a2 ~ a2 ~ c3 ~ c3 d3",
G: "d1@2 d2@2 c2@2 d2@2 c2@2 a1@2 c2@3 ~", H: "[d1,d2]@3 ~ [e1,e2]@3 ~ [f1,f2]@3 ~ [f1,f2]@2 [gb1,gb2]@2",
I: "g1@2 g2@2 f2@2 g2 ~ g2@2 d2@2 f2@2 g2@2, g2 ~@15", J: "a2 d2 a2 d2 c3 d2 c3 d3",
K: "d1@2 d2@2 c2@2 d2 ~ d2@2 a1@2 c2@3 ~", L: "[d1,d2]@3 ~ [e1,e2]@3 ~ [f1,f2]@2 ~@2 [f1,f2]@2 [gb1,gb2]@2",
M: "d2 ~ d2@2 c2@2 d2@2 ~@2 a1@2 c2@2 a1@2", N: "d2 ~ d2@2 e1 ~ e1@2 f1 ~ f1@2 gb1 ~ gb1 ~",
O: "g1@2 g2@2 f2@2 g2 ~@3 d2@2 f2@2 g2@2", P: "d2 ~ d2@2 e1 ~ e1@2 f1 ~ f1 ~ gb1 ~ gb1@2",
Q: "g1 g2 f2 g2 ~ d2 f2 g2", R: "d2 ~ d2@2 e1 ~ e1@2 f1 ~ f1 ~ gb1 ~ gb1 ~", S: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~",
T: "c2@3 ~ c2@3 ~ c2@3 ~ c2@4", U: "a1@3 ~ a1 ~ a1@2 d2@3 ~ d2@4", V: "g1@3 ~ g1@3 ~ g1@3 ~ g1@4",
W: "g1@3 ~ g1@3 ~ g1@3 ~ g1@3 ~", X: "a1@3 ~ a1 ~ a1@2 d2@4 d2@4", Y: "g1@3 ~ g1@4 c2@3 ~ c2@4",
Z: "e2@3 ~ e2@4 a1@3 ~ a1@4", AA: "d2@3 ~ d2@3 ~ d2@3 ~ d2@3 ~", AB: "c2@3 ~ c2@3 ~ c2@2 ~@2 c2@4",
AC: "g1@2 g2@2 g1@3 ~ g1@3 ~ g1@4", AD: "a1 ~ a1@2 a1@2 ~@4 a1 ~ a1@2 ~@2", AE: "g1 ~ g1@2 f1@2 g1@2 ~@2 f1@2 g1@3 ~",
AF: "[c1,c2]", // C
})).s("gm_fretless_bass").gain(0.38)
// chords · clavinet
const clavinet = note(`<
~@6 A B ~@2 C ~@3 A D E ~@17 C ~@3 A D E ~@28 F ~@3 G ~@11 C ~@3 A D E ~@19 F ~@3 G ~@11 C ~@3 A D E ~
>`.pickRestart({
A: "~@2 [d4,f4] [c4,e4] ~ [d4,f4] [c4,e4] ~@9", B: "~@2 [a3,f4]!2 [g3,e4] [f3,d4] [g3,e4] [f3,d4] ~@8",
C: "~@2 d3@2 ~@4 d3 ~@5 d3@2", D: "~@2 [a4,f5]!2 [g4,e5] [f4,d5] [g4,e5] [f4,d5] ~@8",
E: "~@2 [d4,f4] [c4,e4]@2 [d4,f4] [c4,e4]@2 ~@8", F: "~@2 d3@3 ~@3 d3@3 ~@3 d3@2", G: "~ d3 ~@2 d3 ~@2 d3",
})).s("gm_clavinet").gain(0.28).pan(0.7)
// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
~@10 A B C ~ D E F@2 ~@12 G@2 H ~ I J@2 ~ K B L@2 ~@8 M N O@2 P Q R S T U V W X Y Z AA AB AC ~ A B C ~ D E F@2 AD AE@3
AF@2 O@2 AG J@2 ~ AG J@2 ~@4 P Q R S T U V W X Y Z AA AB AC ~ AG J@2 ~ AG J@2 ~ AD AE@3 AF@2 O@2 AG J@2 ~ AG J@2 ~
>`.pickRestart({
A: "[a4,d5]@3 ~@13", B: "~@4 [a4,f5] [g4,e5] [f4,d5] [g4,e5]", C: "[g4,e5] [f4,d5]@3", D: "[f4,d5,a5]@3 ~@13",
E: "~@4 [a4,f5,a5] [g4,e5,g5] [f4,d5,f5] [g4,e5,g5]", F: "[[a4,f5,a5]@7 ~]/2",
G: "[~ [a4,f5]@2 [g4,e5]@2 [f4,d5] [e4,c5] [f4,d5]@2 [a4,f5]@2 [g4,e5]@2 [f4,d5]@2 [a4,f5]]/2", H: "[f4,d5] ~@7",
I: "[f4,d5]@3 ~", J: "[~@4 [a4,f5] [g4,e5] [f4,d5] e5 e5@2 [f4,d5]@6, ~@7 g4@3 ~@6]/2", K: "[f4,d5] ~",
L: "[[a4,f5]@15 ~]/2", M: "~ [a4,f5]@2 [g4,e5]@2 f4@2 f4, ~@5 d5@3",
N: "~ [a4,f5]@2 [g4,e5]@2 [f4,d5] [e4,c5] [g4,e5]", // Dm C Dm C
O: "[[f4,d5] [a4,f5]@2 [g4,e5]@2 [f4,d5]@2 [a4,f5]@2 [g4,e5] [f4,d5] [a4,f5]@5]/2", P: "f4", Q: "g4@11 ~@5",
R: "a4@3 e4@3 g4@2 f4@3 a3@3 c4@2", S: "bb3@15 ~", T: "a4@2 g4 f4 g4@4", U: "a4@3 e4@2 g4@3 f4@2 a3@3 c4@3",
V: "bb3@13 ~@3", W: "f4 g4", X: "a4@3 bb4@3 a4@2 g4@3 f4@3 g4@2", Y: "a4@3 bb4@3 a4@2 g4@3 f4@5",
Z: "a4@3 bb4@3 a4@2 g4@2 f4@2 a4@2 g4@2", AA: "a4 g4 f4@14", AB: "~@2 f4 a4", AC: "g4@6 a4 g4 f4@7 ~",
AD: "~ a4@2 g4@2 f4@2 f4, ~@2 ab4 ~@13",
AE: "[~@2 a4@4 c5@4 f4@2 d4@2 f4@4 a4@4 g4@4 f4@4 [f4,a4,f5]@4 [e4,g4,e5]@2 [d4,f4,d5]@2 [f4,a4,f5]@9 ~, ~@6 b4 ~@41]/3", // F Em Dm F
AF: "[~ [a4,f5]@2 [g4,e5]@2 f4@2 f4@2 [a4,f5]@2 [g4,e5]@2 [f4,d5] [e4,c5] [g4,e5], ~@5 d5@4 ~@7]/2", // Dm C Dm C Dm C
AG: "[f4,d5] ~@3", // Dm
})).s("gm_acoustic_guitar_nylon").gain(0.29)
// bass · synth bass 1 · "SYN BASS 1"
const bass_2 = note("<~@54 A B C D A C E F G H I J K D L ~@27 A B C D A C E F G H I J K D L ~@24>".pickRestart({
A: "c2 c3 c2 c3 c2 c3 c2 c3", B: "c2 ~ c3@2 c2 ~ c3@2 c2@2 c3@2 c2@2 c3@2",
C: "a1@2 a2@2 a1@2 a2@2 d2@2 d3@2 d2 ~ d3@2", D: "g1 g2 g1 g2 g1 g2 g1 g2",
E: "g1@2 g2@2 g1@2 g2@2 g1@2 g2@2 g1@2 g2 ~", F: "c2@2 c3@2 c2@2 c3@2 c2@2 c3@2 c2@2 c3 ~",
G: "a1@2 a2@2 a1 ~ a2@2 d2@2 d3@2 d2@2 d3@2", H: "g1 g2 g1 g2 c2 c3 c2 c3", I: "e2 e3 e2 e3 a1 a2 a1 a2",
J: "d2 d3 d2 d3 d2 d3 d2 d3", K: "c2@2 c3@2 c2 ~ c3@2 c2@2 c3@2 c2@2 c3@2", L: "a1 ~ a1 ~ a1@2 ~@4 a1 ~ a1@2 ~@2",
})).s("gm_synth_bass_1").gain(0.31)
// other · pad poly · "POLYSYNTH"
const pad_poly = note("<~@62 A@2 B C ~ D@2 ~@35 A@2 B C ~ D@2 ~@24>".pickRestart({
A: "[~@2 c4@2 c5@11 a4]/2", B: "d5@8 c5@5 bb4@2 ~", C: "a4 g4 f4@14",
D: "[[db5,d5] ~ d5 c5 a4 g4 f4@2 d5@4 f5@16 ~@4, ~@8 db5 ~@23]/2", // Dmaj7
})).s("gm_pad_poly").gain(0.32)
// other · brass section · "BRASS 1"
const brass_section = note(`<
~ A B C D E F G H I ~@2 J K F G H L ~@8 M ~ N O M P Q R S ~ J K F G H L ~@8 M ~ N O ~@14 T S ~ U V W ~ X Y M ~ N O M P
Q R S ~ J K F G H L ~@17 T S ~ U V W ~ X Y M ~ N O M P Q R S ~ J K F G H L
>`.pickRestart({
A: "a5@2 ~@2 g5@2 ~@2 a5@2 ~@2 a5 ~ [c6,d6] c6", B: "b5 a5 ~@6 a4@2 c5 ~ g4 f4 d4 ~, ~@8 ab4 ~@7",
C: "e4 [e4,f4] d4 c4 ~@12", D: "~@8 a4@2 c5 ~@5, ~@8 ab4 ~@7", E: "a5 ~ g5 ~ a5 ~ a5 d6, ~@14 c6 ~",
F: "~@10 c6!2 ~ c6!2 ~", G: "~@8 f4 g4 a4 bb4 c5 d5 f5 g5", H: "a5!2 ~@6 c6!3 ~@5",
I: "a5@2 ~@2 g5@2 ~@2 a5@2 ~@2 a5 ~ d6@2", J: "~@2 bb5 ~@5 bb5@2 d4@2 f4@2 d4@2",
K: "a4 g4 [e4,f4] ~ g4@2 d4@2 [f4,gb4] f4@3 d4@2 d4 ~, ~@2 d4@2 ~@5 gb4 ~@6", // Fmaj7 Gbmaj7
L: "a5@2 ~@2 g5@2 ~@2 a5@2 ~@2 a5 ~ [c6,d6] ~", M: "a4@2 c5 ~@13, ab4 ~@15", N: "f4@2 d4 ~@13", O: "~@2 d6 ~@13",
P: "~@12 a4 c5 d5 f5", Q: "d5 ~@15", R: "a4 c5 d5 f5 g5 ~ d5 f5 g5 a5 c6 ~ a5 c6 [f5,g5,a5,b5] [c5,d5,e5], ~@6 d6 ~",
S: "~@2 e5 ~@5 e5 ~@5 e5 ~", T: "[a4,a5] ~ [a4,a5] ~ [a4,a5] ~@5 [a4,a5] ~ [a4,a5] ~@3",
U: "~@2 bb5 ~@5 a5 ~ d4@2 f4@2 d4@2", V: "[ab4,a4] ab4 d4@2 g4@2 d4@2 [f4,gb4] f4@3 d4@2 d4 ~, ~@2 g4 ~@6 gb4 ~@6",
W: "~@2 e5 ~@5 e5 ~@5 e5@2", X: "~ bb5 ~@2 a5 d4 f4 d4",
Y: "[ab4,a4] ab4 d4@2 g4@2 d4@2 [f4,gb4] f4@3 g4@2 d4 ~, ~@2 g4 ~@13", // Amaj7 Gbmaj7
})).s("gm_brass_section").gain(0.36).pan(0.4)
// chords · trumpet
const trumpet = note(`<
~ A B ~@2 C D E F G ~@2 H I J E F G ~@8 K ~ L M N O P ~ Q ~ H I J E F G ~@8 K ~ L M ~@14 R Q ~ S T Q ~ U V K ~ L M N O
P ~ Q ~ H I J E F G ~@17 R Q ~ S T Q ~ U V K ~ L M N O P ~ Q ~ H I J E F W
>`.pickRestart({
A: "[a4,a5]@2 ~@2 [a4,g5]@2 ~@2 a5@2 ~@2 a5 ~ [g4,a4,c6,d6] [g4,c6], ~@8 a4 ~@7", B: "[f4,b5] [d4,e4,a5] ~@14",
C: "[a4,a5]@2 ~@2 [a4,g5]@2 ~@2 [a4,a5]@2 ~@2 [a4,a5]@2 [g4,c6]!2, ~@7 [a4,d6]", // A A7 A C5 D5
D: "[e4,f4,e5,f5,g5,a5,b5] [c4,d4,d5] ~@8 [d5,g5]!2 ~ [d5,g5]!2 ~", E: "~@8 f4 g4 a4 bb4 c5 d5 f5 g5",
F: "f5!2 ~@6 a5!3 ~@5", G: "[a4,a5]@2 ~@2 [a4,g5]@2 ~@2 a5@2 ~@2 a5 ~ [a4,d6]@2, ~@8 a4 ~@7",
H: "~@2 [d5,f5,a5,bb5] ~@5 [d5,f5,bb5]@2 d4@2 f4@2 d4@2, ~@8 a5 ~@7", // Bbmaj7 Bb
I: "a4 [f4,g4] d4@2 g4@2 d4@2 [f4,gb4] f4@3 d4@2 d4 ~, ~@2 e4 ~@6 gb4 ~@6", J: "~@10 [d5,g5]!2 ~ [d5,g5]!2 ~",
K: "a4 c5 ~@6, ab4 ~@15", L: "f4@2 d4 ~@13", M: "~ d6 ~@6, ~@2 d5 ~@13", N: "a4@2 c5 ~@13, ab4 ~@15",
O: "~@12 a4 c5 d5 f5", P: "d5 ~@15", Q: "~@2 [f4,a4,b4,e5] ~@5 [f4,a4,b4,e5] ~@5 [f4,a4,b4,e5] ~",
R: "[g4,db5] ~ [g4,db5] ~ [g4,db5] ~@5 [g4,db5] ~ [g4,db5] ~@3", // Gdim
S: "~@2 [d5,f5,bb5] ~@5 [d5,a5] ~ d4@2 f4@2 d4@2, ~@4 f5 ~@3", // Bb D5
T: "[ab4,a4] ab4 d4@2 g4@2 d4@2 [f4,gb4] f4@3 d4@2 d4 ~, ~@2 g4 ~@6 gb4 ~@6", // Amaj7 Gbmaj7
U: "~@2 [d5,bb5] ~@5 [d5,a5] ~ d4@2 f4@2 d4@2, ~ f5 ~@2 f5 ~@3", // Gm D5
V: "[ab4,a4] ab4 d4@2 g4@2 d4@2 [f4,gb4] f4@3 g4@2 d4 ~, ~@2 g4 ~@13", // Amaj7 Gbmaj7
W: "[a4,a5]@2 ~@2 [a4,g5]@2 ~@2 a5@2 ~@2 a5 ~ a4@2, ~@8 a4 ~@5 d6 ~", // A A7
})).s("gm_trumpet").gain(0.31).pan(0.4)
// chords · tuba
const tuba = note(`<
~ A B ~@2 C D E F G H ~@3 I E J K ~@15 L ~@4 I E J K ~@20 M@2 N O ~ P ~@5 Q R S T ~@7 L ~@4 I E J K ~@5 U V W U V W
X@2 N O ~ P ~@16 L ~@4 I E J K
>`.pickRestart({
A: "[g4,d5]@2 ~@2 [g4,d5]@2 ~@2 [g4,db5]@2 ~@2 [g4,db5] ~ [e4,f4,c5,d5] [e4,c5]", B: "[d4,b4] [a3,c4,a4] g4 ~@13",
C: "[g4,d5]@2 ~@2 [g4,d5]@2 ~@2 [g4,db5]@2 ~@2 [g4,db5] ~ [f4,db5] e4, ~@7 d5", // G5 Gdim Db
D: "[b3,c4,d4,c5] [a4,b4] g4 ~@7 [d4,g4,c5]!2 ~ [d2,d4,g4,c5]!2 ~, ~@5 d2 ~@2", E: "~@8 f3 g3 a3 bb3 c4 d4 f4 g4",
F: "d5!2 ~@6 f5@2 f5 ~@5", G: "[g4,d5]@2 ~@2 [g4,d5]@2 ~@2 [g4,db5]@2 ~@2 [g4,db5] ~ [f4,d5]@2",
H: "~@2 [f4,a4,e5] ~@5 [f4,a4,e5] ~@5 [f4,a4,e5] ~", I: "~@10 [d4,g4,c5]!2 ~ [d2,d4,g4,c5]!2 ~, ~@5 d2 ~@2",
J: "d5!2 ~@6 f5!3 ~@5", K: "[g4,d5]@2 ~@2 [g4,d5]@2 ~@2 [g4,db5]@2 ~@2 [g4,db5] ~ f4@2, ~@14 d5 ~",
L: "a3 c4 d4 f4 g4 ~ d4 f4 g4 a4 c5 ~ d5@2 [a4,b4,c5] g4, ~@12 a4 ~@3", M: "[~@2 c4@2 c5@11 a4]/2",
N: "d5@2 ~ d5@2 ~ d5@2 c5@5 a4 bb4 ~", O: "a4 g4 f4@14", P: "d5@2 d5 c5 a4 g4 f4@2 d5@4 f5@3 ~, ~@8 db5 ~@7",
Q: "d4@3 ~@3 a3 ~ c4 ~ d4@4 c4@2", R: "d4@2 ~@4 a3 ~ c4@2 d4@4 c4@2", S: "d4@3 ~@3 d4@2 c4@2 a3@2 g3@2 f3@2",
T: "a3 ~@3, ab3 ~@15", U: "c4@3 d4", V: "f3@13 ~@3", W: "a3 f3 g3 a3 bb3 g3 a3 bb3 c4 a3 c4 d4 ~ d4 c4 bb3",
X: "[c4@4 ~@2 d4@2 f3@7 a4, ~@4 c5@11 ~]/2",
})).s("gm_tuba").gain(0.36).pan(0.4)
// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
~@4 A B C@3 B D@2 E ~ C@3 B F G H I J@3 K ~@8 L M E ~ C@3 B F G H I J@3 K ~@4 N O P Q O P R O P S T@3 U V W M X ~ W M
Y ~@9 L M E ~ C@3 B Z@2 AA AB@2 P Q O P R O P S AC@4 V W M X ~ W M Y ~@9 L M E ~ C@3 B
>`.pickRestart({
A: "~@12 [c4,d4,d6] [a3,b3,b5,c6] [f3,g3,a5] [d3,e3,f5,g5]", B: "[c3,d5,e5] c5 ~@14",
C: "[d3@44 [c4,d4,d6] [a3,b3,b5,c6] [f3,g3,a5] [d3,e3,f5,g5]]/3", // Csus2 Am F Em7
D: "[d3@2 d3@6 d3@6 ~@12 a3 bb3 c4 a3 g3 f3, ~@7 d3@9]/2", E: "d3 ~@7", F: "~ e4@3", G: "d4 e4 f4 c5", H: "a4",
I: "bb4 a4 g4 f4", J: "[e4@4 d4 e4 f4 c5 a4 g4 a4 bb4, c4@3 g3]/3", K: "[a3,a4]@15 ~", L: "~@2 d3 ~@5 d3@2 ~@4 d3@2",
M: "~@10 a3 bb3 c4 a3 g3 f3", N: "f3 g3 a3 bb3 c4 a3 bb3 c4 d4 bb3 c4 d4 e4 c4 d4 e4",
O: "f4 d4 e4 f4 g4 e4 f4 g4 a4 f4 g4 a4 bb4 g4 a4 bb4", P: "c5@3 d5", Q: "f4@15 ~", R: "f4@7 ~", S: "f4",
T: "[g4 a4@5]/3", U: "bb4", V: "[db4,e4,a4] ~ [db4,e4,a4] ~ [db4,e4,a4] ~@5 [db4,e4,a4] ~ [db4,e4,a4] ~@3",
W: "~ d3 ~@2 d3 ~@2 d3", X: "d3@3 ~", Y: "d3@5 ~@3", Z: "[[c4,c5]@21 [d4,d5]@3 [e4,e5]@4 [f4,f5]@4]/2", AA: "[a4,a5]",
AB: "[f3 g3 a3 bb3 c4 a3 bb3 c4 d4 bb3 c4 d4 e4 c4 d4 e4 f4 d4 e4 f4 g4 e4 f4 g4 a4 f4 g4 a4 bb4 g4 a4 bb4, c3]/2",
AC: "[g4@8 a4@55 ~]/4",
})).s("gm_string_ensemble_1").gain(0.31)
// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
// … 99 more lines
More by Earth, Wind & Fire
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.