0:00/0:00
// White Christmas — Grant & Forsyth
// 84 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 78 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(84/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 1"
const piano = note(`<
~@7 A@2 B@2 C D E F G H I J K L M N O P Q@2 R S T F U V W X Y Z AA AB AC AD A@2 B@2 C D E F G H I J K L M N O P Q@2 R
S T F U AE W X Y Z AA AB AC AD AF AG@2
>`.pickRestart({
A: "[[a1,a2,a3,c#4,e4]@25 ~@3 a1@10 ~@2 a1@21 ~@3, ~@14 [a2,a3,d4,f#4]@17 ~]/2", // A D
B: "[[a1,a2,a3,c#4,e4]@26 ~@2 a1@10 ~@2 a1@23 ~, ~@7 [a2,a3,d4,f#4]@9]/2", // A D
C: "a2@10 ~@2 a2@4 e3@3 ~ a3@3 ~ [e3,a3,c#4]@7 ~, [a1,e3,a3,c#4]@8 [a1,a2]@7 ~", // A
D: "[f#3,a3,d4]@7 ~@5 a2@3 ~ [d#3,a3,c4]@8 ~@4 a2@4, a1@15 ~ a1@16, a2@11 ~@5 a2@11 ~@5, ~@8 [e3,a3,c#4]@7 ~@9 [e3,a3,c#4]@8", // D Adim A
E: "[b1,b2]@12 b2@3 ~@5 a3@3 ~ [f#3,a3,d4]@4 b2@3 ~, d4@5 ~@3, [f#3,a3]@16 b1@15 ~, ~@8 b2@5 ~@3, ~@16 f#3@7 ~@9", // B D F#m
F: "[d#2,d#3,g3,a#3,d#4]@7 ~ [e2,e3,g#3,b3,e4]@8 [e2,e3,b3,e4]@7 ~ [d#2,d#3,a#3,d#4]@7 ~", // D# E E5 D#5
G: "[a3,d4]@4 f#3@3 ~ [a3,d4]@4 [d3,f#3]@4 [a3,d4]@4 f#3@4 [a3,d4]@4 [d3,f#3]@4, d2@15 ~ d2@15 ~, d3@11 ~@5 d3@10 ~@6", // D5 D D5 D
H: "[b3,e4]@4 g#3@3 ~ [b3,e4]@4 [e3,g#3]@4 [b3,e4]@4 g#3@4 [b3,e4]@4 [e3,g#3]@4, e2@15 ~ e2@16, e3@11 ~@5 e3@10 ~@6", // E5 E E5 E
I: "[e3,a3,c#4]@4 e3@3 ~ [e3,a3,c#4]@3 ~ a2@3 ~@5 f#3@3 ~@5 [e2,d4]@2 f#2@2, a1@15 ~ [a1,a2]@12 ~@4, a2@10 ~@2 [a3,d4]@12 ~@2 a3@5 ~, ~@12 f#3@7 ~@5 f#3@8", // A E7 A D5
J: "[a2,e3,a3,c#4]@8 ~@4 a2@3 ~ [e2,e3,a3]@8 [e2,e3,g#3,b3]@8, a1@15 ~@17, ~ [e3,a3,c#4] ~@2", // A A5 E A
K: "c#4@7 ~@5 a2@3 ~ [g#3,c#4]@4 ~@4 [g#3,c#4]@4 [a2,e3]@4, [a1,e3,a3]@15 ~ a1@15 ~, a2@11 ~@5 a2@11 ~@5, ~@8 c#4@7 ~ e3@3 ~ e3@7 ~@5", // C#5 A5
L: "[g3,c#4]@4 e3@4 [g3,c#4]@4 ~ c2@2 ~ [g3,c#4]@4 e3@4 [g3,c#4]@4 e3@3 ~, [a1,a2]@11 ~ e3@4 ~@16, ~@12 b1@2 ~@2 c#2@9 ~@7", // Gdim A
M: "[d4,f#4]@4 a3@3 ~ [d4,f#4]@4 [d3,a3]@3 ~ [d4,f#4]@4 a3@4 [d4,f#4]@4 [d3,a3]@3 ~, d2@15 ~ d2@15 ~, d3@11 ~@5 d3@11 ~@5", // D D5 D D5
N: "d3@11 ~ d3@3 ~ [d3,a3,d4]@8 ~@4 d4@4, [d2,a3,e4,f4]@15 ~ [d2,f4]@16, ~@3 d3, ~@26 a3@5 ~", // D5 Dm
O: "[a3,c#4]@4 ~@4 [a3,c#4]@4 [a2,e3]@4 [a3,c#4]@4 e3@4 c#4@4 [a2,e3]@3 ~, a1@15 ~ a1@15 ~, a2@5 ~@3 a2@5 ~@3, ~@4 e3@7 ~@13 a3@7 ~", // A A5 A A5
P: "[b2,f#3,a3,d4]@7 ~ [a2,e3,a3,c#4]@7 ~ [g#2,g#3,b3]@7 ~ [f#2,f#3,a3]@8", // Bm7 A G#m F#m
Q: "[[g#3,b3]@4 e3@4 [g#3,b3]@4 [e2,e3]@4 [g#3,b3]@4 e3@3 ~ [e3,a3,c#4]@3 ~ f#2@2 g2@2 ~@4 e3@3 ~@5 g#2@3 ~ [g#3,b3,d4]@7 ~ [e3,g#3,b3,d4]@7 ~, e2@11 ~@5 e2@10 ~@2 [g#3,b3,d4]@19 ~@17, ~@32 g#2@11 ~@5 g#2@15 ~, ~@40 e3@7 ~@17]/2", // G#m E G#m A G#dim E7 G#dim
R: "[a3,c#4] e3 [a3,c#4] [a2,e3] [a3,c#4] e3 [a3,c#4] e3, a1@15 ~ [a1,a2]@14 ~@2, a2@9 ~@23, e3@3 ~@29", // A A5 A
S: "[f#3,a3,d4]@7 ~@5 a2@3 ~ [d#3,a3,c4]@8 [e3,a3,c#4]@8, a1@15 ~ [a1,a2]@14 ~@2, a2@8 [e3,a3,c#4]@7 ~@17", // D Adim A
T: "[f#3,a3,d4]@7 ~@5 b2@3 ~@5 a3@3 ~ [f#3,a3,d4]@6 ~@2, b1@15 ~ [b1,b2]@14 ~@2, b2@2 d4@3 ~@3, ~@8 [f#3,a3]@8 f#3@7 ~@9", // D B F#m
U: "[a3,d4]@4 f#3@3 ~ [a3,d4]@4 [d3,f#3]@4 [a3,d4]@4 f#3@4 [a3,d4]@4 f#3@4, d2@15 ~ [d2,d3]@15 ~, d3@11 ~@21", // D5 D D5 D
V: "[b3,e4]@4 g#3@3 ~ [b3,e4]@4 [d3,g#3]@4 [b3,e4]@4 g#3@4 [b3,e4]@4 [d3,g#3]@4, d2@15 ~ d2@16, d3@10 ~@6 d3@11 ~@5", // E5 Ddim E5 Ddim
W: "[a2,e3,a3,c#4]@11 ~ [a2,e3,a3,c#4]@3 ~ [a3,d4]@4 f#3@3 ~@5 e2@3 ~, a1@15 ~ [a1,a2]@11 ~@5, ~@16 f#3@3 ~@5 [f#3,a3,d4]@8", // A D5 A D
X: "a2@10 ~@2 a2@3 ~ [e2,f#3,a3,d4]@8 [e2,g#3,b3,d4]@8, [a1,e3,a3,c#4] ~", // D E7 A
Y: "a2@8 ~@4 a2@3 ~ [g#3,c#4]@4 ~@4 [g#3,c#4]@4 [a2,e3]@4, [a1,e3,a3]@15 ~ a1@15 ~, c#4@7 ~ c#4@7 ~ a2@10 ~@6, ~@16 e3@3 ~ e3@7 ~@5", // C#5 A5
Z: "[g3,c#4]@2 e3@2 [g3,c#4]@2 b1 c2 [c#4,f#4]@2 g3@2 ~@2 [c#2,g3]@2, [a1,a2]@12 e3@4 c#2@8 [c#4,e4]@7 ~", // Gdim F#5 C#dim A C#m
AA: "[d4,f#4]@4 a3@3 ~ [d4,f#4]@4 [d3,a3]@3 ~ [d4,f#4]@4 a3@4 [d4,f#4]@4 [d3,a3]@3 ~, d2@15 ~ d2@15 ~, d3@5 ~@3 d3@5 ~@3", // D D5 D D5
AB: "[c4,d4]@4 a3@4 [c4,d4]@4 [d3,a3]@4 [c4,d4]@4 a3@4 ~@4 a3@3 ~, d2@15 ~ [d2,d3,f4]@8 [d2,d3,c4,d4,f4]@8, [d3,f4]@3 ~@5", // Csus2 D5 Csus2 Dm Dm7 Dm
AC: "[a3,c#4] e3 [a3,c#4] [a2,e3] [f#3,a3,c#4] e3 ~ [f#2,e3], [a1,a2]@11 ~@5 f#2@8 [f#3,a3,c#4]@8", // A A5 F#m F#7 A F#m
AD: "f#3@7 ~@5 b2@3 ~ e2@8 [e2,e3]@8, [a3,b3,d4]@7 ~ [g#3,b3,d4]@8, b2@11 ~@21, ~@8 f#3@7 ~@17", // E Bm7 G#dim
AE: "[b3,e4]@4 g#3@3 ~ [b3,e4]@4 [d3,g#3]@3 ~ [b3,e4]@4 g#3@4 [b3,e4]@4 [d3,g#3]@4, d2@15 ~ d2@16, d3@10 ~@5 d4@8 ~@9, ~@16 d3@11 ~@5", // E5 Ddim E5 Ddim
AF: "[d2,d3,f#3,a3,d4]@14 ~@3 [c#2,c#3,e3,g#3,c#4]@8 ~ [b1,b2,d3,f#3,b3]@6", AG: "[~ [a1,a2,c#3,e3,a3]@17 ~@14]/2",
})).s("gm_piano").gain(0.36)
// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
~@7 A@2 B@2 C D E F G H I J K L M N C O P Q C D E F R S C J K T U V W X A@2 B@2 C D E F G H I J K L M N C O P Q C D E
F R S C J K T U V W X Y Z@2
>`.pickRestart({
A: "[a2@27 ~ a1@35 ~]/2", B: "[a2@27 ~ a1@26 ~@2 e3@8]/2", C: "a2@9 ~@3 a2 ~@3 a2@12 ~@4",
D: "a2@9 ~@3 a2 ~@3 a2@9 ~@3 a2@4", E: "b2@9 ~@3 b2 ~@3 b2@12 ~@4", F: "d#2@6 ~@2 e2@7 ~ e2@7 ~ d#2@7 ~",
G: "d2@9 ~@3 d2 ~@3 d2@10 ~@2 d2@2 d#2@2", H: "e2@8 ~@4 e2 ~@3 e2@10 ~@2 e2@3 ~",
I: "a2@9 ~@3 a2 ~@3 a2@10 ~@2 e2@2 f#2@2", J: "a2@8 ~@4 a2@3 ~ e2@6 ~@2 e2@7 ~", K: "a2@9 ~@3 a2@3 ~ a2@8 ~@4 a2@3 ~",
L: "a2@8 a1@3 ~ b1@3 ~ c#2@12 ~@4", M: "d2@9 ~@3 d2 ~@3 d2@9 ~@3 d2@3 ~", N: "d2@8 ~@4 d2 ~@3 d2@9 ~@3 d2@3 ~",
O: "a2@8 ~@4 a2@3 ~ g#2@6 ~@2 f#2@6 ~@2", P: "e2@9 ~@3 e2 ~@3 e2@9 ~@3 f#2@2 g2@2",
Q: "g#2@8 ~@4 g#2 ~@3 g#2@5 ~@3 e2@6 ~@2", R: "d2@9 ~@3 d2 ~@3 d2@8 ~@4 d2@3 ~",
S: "d2@8 ~@4 d2@3 ~ d2@10 ~@2 d2@3 ~", T: "a2@9 ~@3 a1@2 b1@2 c#2@9 ~@3 c#2@3 ~", U: "d2@9 ~@3 d2 ~@3 d2@9 ~@3 d3@4",
V: "d2@8 ~@4 d2 ~@3 d2@12 ~@4", W: "a2@9 ~@3 a2@3 ~ f#2@12 ~@4", X: "b2@7 ~ e2@3 ~ e2@3 ~",
Y: "d2@14 ~@3 c#2@8 ~ b1@6", Z: "[~@2 a1@33 ~@29]/2",
})).s("gm_electric_bass_finger").gain(0.3)
// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
~@2 A B@2 C@2 D E@3 ~@3 F G ~ H I@2 ~ J K L M N ~ O P Q R S T U V W X Y Z L AA AB@2 AC@2 ~@3 F G ~ H I@2 ~ J K L M N ~
O P Q R S T U V W X Y Z L AA AD AE@2
>`.pickRestart({
A: "e5@14 ~@3 e5@15", B: "[a4@31 b4@5 ~ b4@2 ~ a4@2 b4@2 ~ a4@19]/2",
C: "[~@15 b4 c#5@3 ~ e5@10 ~ f#5@4 ~ e5@12 ~@4 b5@12]/2", D: "a5@25 ~@7",
E: "[~@7 e5 f#5@4 e5@4 b4@4 a4 ~ f#4@2 b4@3 ~ a4@20 ~@8 b4@3 ~ a4@8 b3@4 a3@16 e3@8]/3", F: "~@4 g#4 e5 g4 d#5",
G: "f#4@3 ~", H: "[e4,c#5]@10 ~@2 [f#4,d5]@19 ~", I: "[~@8 c#5@3 ~ b4@3 ~ a4@3 ~ e4@3 ~ d4@4 c#4@20 ~@16]/2",
J: "~@8 f#5 ~ e5@2 d5@14 ~@6", K: "~@8 a4@3 ~ g4@3 ~ f4@3 ~ e4@4 d4@8", L: "[c#4,a4]@7 ~",
M: "[d4,b4]@7 ~ [c#4,a4]@7 ~ [b3,g#4]@8 [a3,f#4]@8", N: "[b3,g#4]@3 ~", O: "[c#4,a4]@27 ~@5",
P: "[d4,b4]@7 ~ [c#4,a4]@7 ~ [c4,g#4]@7 ~ [c#4,a4]@7 ~", Q: "[d4,b4]@15 ~", R: "~@16 g#4@4 e5@3 ~ d#5@4 g4@4",
S: "f#4 ~", T: "~@4 g5@3 ~ f#5@3 ~ e5@16 ~@4", U: "~ a4", V: "~@8 b4 ~ e4@6, ~@9 a4@7",
W: "[c#4,a4]@15 ~ [c#4,g#4]@15 ~", X: "[c#4,g4]@25 ~@7", Y: "[a3,f#4]@29 ~@3", Z: "~@4 d4@4 a4@3 ~ g4@4 f4@16",
AA: "[d4,b4]@15 ~ [b3,g#4]@14 ~@2", AB: "[~@4 c#5 b4 a4@4 ~@6, ~@3 e5@7 ~@6]/2",
AC: "[~@16 c#5@4 b4@4 a4@17 ~@23, ~@6 e5@15 ~@11]/2", AD: "[d4,f#4]@14 ~@3 [c#4,e4]@8 ~ [b3,d4]@6",
AE: "[~@3 c#4@34 ~@27, ~@2 a3@33 ~@29]/2",
})).s("gm_electric_guitar_jazz").gain(0.48)
// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<A B@5 C@5 ~@16 D@3 E@3 F@2 G@4 H I J@4 ~@16 D@3 E@3 K@2 G@4 H I L@3>".pickRestart({
A: "~@16 a4@7 b4@8 ~", B: "[c#5@40 f#5@15 e5@8 a4@56 b4@8 c#5@33]/5",
C: "[f#5@7 g#4@24 a4@36 e5@4 a5@24 a4@36 e5@4 a5@25]/5", D: "a5/3",
E: "[a#5@7 b5@17 a#5@7 a5@32 b5@12 a5@4 g#5@9 f#5@8]/3", F: "[a5@35 e6@4 ~ d6@4 c#6@3 d6@4 c#6@4 ~ b5@8]/2",
G: "[a5@16 g#5@15 g5@32 a5@41 b5@8 c6@7 b5@9]/4", H: "a5", I: "b5 e6", J: "a5/4",
K: "[a5@35 e6@4 ~ d6@4 c#6@3 d6@4 c#6@4 ~ b5@4 c#6@4]/2", L: "[a5@23 ~@9]/3",
})).s("gm_string_ensemble_2").gain(0.48).pan(0.3)
// other · orchestral harp · "HARP"
const orchestral_harp = note("<~@9 A B ~@15 C ~@13 D ~@19 E ~@13 F ~@3>".pickRestart({
A: "~@31 a2",
B: "b2 c#3 d3 e3 f#3 g#3 a3 [b3,c#4] d4 e4 [f#4,g#4] a4 [b4,c#5] [d5,e5] [f#5,g#5] [a5,b5] [c#6,d6] e6 ~ a6@7 ~@6, ~@17 f#6@3 ~@12, ~@9 g#6@3 ~@4", // Bsus2 F#sus2 Bsus2 Dsus2 F#sus2 Asus2 Dmaj7
C: "~@8 g#3 a3 b3 [c#4,d4] e4 f#4 [g#4,a4] [b4,c#5] [d5,e5] [f#5,g#5] [a5,b5,c#6] ~ [f#6,g#6]@5 ~@7, ~@19 [d6,e6]@4 ~@9", // Dmaj7 Amaj7 Bsus2 Dsus2 F#sus2 A F#sus2 Dsus2
D: "~@19 g#4 [a4,b4] [c#5,d5] [e5,f#5] [g#5,a5] [b5,c#6] d6 [f#6,g#6]@3 ~@3, ~@25 e6@2 ~@5", // Asus2 Dmaj7 Esus2 Amaj7 Bsus2 F#sus2
E: "~@7 a2 b2 c#3 [d3,e3] f#3 [g#3,a3] b3 [c#4,d4] [e4,f#4] [g#4,a4] [b4,c#5] [d5,e5,f#5] [g#5,a5] b5 ~@2 e6 ~@8, ~@21 c#6@2 ~@9, ~@11 d6 ~@4", // Dsus2 Amaj7 Dmaj7 Esus2 Amaj7 Bsus2 D Amaj7
F: "~@8 d3 e3 f#3 [g#3,a3] [b3,c#4] d4 [e4,f#4,g#4] [a4,b4] [c#5,d5] [e5,f#5,g#5] a5 [b5,c#6] d6@3 ~@9", // Amaj7 Bsus2 E Asus2 Dmaj7 E Bsus2
})).s("gm_orchestral_harp").gain(0.32).pan(0.3)
// chords · celesta
const celesta = note("<A@2 B@4 C@2 D@2 E ~@31 D@2 E ~@30 F@3>".pickRestart({
A: "[~@32 a7@12 ~@4 [g#6,g#7]@11 ~@5, ~@31 a6@12 ~@21]/2", // G#
B: "[[g6,g7]@24 ~@8 f#7@25 ~@7 f7@28 ~@3 [e6,e7]@12 ~@5 f#7@11 ~@5, ~@31 f#6@25 ~@7 f6@29 ~@19 f#6@11 ~@6]/4", // G E
C: "[[d6,d7]@11 ~@5 e7@14 ~@2 a7@26 ~@6, ~@15 e6@14 ~@2 a6@26 ~@7]/2", // D
D: "[~@28 a5@17 ~@19, ~@20 a7@25 ~@19, ~@22 e7@23 ~@19, ~@24 a6@21 ~@19, ~@26 e6@19 ~@19]/2",
E: "~@7 a5, ~@5 a7@3, ~@11 e7@5, ~@3 a6, ~@13 e6@3",
F: "[~@34 a6@33 ~@3 a7@19 ~@7, ~@17 c#7@9 b6@8 ~@34 a6@20 ~@8, ~@21 a7@8 ~ a7@39 [c#7,e7]@19 ~@8]/3", // C#m
})).s("gm_celesta").gain(0.4).pan(0.3)
// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2_2 = note("<A B@4 C@6 ~@8 D@2 E@6 F@6 G@2 H@6 I@4 ~@8 D@2 E@6 J@6 G@2 K@7 L@2>".pickRestart({
A: "~@31 a3",
B: "[~@15 g#3@16 [c#2,g3]@32 d2@12 a2@4 ~@32 e4@8 ~ [d3,d4]@7 [a2,e3], e4@79 ~ d3@39 ~@9, c#4@66 ~@13 d4@33 ~@16, a2@31 ~@32 a3@65, ~@63 f#3@32 f3@33]/4", // C#dim D A5
C: "[~@15 f#2@15 ~ [b2,d3]@16 [e2,e3]@16 c#4@28 [f#3,d4]@36 [e3,c#4]@28 [f#3,d4]@37, c#4@30 [b3,d4]@33 a3@128 ~, ~@63 e3@16 ~@113]/6", // Bm E D C#m D Bm
D: "[a3@15 g#3@16 g3@33]/2",
E: "[f#3@31 f3@32 e3@8 a3@8 c#4@16 d4@8 c#4@9 b3@7 a3@8 b3@28 ~@4 e4@7 ~@2 b3@7 d4@4 c#4@4 ~ b3@8]/6",
F: "[[e3,c#4]@31 [f#3,d4]@8 ~ e3@7 ~ d#3@8 [e3,c#4]@7 ~ f#3@31 g3@8 [g#3,e4]@16 ~ g3@7 [f#3,d4]@32 ~ g#3@15 [f#3,d4]@17, ~@39 c#4@8 c4@8 ~@8 d4@32 ~@24 d#4@8 ~@32 e4@17 ~@16]/6", // C#m D C#m D
G: "[[e3,c#4]@15 [f#3,d4]@16 ~ e3@15 [f#3,d4]@9 [g#3,e4]@8, ~@31 c#4@16 ~@17]/2", // C#m D C#m
H: "[[e3,c#4]@63 ~ f#3@32 f3@31 ~ e3@31 ~ f#3@16 e3@15 e4, ~@63 d4@64 c#4@32 d4@32 ~]/6", // C#m
I: "[[e3,c#4]@27 [f#3,d4,f#4]@36 [e3,c#4,e4]@28 [f#3,d4,f#4]@37]/4", // C#m D C#m D
J: "[[e3,c#4]@31 [f#3,d4]@8 ~ e3@7 ~ d#3@8 [e3,c#4]@7 ~ f#3@31 ~ d#4@7 [g#3,e4]@16 ~ g3@7 [f#3,d4]@32 ~ g#3@15 f#3@17, ~@39 c#4@8 c4@8 ~@8 d4@32 g3@8 ~@16 d#4@8 ~@32 e4@17 ~@16]/6", // C#m D C#m D
K: "[[e3,c#4]@63 ~ f#3@32 f3@31 ~ e3@31 ~ f#3@15 ~ e3@15 ~ [d3,f#4]@16 [c#3,c#4,e4]@10 [b2,b3,d4]@6, ~@63 d4@64 c#4@32 d4@16 b3@16 d4@17 ~@16]/7", // C#m D C#m Bm
L: "[~@3 [a3,c#4,e4]@35 ~@26, ~@2 a2@35 ~@27]/2", // A
})).s("gm_string_ensemble_2").gain(0.4).pan(0.6)
// other · whistle
const whistle = note("<~@45 A B C D ~@3 E F G H I ~@21>".pickRestart({
A: "~@4 c#6@5 ~@7", B: "d6@2 ~ e6 ~@2 d6@2 ~ c#6@3 c6@3 ~ c#6@8 ~@8", C: "d6@5 ~@27", D: "d#6@3 ~ e6@5 ~@23",
E: "~@16 a5@5 ~@3 b5@4 ~@4", F: "c#6@6 ~@10 c#6@7 ~@9", G: "c#6@3 ~ f#6@5 ~@15 e6@2 ~ f#6@2 ~ e6@2",
H: "~ a5@3 ~ a5@6 ~@21", I: "a5@3 e6@5 ~@24",
})).s("gm_whistle").gain(0.48)
// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@41 A@6 B C D E F@3 G@2 H I J K L ~@17>".pickRestart({
A: "[~@24 b4@3 ~ a4@49 ~@3 c#5@4 b4 ~@4 b4@2 ~ a4@27 ~@2 f#4@2 ~ a4@27 ~ [e4,f#4]@2 ~@2 e4@11 a#3 b3@3 ~ a3@4 c#4@4 e4@3 ~ e4@4 c#4@3 c#4, ~@44 a4 ~@15 e4 ~@35]/6", // Esus2
B: "e4@2 f#4@2 b3@7 ~@5", C: "~@7 b3 c#4@4 e4@3 ~ e4@4 c#4@2 b3@2 f#4@4 a4@4",
D: "a4@6 a4@2 a4@3 ~ a4@3 ~ a4@3 ~ a4@2 f#4 ~@9", E: "~@7 b4 c#5@4 e5@4 c#5 b4@2 ~@9 a4@4",
F: "[a4@8 f#4@2 e4@2 f#4@2 e4@2 b3@2 a3@6 ~@2 f#3@2 a3@12 ~@8 e4 ~ f#4@2 a4@2 b4@2 c#5@2 d5 ~ e5@20 d5@3 ~ c#5 d5 c#5 ~ b4@3 ~ c#5@3 ~]/3",
G: "[b4@8 a4@3 ~ a4@11 ~ c#5@3 ~ e5@13 ~@3 f#5@8 e5 ~@11, ~@24 b4 ~@39]/2",
H: "~@8 d5@2 e5 ~ f5@2 a5@2 b5@2 a5@2 c#6@3 ~ b5@2 a5 ~ f#5@2 ~@2", I: "a5@4 f#5 ~@27",
J: "~@19 a3@4 b3 c#4@3 e4@4 ~", K: "~@4 e4@4 f#4 ~ g#4@2 e5@7 ~ e5@4 c#5@2 b4@2 g4@2 f#4@2, ~@9 g4@2 ~@21",
L: "e4 ~@3",
})).s("gm_overdriven_guitar").gain(0.3).pan(0.2)
// other · overdriven guitar · "OVERDRIVE" · soft notes · Gmaj7
const overdriven_guitar_soft = note(`<
~@46
[~@16 b3 ~@15]
[~@22 a3 g#3 g3 ~@7, ~@21 a#3@2 ~@9]
~@3
[~@12 e3 ~@3]
[~@7 g#3 ~ f3 ~@22, ~@4 [f#3,g3] ~@11]
~@25
>`).s("gm_overdriven_guitar").gain(0.15).pan(0.2)
// drums · kick
const kick = s("bd").struct("<~@7 A ~ A ~ B@30 A ~ A ~ B@30 C D ~>".pickRestart({
A: "x ~@6 x", B: "x ~@2 x!2 ~@3", C: "x ~@16 x ~@8 x ~@5", D: "~ x ~@14",
})).gain(0.48)
// drums · snare
const snare = s("sd").struct("<~@7 [~@3 x]!38 [~ x ~ x]!30 ~@3>").gain(0.48)
// drums · crash
const crash = s("cr").struct("<~@11 A ~@15 A ~@13 A ~@3 A ~@15 A ~@13 B C ~>".pickRestart({
A: "x", B: "x ~@16 x ~@8 x ~@5", C: "~ x ~@14",
})).gain(0.4)
// drums · congas
const congas = s("conga:13").struct("<~@7 A ~ A ~ A@31 ~ A ~@34>".pickRestart({
A: "~ x ~@2",
})).gain(1.54)
// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@7 [x!8]!68 [x ~@15 x ~@8 x ~@6] [~ x ~@14] ~>").gain(1.38)
stack(
piano, bass, electric_guitar_jazz, string_ensemble_2, orchestral_harp, celesta, string_ensemble_2_2, whistle,
overdriven_guitar, overdriven_guitar_soft, kick, snare, crash, congas, jingle_bells
)
More by Grant & Forsyth
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.