0:00/0:00
// Piano Sonata No.30 Op.109 — Ludwig van Beethoven
// 258 bpm, 6/8, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/2596481; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 177 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(258/3)
// 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 · overdriven guitar · "Rhythm Guitar"
const overdriven_guitar = note(`<
A B C D E F G H I J K L I J K L M N O@2 M N P@2 Q R S T ~ U V W@4 X Y Z@2 AA AB AC AD AE AF AG AH AI AJ AK AL AM AL AM
AN AO AP@2 AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BF BM BN BO BP@2 BQ@2 BR BS BT BU@3 BV
BW@7 BX BY BZ@8 CA@8 CB CC CD@2 ~@3 CE CF CG@5 CH@8 CI CJ@2 CK@2 CL@2 CM@8 CN CO CP@2 CQ@5 CR CS CT ~ CU@6 CV
>`.pickRestart({
A: "[e3,b3,e4]", B: "[d3,b3,d4]", C: "[c3,e3,c4] [c3,e3,c4,c5]", D: "[b2,f#3,b3,f#4]", E: "[a2,e3,a3]",
F: "[g2,e3,g3]", G: "[e3,b3,e4,e5] [b2,f#3,b3,d#5]", H: "[e3,b3,e4]@5 ~@11", I: "~@3 f#3@2 g3@3 a3@8",
J: "~@3 g3@2 a3@3 b3@8", K: "[a3,f#4] [a#3,g4]", L: "[b3,f#4] [e3,g4]", M: "~@3 [f#3,f#4]@2 [g3,e4]@3 [a3,d#4]@5 ~@3",
N: "~@3 [g3,g4]@2 [a3,f#4]@3 [b3,e4]@5 ~@3", O: "[~@19 f#4@5 [e3,g4]@8, a3 a#3 b3 ~, ~@3 f#4@8 g4@8 ~@13]/2",
P: "[~@19 f#4@5 [e3,g4]@5 ~@3, a3 a#3 b3 ~, ~@3 f#4@8 g4@8 ~@13]/2", Q: "g3@5 f#3@3 d#3@5 e3@3", R: "b2@8 b2@5 b2@3",
S: "b2@8 a2@5 b2@3", T: "c3 b2", U: "~@5 [f#4,a4]@3 [e4,g4]@5 [d#4,f#4]@3",
V: "[e4,g4]@5 [d4,f#4]@3 [c#4,e4]@5 [b3,d4]@3", // Em D C#m Bm
W: "[a#3@5 g3@3 f#3@5 f3@3 ~@3 f#4@2 a#4@3 a#3@3 b3@2 c#4@3 ~@3 f#4@2 b4@3 ~@3 c#4@2 d4@3 ~@8 a#4@5 b4@3, c#4@8 b4@11 ~@5 f#4@11 ~@5 f#4@16 ~@8, ~@16 f#3@8 ~@8 b3@11 ~@21]/4",
X: "c#5@3 f#4@13", Y: "[f#3,c#5]@3 [a#3,a#4]@2 c#4@3 a#3@3 b3@2 c#4@3, ~@5 f#4@11",
Z: "[[f#3,d5]@3 [b3,b4]@2 d4@3 b3@3 c#4@2 d4@3 f#3@3 c#4@2 d4@3 f#3@3 e4@2 d4@3, ~@5 f#4@16 ~@11]/2", // D B
AA: "f#3@3 e4@2 f#4@3 f#3@3 g4@2 f#4@3", AB: "f#3@3 g4@2 a#4@3 [b3,f#4,b4]@3 b3@2 a#4@3",
AC: "[b3,f#4,b4]@3 b3@2 a#4@3 [b3,f#4,b4]@5 f#5@3", AD: "f5@5 g#3@3 c#3@3 d#3@2 f3@3",
AE: "c#3@3 a3@2 f#3@3 c3@3 f#3@2 d#3@3", AF: "b2@3 d#3@2 f#3@3 b2@3 c#3@2 d#3@3",
AG: "b2@3 g3@2 e3@3 a#2@3 e3@2 c#3@3", AH: "a2@3 c#3@2 e3@3 a2@3 b2@2 c#3@3", AI: "a2@3 f3@2 d3@3 g#2@3 d3@2 b2@3",
AJ: "g2@3 a2@2 b2@3 c3@3 d3@2 b2@3", AK: "g2@3 c3@2 e3@3 g2@3 b2@2 d3@3", AL: "f2@3 g2@2 b2@3 d3@3 b2@2 g2@3",
AM: "e2@3 g2@2 c3@3 e3@3 c3@2 g2@3", AN: "b3@3 d4@2 c4@3 b3@3 a#3@2 b3@3", AO: "d4@3 b3@2 f#3@3 c#4@3 a#3@2 f#3@3",
AP: "[c#3,f#3]@5 ~@3 [c#3,f#3]@5 ~@3", AQ: "[d3,f#3,d4] [c#3,f#3,c#4]",
AR: "[b2,f#3,b3]@8 [a2,f#3,a3]@5 [b2,g3,b3]@3", AS: "[f#2,c#3,f#3,c#4]@3 g#2@2 a#2@3 b2@3 c#3@2 d3@3",
AT: "e3@3 f#3@2 g#3@3 a#3@3 b3@2 c#4@3", AU: "d4@3 e4@2 f#4@3 g#4@3 a4@2 a#4@3",
AV: "b4@3 a#4@2 b4@3 c#5@3 d5@2 e5@3", AW: "[f#4,f#5]@5 ~@3 [f#3,c#4,f#4]@5 ~@3", AX: "[f#3,b3,f#4]",
AY: "[f#3,a3,f#4]", AZ: "[g3,b3,g4]@3 g3@2 g3@3 [e3,e4]@3 e3@2 e3@3", BA: "[f#3,f#4]@3 f#3@2 f#3@3 f#3@3 c#4@2 f#4@3",
BB: "b4", BC: "a4", BD: "g4 e4", BE: "f#4", BF: "e4", BG: "d4", BH: "c4 a3", BI: "b3", BJ: "a3", BK: "g3",
BL: "f3 d3", BM: "g#3", BN: "g3 e4", BO: "g#4 f4", BP: "[~ c5@2 b4]/2", BQ: "[b3 d4@2 c4]/2", BR: "~ f4", BS: "e4 c5",
BT: "[d4,f4] [b3,d4]", BU: "[c4 f#4@2 e4@2 d#4]/3", BV: "b3!2",
BW: "[a#3@20 [g4,b4]@16 [f#4,a4]@16 [e4,b4]@8 [g4,b4]@8 [f#4,a#4]@16 [g4,b4]@8 [e4,b4]@8 [f#4,a#4]@5 ~@7]/7", // G F#m E5 G F# G E5 F#
BX: "~@4 [f#4,b4]@5 ~@7", BY: "~@4 [f#4,a#4]@5 ~@7",
BZ: "[~ [e3,b3,e4]@4 [d3,b3,d4]@4 [c3,e3,c4]@2 [c3,e3,c4,c5]@2 [b2,f#3,b3,f#4]@4 [a2,e3,a3]@4 [g2,e3,g3]@4 [e3,b3,e4,e5]@2 [b2,f#3,b3,d#5]@2 [e3,b3,e4]@3]/8", // E5 G C B5 A5 C E5 B …
CA: "[~@4 [d3,b3,d4]@16 [c3,e3,c4]@8 [c3,e3,c4]@8 [b2,f#3,b3]@16 [a2,e3,a3]@16 [g2,e3,g3]@16 [e3,b3,e4]@8 [b2,f#3,b3]@8 [e3,b3,e4]@8 [b2,d3,b3]@8 [c3,g3,c4]@5 ~@7]/8", // G C B5 A5 C E5 B5 E5 …
CB: "~@9 [d4,f4]@3 [c4,e4]@4", CC: "~ [b3,d4]@3 [c4,e4]@5 [b3,d4]@3 [a3,c4]@4",
CD: "[~ [g3,b3,d4]@3 [f#3,c4,d#4]@8 [g3,b3,d4]@8 ~@12]/2", CE: "~@4 c5@5 b4@3 g#4@4", CF: "~ a4@3 a4@8 a4@4",
CG: "[~ a4@3 a4@32 ~@3 b4@2 d#5@3 d#4@3 e4@2 f#4@3 ~@3 b4@2 e5@3 ~@3 f#4@2 g4@3 b3@3 f#4@2 g4@3 [b3,d#5]@3 a4, ~@44 b4@11 ~@5 b4@16 ~@4, ~@52 e4@11 ~@17]/5", // B
CH: "[~ [g4,e5]@3 [b3,f#5]@3 f#4@2 e4@3 b3@3 d#4@2 e4@3 [b3,f#5]@3 [d#4,d#5]@2 f#4@3 d#4@3 e4@2 f#4@3 [b3,g5]@3 [e4,e5]@2 g4@3 e4@3 f#4@2 g4@3 b3@3 f#4@2 g4@3 b3@3 a4@2 [g4,e5]@3 [b3,f#5]@3 f#4@2 e4@3 b3@3 d#4@2 e4@3 b3@3 f#4@2 g4@3 b3@3 a4@2 g4@3 b3@3 a4@2 b4@3 b3@3 c5@2 b4@3 b3@3 c5@2 d#5@3 [e4,b4,e5]@3 e4, ~@7 b4@13 ~@5 b4@11 ~@5 b4@19 d#5@5 ~@6 b4@19 ~@38]/8", // C B5 D# Em E C B5 E5
CI: "~ d#5@3 [e4,b4,e5]@3 e4@2 d#5@3 [e4,b4,e5]@4", CJ: "[~ b4@3 a#4@5 g4@5 ~ f#4@2 e4@3 e4@5 c#4@3 d4@4]/2",
CK: "[~ f5@8 f4@5 ~ e4@2 d4@3 d4@5 b3@3 c4@4]/2", CL: "[~ d#5@8 d#4@5 ~ d4@2 c4@3 c4@5 a3@3 a#3@4]/2",
CM: "[~ a#5@3 c3@3 d3@2 e3@3 f3@3 g3@2 e3@3 c3@3 f3@2 a3@3 c3@3 e3@2 g3@3 a#2@3 c3@2 e3@3 g3@3 e3@2 c3@3 a2@3 c3@2 f3@3 a3@3 f3@2 c3@3 a#2@3 c3@2 e3@3 g3@3 e3@2 c3@3 a2@3 c3@2 f3@3 a3@3 f3@2 c3@3 e3@3 g3@2 f3@3 e3@3 d#3@2 e3@3 g3@3 f#3@2 e3@3 d#3@3 e3]/8",
CN: "~ f#3@3 [f#2,b2]@5 ~@3 [f#2,b2]@4", CO: "~@4 [f#2,b2]@5 ~@3 [f#2,b2]@4",
CP: "[~ [g2,b2,g3]@2 [f#2,b2,f#3]@2 [e2,b2,e3]@2 [b2,d3]]/2", // G B5 E5 Bm
CQ: "[~ [e2,c3,e3]@3 [f#2,b2,f#3]@3 ~@5 e2@3 f#2@2 g2@3 a2@3 b2@2 c#3@3 d#3@3 e3@2 f#3@3 g3@3 a3@2 b3@3 c#4@3 d4@2 d#4@3 e4@3 d#4@2 e4@3 f#4@3 g4@2 a4@3 [b3,b4]@5 ~@3 [b2,f#3,b3]@4]/5", // C B5 B B5
CR: "~@4 [e3,b3,e4]@5 ~@7", CS: "~@4 [a3,d#4]@5 ~@3 [a3,d#4]@4", CT: "~@4 g3@5 ~@7",
CU: "[~@4 b4@8 b4@8 b4@8 a4@8 [g4,e5]@8 [g4,e5]@8 [e5,g5]@8 [e5,g5]@8 [c5,e5]@8 [b4,e5]@8 [a4,e5]@5 ~@3 [f#4,d#5]@4]/6", // C Em C E5 A5 D#m
CV: "~@4 [g4,e5]@5 ~@7", // C
})).s("gm_overdriven_guitar").gain(0.22)
// bass · electric bass pick · "Bass Guitar"
const bass = note(`<
A B C D E F G H I@2 J@2 I@2 J@2 I@2 J@2 I@2 K@2 L M N O P ~@2 Q R@2 S T R@2 S U V W X Y Z AA AB AC AD AE AF AG AF AG
AH AI AJ@2 AK AL AM AN AO ~ AP D E AQ AR AS@9 AT@4 AU AV AW AX AY AZ BA BB BC BD AG BE BF BG@2 ~@7 BH@8 BI@8 ~@3 BJ BK
BL@8 BM@2 BN@3 BM@3 BO BP BQ@6 BR@6 BS@3 BT BU@2 BV@4 BW BX BY BZ CA@7 CB
>`.pickRestart({
A: "[e2,e3]", B: "[d2,d3]", C: "[c2,c3] [a1,a2]", D: "[b1,b2]", E: "[a1,a2]", F: "[g1,g2]", G: "[f#1,f#2] [b1,b2]",
H: "[e2,e3]@5 ~@11", I: "b2", J: "b2/2", K: "[b2@24 e2@5 ~@3]/2", L: "g2@5 f#2@3 d#2@5 e2@3", M: "b1@8 b1@5 b1@3",
N: "b1@8 a1@5 b1@3", O: "c2 b1", P: "e2@5 ~@11", Q: "a#3@5 g3@3 f#3@5 f3@3", R: "f#3",
S: "f#3@3 c#4@2 d4@3 f#3@3 e4@2 d4@3", T: "f#3@3 c#4@2 b3@3 f#3@3 a#3@2 b3@3", U: "f#3@3 ~@5 f#3@3 ~@5",
V: "f#3@3 ~@13", W: "~@13 b2@3", X: "c#3@3 f3@2 g#3@3 c#3@3 d#3@2 f3@3", Y: "c#3@3 a3@2 f#3@3 c3@3 f#3@2 d#3@3",
Z: "b2@3 d#3@2 f#3@3 b2@3 c#3@2 d#3@3", AA: "b2@3 g3@2 e3@3 a#2@3 e3@2 c#3@3", AB: "a2@3 c#3@2 e3@3 a2@3 b2@2 c#3@3",
AC: "a2@3 f3@2 d3@3 g#2@3 d3@2 b2@3", AD: "g2", AE: "g2 f2", AF: "f2", AG: "e2", AH: "[f1,f2]", AI: "[f#1,f#2]",
AJ: "[f#2,f#3]@5 ~@3 [f#2,f#3]@5 ~@3", AK: "[d2,d3] [c#2,c#3]", AL: "[b1,b2]@8 [a1,a2]@5 [g1,g2]@3",
AM: "[f#1,f#2]@3 g#2@2 a#2@3 b2@3 c#3@2 d3@3", AN: "e3@3 f#3@2 g#3@3 a#3@3 b3@2 c#4@3", AO: "d4@3 ~@13",
AP: "~@8 [f#2,f#3]@5 ~@3", AQ: "[g1,g2] e2", AR: "f#2@8 g#2@5 a#2@3", AS: "b1@3 b2@2 b1@3 b2@3 b1@2 b2@3",
AT: "c2@3 c3@2 c2@3 c3@3 c2@2 c3@3", AU: "c2 c3@14 ~", AV: "d3", AW: "[e3,g3]", AX: "[f#3,a3]", AY: "~ b2, g#3",
AZ: "a2 c3, a3", BA: "~ g#3, b2", BB: "a3 e3, c3", BC: "d3 f3", BD: "d#3", BE: "f#2", BF: "g2 e2",
BG: "[f#2@5 ~@3]/2",
BH: "[~@4 [e2,e3]@16 [d2,d3]@16 [c2,c3]@8 [a1,a2]@8 [b1,b2]@16 [a1,a2]@16 [g1,g2]@16 [f#1,f#2]@8 [b1,b2]@8 g2@11 e2]/8", // E D C A B A G F# …
BI: "[~ b2@3 b2@11 g2@2 e3@3 e3@5 f#3@3 g3@5 f#3@3 e3@8 d#3@8 c3@11 a2@2 e3@3 e3@11 b2@2 b3@3 b3@3 c4@2 b3@3 a3@3 g3@2 f#3@3 g3@3 a3@2 g3@3 f3@3 e3@2 d3@3 c3@5 ~@7, ~@28 c3@8 b2@16 ~@40 b2@5 ~@3 e3@5 ~@3 g2@5 ~@15]/8",
BJ: "~@4 [e2,e3]@5 [d2,d3]@3 [b1,b2]@4", BK: "~ [c2,c3]@3 [g1,g2]@8 [g1,g2]@4",
BL: "[~ [g1,g2]@3 [g1,g2]@16 [f#1,f#2]@16 [f3,a3]@16 [e3,a3,c4]@16 [d#3,f#3,b3]@16 [c3,e3,a3]@16 [b2,d#3,f#3,b3]@5 ~@3 b3@20]/8", // G F# F Am B Am B
BM: "~@4 b3@3 ~@5 b3@3 ~", BN: "[~@4 b3@16 b3@16 b3@3 ~@5 b3@3 ~]/3", BO: "~@4 b3@3 ~@5 e4@3 ~",
BP: "~@4 e4@3 ~@5 e4@3 ~",
BQ: "[~ e3@3 f#3@3 a#3@2 c#4@3 f#3@3 g#3@2 a#3@3 f#3@3 d4@2 b3@3 f3@3 b3@2 g#3@3 e3@3 b3@2 g#3@3 e3@3 f#3@2 g#3@3 e3@3 c4@2 a3@3 d#3@3 a3@2 f#3@3 d3@3 f#3@2 a3@3 d3@3 e3@2 f#3@3 d3@3 a#3@2 g3@3 c#3@3 g3]/6",
BR: "[~ e3@3 c3@16 c3@8 a#2@8 a#2@16 a2@16 a#2@16 a2@12]/6",
BS: "[~@4 [a#1,a#2]@16 b2@3 a2@2 g2@3 f#2@3 e2@2 d#2@3 [b1,b2]@5 ~@3 [b1,b2]@4, ~@5 b1@4 ~@3]/3", // A# B
BT: "~@4 [b1,b2]@5 ~@3 [b1,b2]@4", BU: "[~ [g1,g2]@2 [f#1,f#2]@2 [e1,e2]@2 d2]/2",
BV: "[~ c2@3 b1@3 c#2@2 d#2@3 e2@3 f#2@2 g2@3 a2@3 b2@2 c#3@3 d#3@3 e3@2 f#3@3 g3@3 a3@2 b3@3 c#4@3 d4@2 d#4@3 e4@3 d#4@2 e4@3 ~@4]/4",
BW: "~@4 [b2,b3]@5 ~@3 [b2,b3]@4", BX: "~@4 [e3,e4]@5 ~@7", BY: "~@4 b2@5 ~@3 b2@4", BZ: "~@4 e3@5 ~@7",
CA: "[~@4 b2@8 b2@8 b2@8 b2@8 g2@8 f#2@8 e2@8 d2@8 c2@8 b1@8 a1@8 g1@8 [f#1,f#2]@5 ~@3 [b1,b2]@4]/7", // F# B
CB: "~@4 [e2,e3]@5 ~@7", // E
})).s("gm_electric_bass_pick").gain(0.21)
// drums · kick
const kick = s("bd").struct(`<
A@2 B A@3 B A B@16 A ~ A B A C A B@11 A@7 B@16 A@2 B@15 A ~ A ~ A ~ A ~ A ~@13 D@2 E D@3 E D@2 E D@3 E@2 D@3 E D@7
E@13 D@7 E@16 D ~@2 E@7 D
>`.pickRestart({
A: "x", B: "x!2", C: "~ x", D: "~ x ~@2", E: "~ x ~ x",
})).gain(0.2)
// drums · rim
const rim = s("rim").struct(`<
~@2 A ~@3 A ~@16 B ~@11 A@7 ~@12 C A ~@2 D E F@2 G H ~@3 A D ~@37 I J ~@2 I J ~ I J ~@2 I K J ~@14 K@9 J ~@11 L K J ~
M N O F P Q J ~@11
>`.pickRestart({
A: "~@3 x ~ x ~@5 x ~ x ~@2", B: "~ x", C: "~@5 x ~@5 x ~ x ~@2", D: "~@3 x ~ x ~@2 x ~@2 x ~ x ~@2",
E: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", F: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", G: "~@5 x ~@2 x!2 ~ x!3 ~ x",
H: "~@5 x ~@7 x ~@2", I: "~@7 x ~ x ~@5 x", J: "~ x ~@14", K: "~ x ~@5 x ~ x ~@5 x", L: "~@9 x ~@5 x",
M: "~@7 x ~ x ~@2 x ~@2 x", N: "~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x", O: "~ x ~@2 x!2 ~ x!3 ~ x!3 ~ x",
P: "x!2 ~ x ~@5 x ~@2 x!2 ~ x", Q: "x!2 ~ x ~@5 x ~@6",
})).gain(0.3)
// drums · rim · soft notes
const rim_soft = s("rim").struct(`<
~@32 A@3 ~@7 B@6 ~@2 C@4 D ~@14 C@14 ~@48 E F@2 ~@9 G@6 ~@2 H@4 I ~@21
>`.pickRestart({
A: "~@3 x ~ x ~@5 x ~ x ~@2", B: "x!2", C: "x", D: "~@3 x ~@12", E: "~@7 x ~ x ~@5 x", F: "~ x ~@5 x ~ x ~@5 x",
G: "~ x ~ x", H: "~ x ~@2", I: "~@7 x ~@8",
})).gain(0.2)
// drums · snare
const snare = s("sd").struct(`<
A@2 ~ A@3 B A ~@29 A@2 ~@23 A B@2 A@2 ~@37 C@2 ~ C@3 D C@2 ~ C@3 D@2 ~@17 C@4 ~@23 C D@2 C ~@6 D@2 ~ C
>`.pickRestart({
A: "x", B: "x!2", C: "~ x ~@2", D: "~ x ~ x",
})).gain(0.4)
// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@32 x!5 ~@94 [~ x ~@2]!5 ~@41>").gain(0.2)
// drums · low tom
const low_tom = s("lt").struct("<~@48 A B ~@5 C ~@2 A ~@90 D E F ~@4 G ~@2 D ~@17>".pickRestart({
A: "x", B: "~@11 x ~ x ~@2", C: "x!2", D: "~ x ~@2", E: "~@15 x", F: "~ x ~@14", G: "~ x ~ x",
})).gain(0.3)
// drums · hihat
const hihat = s("hh").struct(`<
~@16 A@8 ~@7 B C@7 A D ~ B@6 D ~ E@4 ~@4 C A ~@2 F G A ~ D ~ D H@13 D ~@48 I@9 J K ~ L M@5 N ~ O P@3 Q ~@3 I J ~@2 R@2
S ~ J K ~@2 J@4 ~@2
>`.pickRestart({
A: "x!2", B: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", C: "~ x", D: "x", E: "~@3 x ~ x ~@5 x ~ x ~@2", F: "~@5 x ~@10",
G: "~@5 x ~@7 x ~@2", H: "x ~@4 x ~@2 x ~@4 x ~@2", I: "~@3 x", J: "~ x ~ x", K: "~ x ~@2",
L: "~@4 x ~@2 x ~ x ~@2 x ~@2 x", M: "~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x", N: "~ x ~@2 x ~@11", O: "~@7 x ~ x ~@5 x",
P: "~ x ~@5 x ~ x ~@5 x", Q: "~ x ~@14", R: "~@9 x ~@6", S: "~ x ~@2 x ~@7 x ~@3",
})).gain(0.2)
// drums · mid tom
const mid_tom = s("mt").struct("<~@2 A ~@38 A ~@15 B ~@10 C ~@37 D ~@6 D ~@28 D ~@15 E F ~@15 D ~>".pickRestart({
A: "x!2", B: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", C: "x", D: "~ x ~ x", E: "~@4 x ~@2 x ~ x ~@2 x ~@2 x", F: "~ x ~@14",
})).gain(0.4)
// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@48 A B ~@4 C ~@94 D E ~@4 F ~@21>".pickRestart({
A: "~@3 x ~ x ~@2 x ~@7", B: "~@5 x ~@2 x ~@7", C: "x!2", D: "~@7 x ~ x ~@2 x ~@3", E: "~@9 x ~@2 x ~@3",
F: "~ x ~ x",
})).gain(0.2)
// drums · open hat
const open_hat = s("oh").struct("<~@50 A@4 ~@4 B ~@92 C@4 ~@4 D ~@17>".pickRestart({
A: "~ x", B: "x", C: "~@3 x", D: "~ x ~@2",
})).gain(0.2)
// drums · high tom
const high_tom = s("ht").struct("<~@40 A ~@8 B ~@6 C ~@10 D ~@73 E ~@8 F ~@6 G H ~@18>".pickRestart({
A: "~ x", B: "x ~@2 x ~@12", C: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", D: "x!2", E: "~@3 x", F: "~@4 x ~@2 x ~@8",
G: "~@4 x ~@2 x ~ x ~@2 x ~@2 x", H: "~ x ~@14",
})).gain(0.4)
// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@48 [~@11 x ~ x ~@2] ~@100 [~@15 x] [~ x ~@14] ~@26>").gain(0.25)
// drums · crash
const crash = s("cr").struct(`<
A@8 ~@29 B@2 C@3 ~@14 A ~@8 A ~ A ~@36 D@15 ~@17 E@4 F@3 ~@14 D ~@8 D ~@8 F D
>`.pickRestart({
A: "x", B: "~ x", C: "x!2", D: "~ x ~@2", E: "~@3 x", F: "~ x ~ x",
})).gain(0.4)
// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@32 A@5 ~@82 B ~@11 C@5 ~@31 D B ~@8>".pickRestart({
A: "~ x", B: "~ x ~@2", C: "~@3 x", D: "~ x ~ x",
})).gain(0.2)
// drums · ride
const ride = s("rd").struct("<~@82 A B@12 C D@2 E D E D@3 ~@73>".pickRestart({
A: "~ x", B: "x!2", C: "x", D: "~ x ~@2", E: "~ x ~ x",
})).gain(0.2)
stack(
overdriven_guitar, bass, kick, rim, rim_soft, snare, snare_soft, low_tom, hihat, mid_tom, mid_tom_soft, open_hat,
high_tom, high_tom_soft, crash, crash_soft, ride
)
More by Ludwig van Beethoven
5th SymphonyC minor · 160 bpmFur EliseA minor · 105 bpm12 Variations on 'Menuet a la Vigano' WoO 68D major · 120 bpmAir from 'little Russia' Op.107 No.3B♭ major · 120 bpmChristus am Ölberge Op.85C major · 156 bpmCoriolan Op.62E♭ major · 150 bpmDie Ruinen von Athen Op.113E major · 84 bpmDuett mit zwei obligaten AugengläsernE♭ major · 71 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.