0:00/0:00
// Panis Angelicus — Cesar Franck
// 66 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 63 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(66/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.
// other · oboe
const oboe = note("<A@2 B@5 C@5 D ~@16 E@4 ~@5 F G@2 H@2 I J K@2 L@2 M@3 N O@4 P Q R@4>".pickRestart({
A: "[~@45 g4@22 ~@2 g4@10 ~@2 f#4@10 ~@2 f#4@3]/2",
B: "[~@3 e4@5 ~ e4@22 ~@2 e5@10 ~@2 d5@10 ~@2 c5@5 ~ b4@5 ~ a4@10 ~@2 b4@10 ~@2 g4@22 ~@2 f#4@5 ~ b4@5 ~ c5@5 ~ a4@5 ~ g4@10 ~@2 f#4@5 ~ e4@5 ~ d4@10 ~@2 g4@10 ~@2 a4@29 ~ b4@5 ~ c5@5 ~ a4@5 ~ g4@3]/5",
C: "[~@9 f#4@5 ~ e4@5 ~ d4@10 ~@2 g4@5 ~ b4@5 ~ a4@29 ~ d5@5 ~ e5@5 ~ c5@5 ~ b4@29 ~ b4@5 ~ d5@5 ~ b4@5 ~ a4@29 ~ b4@5 ~ c5@5 ~ e4@5 ~ g4@11 ~@2 f#4@5 ~ e4@5 ~ d4@11 ~@2 g4@6 b4@6 ~]/5",
D: "a4@20 ~@2 g4@7 g4@14 ~@5",
E: "[~@12 b4@22 ~@2 f#4@22 ~@2 c5@16 ~@2 a4@5 ~ g4@22 ~@2 c#5@10 ~@2 d5@5 ~ e5@5 ~ b4@16 ~@2 c#5@5 ~ d5@22 ~@14]/4",
F: "~@25 b4@22 ~", G: "[~ b4@10 ~@2 a4@10 ~@2 a4@5 ~ g4@5 ~ g4@34 ~@2 b4@22 ~]/2",
H: "[~ b4@10 ~@2 a4@10 ~@2 a4@5 ~ g4@5 ~ g4@34 ~@2 e5@22 ~]/2", I: "~ e5@10 ~@2 d5@10 ~@2 c5@16 ~@2 c5@5",
J: "~ c5@10 ~@2 b4@10 ~@2 a4@16 ~@2 a4@5", K: "[~ a4@10 ~@2 g4@10 ~@2 d5@46 ~@2 d5@22 ~]/2",
L: "[~ c5@10 ~@2 b4@10 ~@2 b4@5 ~ a4@5 ~ a4@34 ~@2 d5@22 ~]/2",
M: "[~ e5@10 ~@2 c5@10 ~@2 b4@5 ~ a4@5 ~ a4@34 ~@2 d5@29 ~ b4@5 ~ a4@5 ~ g4@5 ~ c5@10 ~@2 c5@5 ~ b4@5]/3",
N: "~ c5@16 ~@2 d5@5 ~ b4@5 ~ f#4@5 ~ g4@5 ~ b4@5",
O: "[~ d5@5 ~ c#5@5 ~ d5@5 ~ d#5@5 ~ e5@10 ~@2 e5@22 ~@2 e5@10 ~@2 e5@29 ~ c5@5 ~ b4@5 ~ a4@5 ~ d5@70 ~]/4",
P: "~ c5@16 ~@2 b4@5 ~ b4@10 ~@2 g4@10 ~", Q: "~ d5@10 ~@2 c5@22 ~@2 a4@5 ~ c5@5",
R: "[~ b4@10 ~@2 a4@5 ~ g4@5 ~ a4@43 ~ g4@6 ~ g4@12 ~@2 g4@13 ~@2 [g4,b4]@14 ~ [b4,d5]@17 ~@2 [d5,g5]@17 ~@36]/4", // G Bm G5
})).s("gm_oboe").gain(0.1)
// other · clarinet
const clarinet = note("<A@8 B@4 C ~@16 D E F G H ~@4 I J@2 K@2 L M N@2 O@2 P@3 Q R@4 S T U@4>".pickRestart({
A: "[~@45 b3@82 ~@2 e4@58 ~@2 d4@94 ~@2 d4@94 ~@2 d4@3]/8",
B: "[~@9 e4@10 ~@2 f#4@46 ~@2 e4@22 ~@2 e4@22 ~@2 c4@22 ~@2 b3@49 ~@2]/4", C: "c4@27 ~@2 b3@14 ~@5",
D: "~@18 f#3@5 ~ b3@5 ~ f#3@5 ~@7 b3@5 ~", E: "d4@5 ~ b3@5 ~@7 a3@5 ~ c4@5 ~ a3@5 ~@7 g3@5 ~",
F: "b3@5 ~ g3@5 ~@7 a3@5 ~ c#4@5 ~ a3@5 ~ b3@5 ~ g3@5 ~", G: "c#4@5 ~ a3@5 ~@7 a3@5 ~ d4@5 ~ a3@5 ~ d4@5 ~ f#4@5 ~",
H: "a4@5 ~ d5@5 ~@37", I: "~@25 b4@22 ~", J: "[~ b4@10 ~@2 a4@10 ~@2 a4@5 ~ g4@5 ~ g4@34 ~@2 b4@22 ~]/2",
K: "[~ b4@10 ~@2 a4@10 ~@2 a4@5 ~ g4@5 ~ g4@34 ~@2 e5@22 ~]/2", L: "~ e5@10 ~@2 d5@10 ~@2 c5@16 ~@2 c5@5",
M: "~ c5@10 ~@2 b4@10 ~@2 a4@16 ~@2 a4@5", N: "[~ a4@10 ~@2 g4@10 ~@2 d5@46 ~@2 d5@22 ~]/2",
O: "[~ c5@10 ~@2 b4@10 ~@2 b4@5 ~ a4@5 ~ a4@34 ~@2 d5@22 ~]/2",
P: "[~ e5@10 ~@2 c5@10 ~@2 b4@5 ~ a4@5 ~ a4@34 ~@2 d5@29 ~ b4@5 ~ a4@5 ~ g4@5 ~ c5@10 ~@2 c5@5 ~ b4@5]/3",
Q: "~ c5@16 ~@2 d5@5 ~ b4@5 ~ f#4@5 ~ g4@5 ~ b4@5",
R: "[~ d5@5 ~ c#5@5 ~ d5@5 ~ d#5@5 ~ e5@10 ~@2 e5@22 ~@2 e5@10 ~@2 e5@29 ~ c5@5 ~ b4@5 ~ a4@5 ~ d5@70 ~]/4",
S: "~ c5@16 ~@2 b4@5 ~ b4@10 ~@2 g4@10 ~", T: "~ d5@10 ~@2 c5@22 ~@2 a4@5 ~ c5@5",
U: "[~ b4@10 ~@2 a4@5 ~ g4@5 ~ a4@43 ~ g4@6 ~ g4@12 ~@2 [b3,d4]@13 ~@2 [b3,d4]@14 ~ [d4,g4]@17 ~@2 [g4,b4]@17 ~@36]/4", // Bm G5 G
})).s("gm_clarinet").gain(0.09)
// chords · bassoon
const bassoon = note("<A@3 B@7 C@2 D ~@16 E@3 F ~@4 G H@2 I@4 J@6 K L@2 M N O@4 P Q@3>".pickRestart({
A: "[~@45 [g2,g3]@46 ~@2 [g2,g3]@22 ~@2 [g#2,g#3]@22 ~@2 [a2,a3]@3]/3", // G G# A
B: "[~@15 [b2,b3]@5 ~ [c3,c4]@10 ~@2 [c#3,c#4]@10 ~@2 [d3,d4]@94 ~@2 [d3,d4]@94 ~@2 [d3,d4]@46 ~@2 [d#3,d#4]@22 ~@2 [e3,e4]@10 ~@2 [b2,b3]@10 ~@2 [c3,a3]@3]/7", // B C C# D D# E B F
C: "[~@21 [a2,e3]@22 ~@2 [d3,g3]@49 ~@2]/2", D: "[d3,f#3]@27 ~@2 [g2,g3]@14 ~@5",
E: "[~@6 [b2,b3]@23 ~ [b2,b3]@11 ~ e3@11 ~ [a2,e3]@11 ~ d3@5 ~]/3", F: "e3@5 ~ d3@11 ~@7", G: "~@25 [g2,g3]@22 ~",
H: "~ [d3,d4]@22 ~@2 [g2,g3]@22 ~", // D G
I: "[~ [d3,d4]@22 ~@2 [g2,g3]@46 ~@2 c3@22 ~@2 c3@10 ~@2 b2@10 ~@2 a2@34 ~@2 b2@10 ~@2 [c3,a3]@23, ~@73 g3@46 ~@2 g3@46 ~@25]/4", // D G F
J: "[~@13 [c#3,b3]@10 ~@2 f#3@22 ~@2 g3@22 ~@2 a3@22 ~@2 g3@22 ~@2 a3@22 ~@2 g3@22 ~@2 a3@22 ~@2 g3@22 ~@2 a3@22 ~@2 g3@22 ~@2 [c3,a3]@22 ~, ~@25 d3@46 ~@2 d3@46 ~@2 d3@46 ~@2 d3@46 ~@2 d3@46 ~@25]/6", // C#7 F
K: "~ [b2,g3]@22 ~@2 [f#3,a3]@22 ~", L: "[~ [g3,b3]@22 ~@2 e3@22 ~@2 f#3@22 ~@2 [g2,g3]@22 ~, ~@25 d3@46 ~@25]/2",
M: "~ [d3,b3]@22 ~@2 [d3,b3]@22 ~", N: "~ [c3,a3]@22 ~@2 [b2,b3]@22 ~",
O: "[~ [a2,a3]@22 ~@2 c4@22 ~@2 b3@22 ~@2 [d3,a3]@34 ~@14 g3@12 ~@12 f#3@10 ~@2 e3@10 ~@14 d3@10 ~, ~@25 d3@46 ~@62 g3@34 ~@2 f#3@22 ~]/4", // A D5
P: "~ g2@10 ~@2 b2@10 ~@2 [c3,g3]@23, ~ g3@22 ~@25", // C5
Q: "[~ [d3,f#3]@25 ~@2 [g2,g3]@12 ~@2 [d3,g3]@13 ~@2 [g3,b3]@14 ~ [b3,d4]@17 ~@2 [g3,d4]@17 ~@36]/3", // D G G5 G Bm G5
})).s("gm_bassoon").gain(0.08)
// other · french horn
const french_horn = note("<~@4 A@8 B ~@16 C@4 D E@2 F@2 G@2 H@2 I J K@2 L@2 M@3 N O P@2 Q R@2 ~@5>".pickRestart({
A: "[~@45 [g3,b3]@10 ~@2 [a3,c4]@10 ~@2 [b3,d4]@10 ~@2 [g3,b3]@10 ~@2 [f#3,a3]@10 ~@2 [d3,f#3]@10 ~@2 [e3,g3]@10 ~@2 [f#3,a3]@10 ~@2 [g3,b3]@10 ~@2 [a3,c4]@10 ~@2 [b3,d4]@10 ~@2 g3@10 ~@2 [d4,f#4]@10 ~@2 [e4,g4]@10 ~@2 [f#4,a4]@46 ~@2 e4@46 ~@2 c4@22 ~@2 b3@49 ~@2, ~@261 g4@22 ~@101]/8", // G Am Bm G F#m D Em F#m …
B: "[c4,d4]@27 ~@2 [b3,d4]@14 ~@5", C: "[~@18 b3@11 ~ a3@11 ~ g3@23 ~ g3@11 ~ f#3@11 ~@7]/4", D: "~@6 e4@11 ~ d4@5 ~",
E: "[e4@10 ~@2 d4@10 ~@2 a3@34 ~@14 c#4@10 ~@2 b3@11 ~]/2", F: "[c#4@11 ~@2 c4@12 ~ b3@28 ~@2 d4@15 ~@2 b3@22 ~]/2",
G: "[~ b3@10 ~@2 a3@10 ~@2 a3@5 ~ g3@5 ~ g3@34 ~@2 b3@22 ~]/2",
H: "[~ b3@10 ~@2 a3@10 ~@2 a3@5 ~ g3@5 ~ g3@34 ~@2 e4@22 ~]/2", I: "~ e4@10 ~@2 d4@10 ~@2 c4@16 ~@2 c4@5",
J: "~ c4@10 ~@2 b3@10 ~@2 a3@16 ~@2 a3@5", K: "[~ a3@10 ~@2 g3@10 ~@2 d4@46 ~@2 d4@22 ~]/2",
L: "[~ c4@10 ~@2 b3@10 ~@2 b3@5 ~ a3@5 ~ a3@34 ~@2 d4@22 ~]/2",
M: "[~ e4@10 ~@2 c4@10 ~@2 b3@5 ~ a3@5 ~ a3@34 ~@2 d4@29 ~ b3@5 ~ a3@5 ~ g3@5 ~ c4@16 ~@2 a3@5]/3",
N: "~ b3@10 ~@2 b3@22 ~@2 a3@5 ~ g3@5", O: "~ a3@16 ~@2 b3@5 ~ g3@22 ~",
P: "[~@25 e4@29 ~ c4@5 ~ b3@5 ~ a3@5 ~ d4@16 ~@2 b3@5]/2", Q: "~ c4@10 ~@2 c4@22 ~@2 a3@5 ~ c4@5",
R: "[~ b3@10 ~@2 a3@5 ~ g3@5 ~ a3@40 ~@2 g3@5 ~ g3@22 ~]/2",
})).s("gm_french_horn").gain(0.1)
// other · trumpet
const trumpet = note("<~@29 A@4 B@2 C@3 D@2 E@2 F G H@2 I@2 J@3 K L M@2 N O P ~@5>".pickRestart({
A: "[~@12 b4@22 ~@2 f#4@22 ~@2 c5@16 ~@2 a4@5 ~ g4@22 ~@2 c#5@10 ~@2 d5@5 ~ e5@5 ~ b4@16 ~@2 c#5@5 ~ d5@22 ~@14]/4",
B: "[~@12 c#5@10 ~@2 d5@5 ~ e5@5 ~ b4@10 ~@2 c#5@10 ~@2 d5@10 ~@2 e5@5 ~ f#5@5 ~ [g4,c#5]@10 ~@2, ~@6 a4@35 ~@7]/2", // Gdim
C: "[[f#4,d5]@10 ~@2 e5@10 ~@2 f#5@5 ~ g5@5 ~ f#5@11 ~ e5@11 ~@2 f#4@12 ~ g4@13 ~@2 g#4@14 ~ [a4,c5]@15 ~@2 b4@22 ~, ~@12 g4@47 ~@2 d5@42 ~@41]/3", // D Am
D: "[~ b4@10 ~@2 a4@10 ~@2 a4@5 ~ g4@5 ~ g4@34 ~@2 b4@22 ~]/2",
E: "[~ b4@10 ~@2 a4@10 ~@2 a4@5 ~ g4@5 ~ g4@34 ~@2 e5@22 ~]/2", F: "~ e5@10 ~@2 d5@10 ~@2 c5@16 ~@2 c5@5",
G: "~ c5@10 ~@2 b4@10 ~@2 a4@16 ~@2 a4@5", H: "[~ a4@10 ~@2 g4@10 ~@2 d5@46 ~@2 d5@22 ~]/2",
I: "[~ c5@10 ~@2 b4@10 ~@2 b4@5 ~ a4@5 ~ a4@34 ~@2 d5@22 ~]/2",
J: "[~ e5@10 ~@2 c5@10 ~@2 b4@5 ~ a4@5 ~ a4@34 ~@2 d5@29 ~ b4@5 ~ a4@5 ~ g4@5 ~ c5@16 ~@2 a4@5]/3",
K: "~ b4@10 ~@2 b4@22 ~@2 a4@5 ~ g4@5", L: "~ a4@16 ~@2 b4@5 ~ g4@22 ~",
M: "[~@25 e5@29 ~ c5@5 ~ b4@5 ~ a4@5 ~ d5@16 ~@2 b4@5]/2", N: "~ c5@10 ~@2 c5@22 ~@2 a4@5 ~ c5@5",
O: "~ b4@10 ~@2 a4@5 ~ g4@5 ~ g4@22 ~", P: "~ f#4@16 ~@2 f#4@5 ~ g4@22 ~",
})).s("gm_trumpet").gain(0.13)
// chords · trombone
const trombone = note("<~@4 A@8 B ~@16 C@3 D E F@4 G H I@6 J@3 K L M N O P Q@3 ~@5>".pickRestart({
A: "[~@45 [g3,b3]@10 ~@2 [a3,c4]@10 ~@2 [b3,d4]@10 ~@2 [g3,b3]@10 ~@2 [f#3,a3]@10 ~@2 [d3,f#3]@10 ~@2 [e3,g3]@10 ~@2 [f#3,a3]@10 ~@2 [g3,b3]@10 ~@2 [a3,c4]@10 ~@2 [b3,d4]@10 ~@2 g3@10 ~@2 [f#3,a3]@70 ~@2 [e3,g3]@46 ~@2 c4@22 ~@2 b3@49 ~@2]/8", // G Am Bm G F#m D Em F#m …
B: "[c4,d4]@27 ~@2 [b3,d4]@14 ~@5", C: "[~@6 [b3,d4]@23 ~ [b3,d#4]@11 ~ [e3,e4]@11 ~ [e3,e4]@11 ~ [d3,d4]@5 ~]/3",
D: "[e3,e4]@5 ~ [d3,d4]@11 ~@7", E: "~@6 e4@11 ~ d4@5 ~, ~@6 a3@17 ~",
F: "[[g3,e4]@10 ~@2 d4@10 ~@14 e3@10 ~@2 d3@10 ~@14 c#4@10 ~@2 b3@11 ~ c#4@11 ~@2 [a3,c4]@12 ~ g3@13 ~@2 f3@14 ~ [f#3,d4]@15 ~@2 g3@22 ~, ~@6 f#3@11 ~@79, ~@24 a3@34 ~@2 a3@47 ~@15 b3@28 ~@42]/4", // C Am D
G: "~ d3@22 ~@2 [d3,g3]@22 ~", H: "~ [d3,f#3]@22 ~@2 g3@22 ~",
I: "[~ [d3,f#3]@22 ~@2 [d3,g3]@46 ~@2 g3@46 ~@2 g3@46 ~@2 [g3,a3]@34 ~@2 [g3,b3]@10 ~@2 f#3@22 ~@2 g3@22 ~@2 a3@22 ~, ~@217 d3@46 ~@25]/6", // D G5 Gsus2 G
J: "~ g3@22 ~@2 a3@22 ~", K: "~ g3@22 ~@2 [c3,a3]@22 ~", L: "~ [b2,g3]@22 ~@2 [f#3,a3]@22 ~",
M: "~ [g3,b3]@22 ~@2 e3@22 ~", N: "~ f#3@22 ~@2 g3@22 ~", O: "~ [g3,b3]@22 ~@2 [g#3,b3]@22 ~",
P: "~ [c3,a3]@22 ~@2 [g#3,b3]@22 ~", // F G#m
Q: "[~ a3@22 ~@2 c4@22 ~@2 b3@22 ~@2 [a3,d4]@34 ~@14 [g3,b3]@22 ~, ~@25 d4@46 ~@73]/3", // D5 G
})).s("gm_trombone").gain(0.1)
// bass · tuba
const bass = note("<A@3 B@7 C@2 D ~@16 E@4 F G H@3 I@2 J@2 K@8 L M@2 N O P@3 ~@5>".pickRestart({
A: "[~@45 g2@46 ~@2 g2@22 ~@2 g#2@22 ~@2 a2@3]/3",
B: "[~@15 b2@5 ~ c2@10 ~@2 c#2@10 ~@2 d2@94 ~@2 d2@94 ~@2 d2@46 ~@2 d#2@22 ~@2 e2@10 ~@2 b2@10 ~@2 c3@3]/7",
C: "[~@21 a2@22 ~@2 d2@49 ~@2]/2", D: "d2@27 ~@2 g2@14 ~@5", E: "[~@6 b2@23 ~ b2@11 ~ e2@11 ~ a2@23 ~ d2@11 ~@7]/4",
F: "~@6 a2@17 ~", G: "g2@5 ~ f#2@11 ~ e2@5 ~",
H: "[d2@10 ~@2 a2@47 ~@2 a2@12 ~ g2@13 ~@2 f2@14 ~ f#2@15 ~@2 g2@22 ~]/3", I: "~ d2@22 ~@2 g2@22 ~",
J: "[~ d2@22 ~@2 g2@46 ~@2 c3@22 ~]/2",
K: "[~ c3@10 ~@2 b2@10 ~@2 a2@34 ~@2 b2@10 ~@2 c3@34 ~@2 c#3@10 ~@2 d2@46 ~@2 d2@46 ~@2 d2@46 ~@2 d2@46 ~@2 d2@46 ~@2 c2@22 ~]/8",
L: "~ b1@22 ~@2 f#2@22 ~", M: "[~ g2@22 ~@2 d2@46 ~@2 g2@22 ~]/2", N: "~ d2@22 ~@2 d2@22 ~",
O: "~ c2@22 ~@2 g#2@22 ~", P: "[~ a2@22 ~@2 d3@82 ~@14 g2@22 ~]/3",
})).s("gm_tuba").gain(0.11)
// other · timpani
const timpani = note(`<
A B ~ C D@4 E ~ C F G ~@19 H I ~@3 J K@2 L M ~@2 N O@4 P ~ N Q ~@2 N O Q ~@2 R@2 S
>`.pickRestart({
A: "~@45 g2 ~ d3",
B: "g2 ~ d3 g2 ~ d3 g2 ~ d3 g2 ~ d3 g2 ~ d3 g2 ~ d3 g2 ~ d3 g2 ~ d3 g2 ~ d3 g2 ~ d3 g2 ~ d3 g2 ~ d3 g2 ~ d3 g2 ~ d3 g2 ~ d3 ~@3",
C: "~@45 d3 ~ d3",
D: "d3 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3",
E: "d3 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3 ~@3",
F: "d3 ~ d3 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3 ~ d3!2 ~ d3 ~ d3!2 ~ d3 ~ d3 d3@2",
G: "d3@2 d3@2 d3 d3@2 d3@2 d3@2 d3 d3@2 d3@2 d3@2 d3@2 d3@2 d3 d3@2 d3@2 d3@2 g2@14 ~@5",
H: "~@12 d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~",
I: "d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~@37", J: "~@25 g2@22 ~", K: "~ d3@22 ~@2 g2@22 ~",
L: "~ d3@22 ~@2 g2!2 ~ g2!2 ~ g2!2 ~ g2!2 ~ g2!2 ~ g2!2 ~ g2!2 ~ g2!2",
M: "~ g2!2 ~ g2!2 ~ g2!2 ~ g2!2 ~ g2!2 ~ g2!2 ~ g2!2 ~ g2!2 ~@24",
N: "~@25 d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2",
O: "~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2",
P: "~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~@24",
Q: "~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ g2!2 ~ g2!2 ~ g2!2 ~ g2!2 ~ g2!2 ~ g2!2 ~ g2!2 ~ g2!2",
R: "[~ d3 ~ d3!2 ~ d3 ~ d3!2 ~ d3 ~ d3!2 ~ d3 ~ d3!2 ~ d3 ~ d3!2 ~ d3 ~ g2@2 g2 g2@2 g2@2 g2@2 g2 g2@2 g2@2 g2@2 g2@2 g2 g2@2 g2@2 g2@2 g2@2 g2@2 g2 g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 ~ g2@2 g2@2 g2@2 ~ g2@2 g2@2 ~ g2@2 g2@2 g2@2 ~ g2@2]/2",
S: "g2@2 ~ g2@2 g2@2 ~ g2@2 g2@2 g2@2 ~@34",
})).s("gm_timpani").gain(0.08)
// other · string ensemble 1
const string_ensemble_1 = note(`<
A@2 B@5 C@5 D ~@4 E F G H@2 ~@3 I@8 ~@5 J K J K L M N O P Q P R S@2 T J U V W X ~@5
>`.pickRestart({
A: "[~@45 g4@22 ~@2 g4@10 ~@2 f#4@10 ~@2 f#4@3]/2",
B: "[~@3 e4@5 ~ e4@22 ~@2 e5@10 ~@2 d5@10 ~@2 c5@5 ~ b4@5 ~ a4@10 ~@2 b4@10 ~@2 g4@22 ~@2 f#4@5 ~ b4@5 ~ c5@5 ~ a4@5 ~ g4@10 ~@2 f#4@5 ~ e4@5 ~ d4@10 ~@2 g4@10 ~@2 a4@29 ~ b4@5 ~ c5@5 ~ a4@5 ~ g4@3]/5",
C: "[~@9 f#4@5 ~ e4@5 ~ d4@10 ~@2 g4@5 ~ b4@5 ~ a4@29 ~ d5@5 ~ e5@5 ~ c5@5 ~ b4@29 ~ b4@5 ~ d5@5 ~ b4@5 ~ a4@29 ~ b4@5 ~ c5@5 ~ e4@5 ~ g4@11 ~@2 f#4@5 ~ e4@5 ~ d4@11 ~@2 g4@6 b4@6 ~]/5",
D: "a4@20 ~@2 g4@7 g4@14 ~@5", E: "~@6 e5@17 ~", F: "d5@5 ~ c5@17 ~", G: "b4@5 ~ a4@17 ~", H: "[g4@5 ~ d4@23 ~@19]/2",
I: "[~@6 b4@11 ~ a4@11 ~ d5@11 ~ a4@11 ~ g4@23 ~ f#4@35 ~ b4@11 ~ a4@11 ~ g4@23 ~ g4@11 ~ f#4@11 ~@7]/8",
J: "~@25 b4@22 ~", K: "~ b4@10 ~@2 a4@10 ~@2 a4@5 ~ g4@5 ~ g4@10 ~", L: "~@25 e5@22 ~",
M: "~ e5@10 ~@2 d5@10 ~@2 c5@16 ~@2 c5@5", N: "~ c5@10 ~@2 b4@10 ~@2 a4@16 ~@2 a4@5",
O: "~ a4@10 ~@2 g4@10 ~@2 d5@22 ~", P: "~@25 d5@22 ~", Q: "~ c5@10 ~@2 b4@10 ~@2 b4@5 ~ a4@5 ~ a4@10 ~",
R: "~ e5@10 ~@2 c5@10 ~@2 b4@5 ~ a4@5 ~ a4@10 ~", S: "[~@25 d5@29 ~ b4@5 ~ a4@5 ~ g4@5 ~ c5@10 ~@2 c5@5 ~ b4@5]/2",
T: "~ c5@16 ~@2 d5@5 ~ b4@22 ~", U: "~ a4@10 ~@2 c5@10 ~@2 b4@16 ~@2 b4@5", V: "~ a4@10 ~@2 a4@22 ~@2 f#4@10 ~",
W: "~ g4@10 ~@2 a4@5 ~ b4@5 ~ d5@22 ~", X: "~ c5@16 ~@2 b4@5 ~ b4@22 ~",
})).s("gm_string_ensemble_1").gain(0.1)
// other · string ensemble 1
const string_ensemble_1_2 = note(`<
A@8 B@4 C D@5 E@2 F@8 G@4 H ~@5 I J I J K L M N O P O Q R@2 S I T U V W ~@5
>`.pickRestart({
A: "[~@45 b3@82 ~@2 e4@58 ~@2 d4@94 ~@2 d4@94 ~@2 d4@3]/8",
B: "[~@9 e4@10 ~@2 f#4@46 ~@2 e4@22 ~@2 e4@22 ~@2 c4@22 ~@2 b3@49 ~@2]/4", C: "c4@27 ~@2 b3@14 ~@5",
D: "[~@6 g4@11 ~ d4@11 ~ g4@11 ~ d4@11 ~ g4@11 ~ d4@11 ~ g4@11 ~ d4@11 ~ c5@17 ~]/5",
E: "[b4@5 ~ g4@23 ~ f#4@17 ~]/2",
F: "[d4@5 ~ a3@5 ~ c4@17 ~ g4@11 ~ d4@11 ~ g4@23 ~ f#4@23 ~ f4@23 ~ g4@23 ~ f#4@23 ~ e4@18]/8",
G: "[~@6 e4@23 ~ d4@23 ~ b3@11 ~ e4@23 ~ d4@5 ~]/4", H: "e4@5 ~ d4@11 ~@7", I: "~@25 b3@22 ~",
J: "~ b3@10 ~@2 a3@10 ~@2 a3@5 ~ g3@5 ~ g3@10 ~", K: "~@25 e4@22 ~", L: "~ e4@10 ~@2 d4@10 ~@2 c4@16 ~@2 c4@5",
M: "~ c4@10 ~@2 b3@10 ~@2 a3@16 ~@2 a3@5", N: "~ a3@10 ~@2 g3@10 ~@2 d4@22 ~", O: "~@25 d4@22 ~",
P: "~ c4@10 ~@2 b3@10 ~@2 b3@5 ~ a3@5 ~ a3@10 ~", Q: "~ e4@10 ~@2 c4@10 ~@2 b3@5 ~ a3@5 ~ a3@10 ~",
R: "[~@25 d4@29 ~ b3@5 ~ a3@5 ~ g3@5 ~ c4@10 ~@2 c4@5 ~ b3@5]/2", S: "~ c4@16 ~@2 d4@5 ~ b3@22 ~",
T: "~ a3@10 ~@2 c4@10 ~@2 b3@16 ~@2 b3@5", U: "~ a3@10 ~@2 a3@22 ~@2 f#3@10 ~",
V: "~ g3@10 ~@2 a3@5 ~ b3@5 ~ d4@22 ~", W: "~ c4@16 ~@2 b3@5 ~ b3@22 ~",
})).s("gm_string_ensemble_1").gain(0.08)
// other · string ensemble 1
const string_ensemble_1_3 = note("<A@7 B@5 C D@7 E F@8 G@3 H ~@4 I J@2 K@5 L@6 M N O P Q R@3 S T@3>".pickRestart({
A: "[~@45 b3@46 ~@2 e3@46 ~@2 e3@34 ~@2 g3@10 ~@2 b3@22 ~@2 a3@22 ~@2 b3@10 ~@2 c4@10 ~@2 d4@10 ~@2 b3@10 ~@2 a3@10 ~@2 f#3@10 ~@2 g3@10 ~@2 a3@10 ~@2 b3@3]/7",
B: "[~@9 c4@10 ~@2 b3@10 ~@2 g3@10 ~@2 c4@46 ~@2 b3@46 ~@2 a3@22 ~@2 e3@22 ~@2 g3@49 ~@2]/5",
C: "f#3@27 ~@2 g3@14 ~@5",
D: "[~@6 g3@11 ~ d3@11 ~ g3@11 ~ d3@11 ~ g3@11 ~ d3@11 ~ g3@11 ~ d3@11 ~ g3@23 ~ g3@23 ~ f#3@17 ~]/7",
E: "d3@5 ~ d3@5 ~ c3@11 ~",
F: "[d3@5 ~ g3@11 ~ d3@11 ~ g3@11 ~ d3@11 ~ f#3@23 ~ f3@23 ~ g3@23 ~ f#3@23 ~ e3@23 ~ e3@18]/8",
G: "[~@6 d3@23 ~ b3@11 ~ e3@23 ~ d3@5 ~]/3", H: "e3@5 ~ d3@11 ~@7", I: "~@25 g3@22 ~", J: "~ d3@22 ~@2 g3@22 ~",
K: "[~ d3@22 ~@2 g3@46 ~@2 g3@46 ~@2 g3@46 ~@2 a3@34 ~@2 b3@10 ~@2 f#3@22 ~]/5", L: "~ g3@22 ~@2 a3@22 ~",
M: "~ b3@22 ~@2 e3@22 ~", N: "~ f#3@22 ~@2 g3@22 ~", O: "~ b3@22 ~@2 b3@22 ~", P: "~ a3@22 ~@2 b3@22 ~",
Q: "~ a3@22 ~@2 c4@22 ~", R: "[~ b3@22 ~@2 a3@34 ~@14 g3@46 ~@2 f#3@22 ~]/3", S: "~ g3@22 ~@2 g3@23",
T: "[~ f#3@25 ~@2 g3@81 ~@35]/3",
})).s("gm_string_ensemble_1").gain(0.08)
// other · string ensemble 1
const string_ensemble_1_4 = note("<A@3 B@7 C@2 D E@6 F G H@8 I@4 ~@4 J K@2 L@2 M@8 N O@2 P Q R@3 S T U@3>".pickRestart({
A: "[~@45 g1@46 ~@2 g1@22 ~@2 e1@22 ~@2 a1@3]/3",
B: "[~@15 b1@5 ~ c2@10 ~@2 c#2@10 ~@2 d2@94 ~@2 d2@94 ~@2 d2@46 ~@2 b1@22 ~@2 e2@10 ~@2 b1@10 ~@2 c2@3]/7",
C: "[~@21 a1@22 ~@2 d2@49 ~@2]/2", D: "d2@27 ~@2 g1@14 ~@5",
E: "[~@6 g1@11 ~ d2@11 ~ g1@23 ~ g1@11 ~ d2@11 ~ g1@23 ~ g1@23 ~ e2@17 ~]/6", F: "d2@5 ~ c2@17 ~",
G: "b1@5 ~ a1@5 ~ f#1@5 ~ e1@5 ~",
H: "[d2@5 ~ g1@11 ~ d2@11 ~ g1@11 ~ d2@11 ~ f#1@23 ~ f1@23 ~ e2@23 ~ d2@23 ~ a1@23 ~ e1@18]/8",
I: "[~@6 b1@23 ~ b1@11 ~ e1@11 ~ a1@23 ~ d2@11 ~@7]/4", J: "~@25 g1@22 ~", K: "~ d2@22 ~@2 g1@22 ~",
L: "[~ d2@22 ~@2 g1@46 ~@2 c2@22 ~]/2",
// … 23 more lines
More by
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.