0:00/0:00
// This Could Be the Night — Loverboy
// 84 bpm, 4/4, key C# minor. 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: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 104 bars on a 16-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.
// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
A@2 B@2 C D B@2 A@2 B@2 C D A@2 E@2 B@2 C D F@2 G H I H J K L M N@2 O@2 P Q R@2 S@2 T@2 O@2 P Q T@2 N@2 O@2 P Q O@2
N@2 O@2 P Q T@2 O@2 T@2 O@2 U V W X W Y O@2 N@2 O@2 P Q T@2 N@2 O@2 P Q R@2 B@2 C Z@4 ~
>`.pickRestart({
A: "c#2/2", B: "a1/2", C: "f#1", D: "g#1", E: "[e1@31 ~]/2", F: "a1", G: "b1@5 ~ b1 ~ b1@8",
H: "f#1@5 ~ f#1 ~ f#1@7 ~", I: "b1@5 ~ b1 ~ b1@5 ~ b1 c#2", J: "b1@5 ~ b1 ~ b1@7 ~", K: "f#1@5 ~ f#1 ~ f#1@4 g#1@4",
L: "a1@5 ~ a1@10", M: "~@2 a1 ~ a1 ~ a1@3 ~ a1@3 ~ a1@2", N: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~",
O: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", P: "f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~",
Q: "g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~", R: "[c#2@9 d#2 e2 b2@5]/2", S: "[a1@31 ~]/2",
T: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~", U: "b1@7 ~ b1 ~ b1@6", V: "f#1@7 ~ f#1 ~ f#1@5 ~",
W: "b1@6 ~@2 b1 ~ b1@5 ~", X: "f#1@7 ~ f#1 ~ f#1@4 b1 c#2", Y: "f#1@6 ~@2 f#1 ~ f#1@2 g#1@3 ~",
Z: "[a1@9 b1@13 c#2@37 ~@5]/4",
})).s("gm_electric_bass_finger").gain(0.28)
// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
A@2 B@2 C D E@2 A@2 B@2 F G H@2 I@2 J@3 G K L M N M O M P Q R S T U V W X Y@2 Z@2 AA@2 AB@2 AC AD AE@4 AF@2 AG@2 AH@2
AI AJ AK AL AM AN AO@2 AP@2 AQ@2 AR@3 AS M AS M AT AU@2 AV AW AX AY W X AZ@2 BA BB BC BD BE BF BG@2 BH@2 BI BJ@4 ~
>`.pickRestart({
A: "[[g#3,c#4,e4]@3 [f#3,b3,d#4]@4 g#3@4 ~@2 c#4@3, [c#2,c#3], ~@7 e4@9, ~@7 c#4@5 b3@4, ~@11 g#3@5]/2", // C#m B C#
B: "[[g#3,c#4,e4]@3 [f#3,b3,d#4]@4 e3@4 ~@2 a3@3, [a1,a2], ~@7 c#4@9, ~@7 a3@5 b3@4, ~@11 e3@5]/2", // C#m B A
C: "[e3,a3,c#4]@3 [a3,c#4,e4]@5, [f#1,f#2]", D: "[c#4,d#4]@3 [c#4,d#4,g#4]@5, [g#1,g#2,g#3]",
E: "[[c#4,e4]@3 [b3,d#4]@4 [a3,c#4]@9, [a1,a2]]/2", F: "~@3 f#4, [f#1,f#2,e3,a3,c#4], ~@3 e4@5",
G: "~@7 g#3, [g#1,g#2,c#4], g#3@7 ~, d#4@3 d#4, ~@3 g#4@5", // C#5
H: "[[g#3,c#4,e4]@3 [g#3,b3,d#4,f#4]@4 g#3@3 ~@5 c#3, c#2@7 g#3, c#3@5 g#3 b3@2, ~@7 [e4,g#4]@9, ~@7 c#4@4 c#3@2 c#4@3]/2", // C#m G#m7 E
I: "[[g#3,b3,e4]@3 [b3,d#4,f#4]@4 b3@3 ~@3 b4@3, e2@3 c#4, e3@11 e3@5, ~@7 [e4,g#4]@9, ~@5 b3@3]/2", // E B E
J: "[[a3,c#4,e4]@4 ~@2 g#4 ~@7 b4 ~@4 [a3,c#4]@3 [a3,c#4,e4]@2, [a1,a2]@5 f#4@3, ~@8 [b3,d#4,f#4]@6 [a3,e4]@17 ~ [f#1,f#2]@16, ~@14 c#4@12 c#4@5 ~@17, ~@24 b3@7 ~@7 f#3@10]/3", // A B A5 F#
K: "~@7 a3, [a1,a2,c#4,e4], a3@2 a3 b3@2 a3 b3@2, ~ e3@7, ~@3 d#4@5", // A
L: "a3@2 a3 [b3,d#4,f#4]@5, [a1,a2], [c#4,e4]@3 ~@5", M: "b3@3 b3@5, [b1,b2,d#4,f#4]",
N: "c#4@6 ~@6 g#4@3 ~, [f#1,f#2,a3,e4], ~@3 c#4@5", O: "c#4@3 ~@3 g#4@2, [f#1,f#2,a3,e4], ~@3 c#4@5",
P: "c#4@3 ~@3 [g#1,g#2]@2, [a3,e4], [f#1,f#2]@3 ~, ~@3 c#4@5", Q: "[a3,c#4,e4]@3 [f#3,b3,d#4]@5, [a1,a2]",
R: "[a3,c#4,e4]@3 [b3,d#4,f#4]@5, [a1,a2]", S: "[b3,d#4,f#4]@5 ~ [b3,e4,g#4]@9 ~, [e2,e3]@15 ~",
T: "[b3,d#4,f#4]@5 ~@7 f#4@2 e4 ~, [e2,e3]@15 ~, ~@6 [b3,e4,g#4]@9 ~", U: "[c#4,e4,g#4]@3 [c#4,e4,g#4]@5, [a1,a2]",
V: "[b3,d#4,f#4]@6 [c#4,e4,g#4]@9 ~, [a1,a2]@15 ~", // B C#m A
W: "[a3,c#4,f#4]@3 c#4@3 ~ a3, [f#1,f#2], ~@3 f#4@5, ~@3 a3@4 ~, ~@3 c#4", // F#m F#
X: "[g#3,c#4,d#4]@5 ~ [g#3,c#4,d#4]@10, [g#1,g#2]", Y: "[[g#3,c#4,e4]@3 [f#3,b3,d#4]@4 [g#3,c#4,e4]@9, [c#2,c#3]]/2",
Z: "[[g#3,c#4,e4]@3 [f#3,b3,d#4]@4 [e3,a3,c#4]@9, [a1,a2]]/2", // C#m B A
AA: "[[c#4,e4,g#4]@3 ~@3 g#4 [g#3,c#4,e4]@9, [c#2,c#3], ~@6 [b3,d#4,f#4]@9 ~@17]/2", // C#m C# B
AB: "[[c#4,e4,g#4]@3 ~@3 g#4 a3@5 ~@3 a3, [a1,a2], ~@3 [b3,d#4,f#4]@4 e4@7 e4@2, ~@7 c#4@6 c#4@3, ~@12 a3@3 ~]/2", // C#m A B
AC: "c#4@3 ~@3 e4@2, [f#1,f#2,f#3,a3], ~@3 c#4@5", AD: "c#4@2 b3 ~@9 d#4@4, [g#1,g#2,g#3], d#4@3 ~, ~@3 g#4@5",
AE: "[[g#3,c#4,e4]@3 [b3,d#4,f#4]@4 ~@2 f#4 ~ g#4 e4 ~@3 [b3,e4]@4 [b3,d#4,f#4]@3 ~@7 f#4@2, [c#2,c#3]@30 g#4@11 ~@15 g#4@8, ~@7 [c#4,e4,g#4]@3 f#4@2 ~ e4@3 ~@7 [g#3,b3,e4]@9, ~@9 [b3,d#4]@3 c#4@4 [e2,e3]@16, ~@7 b4 ~@8]/4", // C#m B E5 B C# C#m E B …
AF: "[[c#4,e4,g#4]@4 [b3,d#4,f#4]@3 ~@8 b3, [a1,a2], ~@7 c#4@9, ~@7 e4@6 a3@3, ~@7 a3@5 b3@2 e4@2]/2", // C#m B A
AG: "[f#3 ~ [g#1,g#2]@2, [f#1,f#2,a3,c#4] ~, ~ f#3 ~@2, ~@5 e4@3 ~@8, ~@7 [g#3,b3,d#4]@9]/2", // G# F#m G#m
AH: "[[e3,a3,c#4]@3 [f#3,b3,d#4]@3 [f#3,b3,d#4]@2 [a3,c#4,e4]@3 d#4@2 ~@2 a3, [a1,a2], ~@11 f#4@5, ~@11 b3@3 b3@2, ~@13 d#4@3]/2", // A B A
AI: "[f#3,b3,d#4]@6 [g#3,b3,e4]@9 ~, [e2,e3]@15 ~", // B E
AJ: "[f#3,b3,d#4]@3 b3@2 ~ f#4@2, [e2,e3], ~@3 [g#3,e4]@5, ~@5 b3@3", AK: "[c#4,e4,g#4]@5 ~ [c#4,e4,g#4]@10, [a1,a2]",
AL: "[b3,d#4,f#4]@3 [c#4,e4,g#4]@5, [a1,a2]", // B C#m A
AM: "[a3,c#4,f#4]@3 a3@2 ~@2 c#4, [f#1,f#2], ~@6 [c#4,f#4]@5 c#4@3 ~@2, ~@5 a3@3, ~@3 f#4", // F#m F# F#5
AN: "[g#3,c#4,d#4]@5 ~ [g#3,c#4,d#4]@9 ~, [g#1,g#2]@15 ~", // G#sus4 G#
AO: "[[g#3,c#4,e4]@3 [b3,d#4,f#4]@4 ~@8 c#4, [c#2,c#3], ~@7 e4@9, ~@7 g#4@6 c#4 g#4@2, ~@7 c#4@5 b3@4]/2", // C#m B C#
AP: "[[a3,c#4,e4]@3 [f#3,b3,d#4]@4 e3@5 ~ a3 [e3,a3,c#4]@2, [a1,a2], ~@7 c#4@7 ~@2, ~@14 a3@11 b3@3 ~@4, ~@6 e3 ~]/2", // A B A
AQ: "[[g#3,c#4,e4]@5 ~ [f#3,b3,d#4]@7 ~ [e3,g#3,c#4]@8 [e3,g#3,b3]@2 e3@2 e3@2 [g#3,c#4,e4]@4, [c#2,c#3]@31 ~, ~@6 [g#3,b3] ~]/2", // C#m B C#m E C#m C# G#m
AR: "[[g#3,c#4,e4]@3 b3@2 ~@2 b3 [e3,a3,c#4]@2 [f#3,b3,d#4]@2 [a3,c#4,e4]@3 ~@4 b3@5, [a1,a2]@31 ~ [b1,b2]@16, ~@3 f#3@5 ~@16, ~@3 d#4@3 d#4@2 ~@7 [d#4,f#4]@9, ~@5 b3@2 ~@8 b3@4 ~@5]/3", // C#m A B A B D#m
AS: "c#4@3 c#4@5, [f#1,f#2,f#3,a3]", AT: "c#4@3 ~@3 [g#1,g#2]@2, [f#3,a3], [f#1,f#2]@3 ~, ~@3 c#4@5",
AU: "[[a3,c#4,e4]@3 [f#3,b3,d#4]@5 [a3,c#4,e4]@3 [b3,d#4,f#4]@5, [a1,a2]]/2", // A B A B A
AV: "[b3,d#4,f#4]@6 [b3,e4,g#4]@9 ~, [e2,e3]@15 ~", // B E
AW: "[b3,d#4,f#4]@5 ~@9 e4@2, [e2,e3], ~@3 [b3,g#4]@5, ~@3 e4@4 ~, ~@3 f#4", // B E
AX: "[c#4,e4,g#4]@6 [c#4,e4,g#4]@9 ~, [a1,a2]@15 ~", AY: "[b3,d#4,f#4]@5 ~ [c#4,e4,g#4]@9 ~, [a1,a2]",
AZ: "[g#3,c#4,e4]@3 [b3,d#4,f#4]@3 [b3,d#4,f#4]@2, [c#2,c#3]", // C#m B C#
BA: "[d#4,f#4,b4]@5 ~ e4@6 ~@2 b4 ~, [e2,e3]@15 ~, ~@6 [g#4,b4]@9 ~, ~@3 e4", // B E G#m
BB: "[d#4,f#4,b4]@5 ~@9 e4@2, [e2,e3], ~@3 [g#4,b4]@5, ~@3 e4@4 ~, ~@3 f#4", // B E G#m
BC: "[c#4,e4,g#4]@5 ~ [c#4,e4,g#4]@9 ~, [a1,a2]@15 ~", BD: "[b3,d#4,f#4]@5 ~ [c#4,e4,g#4]@6 [b3,d#4,f#4]@4, [a1,a2]",
BE: "[a3,c#4,f#4]@5 ~ [a3,c#4,f#4]@9 ~, [f#1,f#2]@15 ~", // F#m F#
BF: "[g#3,c#4,d#4]@3 [g#3,c#4,d#4]@3 [g#3,c#4,d#4]@2, [g#1,g#2]", // G#sus4 G#
BG: "[[g#3,c#4,e4]@3 [f#3,b3,d#4]@4 c#4@6 c#4@3, [c#2,c#3], ~@7 [g#3,e4]@9]/2", // C#m B C# C#m
BH: "[[g#3,c#4,e4]@3 [f#3,b3,d#4]@4 e3@4 ~@3 b3@2, [a1,a2], ~@7 c#4@9, ~@7 a3@5 b3 a3@3, ~@11 e3@5]/2", // C#m B A
BI: "~@3 e4@3 ~ f#4, [f#1,f#2,e3,c#4], a3@3 [a3,e4]", // F#7 A5
BJ: "[~@4 e4@3 d#4@2 ~@9 b3@4 [c#2,c#3,e3,g#3,c#4]@36 ~@6, [a1,a2,g#4]@9 [b1,b2]@14 ~@41, ~@2 f#4@7 b3@9 ~@46, ~@14 d#4@9 ~@41]/4", // C#m Amaj7 B
})).s("gm_epiano2").gain(0.39).pan(0.6)
// other · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note(`<
A B A C A B D@2 ~@14 E@3 F G H@2 ~@9 A B D@2 ~@6 I@2 ~@22 J K J L J L ~@16 A B A C M N@4 ~
>`.pickRestart({
A: "[d#4,d#5] [e4,e5] [b4,b5] [f#4,f#5]@2 ~@3", B: "~@2 [e4,e5]@2 [g#4,g#5]@2 [f#4,f#5]@4 [b3,b4]@5 ~",
C: "~@2 [e4,e5]@2 [g#4,g#5]@2 [f#4,f#5]@4 [b4,b5]@5 ~", // E G# F# B
D: "[[d#4,d#5]@2 [e4,e5]@2 [b4,b5]@2 [f#4,f#5]@5 ~ [e4,e5]@2 [f#4,f#5]@6 ~@12]/2", // D# E B F# E F#
E: "[~@2 [e5,e6]@2 [d#5,d#6]@2 [b4,b5]@4 [c#5,c#6]@4 [a4,a5]@4 [g#4,g#5]@2 [e4,e5]@6 [c#4,c#5]@2 [g#4,g#5]@2 [f#4,f#5] e4 [f#4,f#5]@6 [b3,b4]@6 ~@4, ~@31 e5@2 ~@15]/3", // E D# B C# A G# E C# …
F: "~@12 [g#4,g#5]@2 [f#4,f#5] [e4,e5]", G: "[f#4,f#5]@6 [b3,b4]@7 ~@3",
H: "[~@12 [g#4,g#5]@2 [f#4,f#5] e4 [f#4,f#5]@6 [b3,b4]@6 ~@4, ~@15 e5@2 ~@15]/2", // G# F# B
I: "[~ [e5,e6] [d#5,d#6] [b4,b5]@2 [c#5,c#6]@2 [g#4,g#5]@2 [f#4,f#5] [b4,b5] [g#4,g#5]@2 [f#4,f#5] [b4,b5] [g#4,g#5]]/2", // E D# B C# G# F# B G# …
J: "[f#4,f#5] [c#4,c#5] [f#4,f#5] [b3,b4] [f#4,f#5] [c#4,c#5] [f#4,f#5] [b3,b4]", // F# C# F# B F# C# F# B
K: "[f#4,f#5] [c#4,c#5] [f#4,f#5] [b3,b4] [f#4,f#5] [c#4,c#5] [f#4,f#5] b4, ~@14 b5 ~", // F# C# F# B F# C# F#
L: "[f#4,f#5] [c#4,c#5] [f#4,f#5] [b3,b4] [f#4,f#5] [c#4,c#5] [f#4,f#5] [b4,b5]", // F# C# F# B F# C# F# B
M: "[d#4,d#5] [e4,e5] [b4,b5] [f#4,f#5]@3 [e4,e5] [f#4,f#5]", // D# E B F# E F#
N: "[[g#4,g#5]@2 [f#4,f#5]@2 [e4,e5]@3 [d#4,d#5]@2 [f#4,f#5]@3 [e4,e5]@2 [d#4,d#5]@4 [b3,b4]@4 [c#4,c#5]@37 ~@5]/4", // G# F# E D# F# E D# B …
})).s("gm_synth_strings_2").gain(0.19).pan(0.6)
// other · music box
const music_box = note(`<
A B A C A B D ~@15 E F G H G H G ~@9 A B D ~@7 I J ~@22 K L K L K L ~@16 A B A C D M N ~@3
>`.pickRestart({
A: "[d#5,d#6] ~ [e5,e6] ~ [b5,b6] ~ [f#5,f#6] ~@9", B: "~@2 [e5,e6] ~ [g#5,g#6] ~ [f#5,f#6] ~@3 [b4,b5] ~@5",
C: "~@2 [e5,e6] ~ [g#5,g#6] ~ [f#5,f#6] ~@3 [b5,b6] ~@5", // E G# F# B
D: "[d#5,d#6] ~ [e5,e6] ~ [b5,b6] ~ [f#5,f#6] ~@5 [e5,e6] ~ [f#5,f#6] ~", // D# E B F# E F#
E: "~@2 [e6,e7] ~ [d#6,d#7] ~ [b5,b6] ~@3 [c#6,c#7] ~@3 [a5,a6] ~", // E D# B C# A
F: "~@2 [g#5,g#6] ~ [e5,e6] ~ [e5,e6] ~@3 [c#5,c#6] ~ [g#5,g#6] ~ [f#5,f#6] [e5,e6]", G: "[f#5,f#6] ~@5 [b4,b5] ~@9",
H: "~@12 [g#5,g#6] ~ [f#5,f#6] [e5,e6]", I: "~@2 [e6,e7] ~ [d#6,d#7] ~ [b5,b6] ~@3 [c#6,c#7] ~@3 [g#5,g#6] ~",
J: "~@2 [f#5,f#6] ~ [b5,b6] ~ [g#5,g#6] ~@3 [f#5,f#6] ~ [b5,b6] ~ [g#5,g#6] ~", // F# B G# F# B G#
K: "[f#5,f#6] ~ [c#5,c#6] ~ [f#5,f#6] ~ [b4,b5] ~ [f#5,f#6] ~ [c#5,c#6] ~ [f#5,f#6] ~ [b4,b5] ~", // F# C# F# B F# C# F# B
L: "[f#5,f#6] ~ [c#5,c#6] ~ [f#5,f#6] ~ [b4,b5] ~ [f#5,f#6] ~ [c#5,c#6] ~ [f#5,f#6] ~ [b5,b6] ~", // F# C# F# B F# C# F# B
M: "[g#5,g#6] ~ [f#5,f#6] ~ [e5,e6] ~@2 [d#5,d#6] ~ [f#5,f#6] ~@2 [e5,e6] ~ [d#5,d#6] ~", // G# F# E D# F# E D#
N: "~@2 [b4,b5] ~@3 [c#5,c#6] ~@9", // B C#
})).s("gm_music_box").gain(0.15).pan(0.4)
// other · pad poly · "POLYSYNTH"
const pad_poly = note("<~@51 A B@2 ~@50>".pickRestart({
A: "~@5 [e5,e6] [b5,b6] [a5,a6]", B: "[[g#5,g#6]@4 [f#5,f#6]@2 [b5,b6] [g#5,g#6]@5 ~@4]/2",
})).s("gm_pad_poly").gain(0.19)
// other · distortion guitar · "DISTORTION"
const distortion_guitar = note("<~@63 A B@2 C D E F G H I ~@13 J K ~@16>".pickRestart({
A: "~@10 f#2 g#2 b2 g#2 b2 g#2", B: "[c#3@19 c3 [a2,a#2,b2] ~@5 f#3 g#3 b3@2 b3@2]/2",
C: "f#3 g#3 b3 c#4 d4@10 b3 c#4", D: "c#4@7 c4 [a3,a#3,b3] ~ f#2 g#2 b2 g#2 b2 g#2", E: "c#3@3 c#3@3 ~@2",
F: "b2 c#3 f#3 c#3 e3 f#3 c#3@4 e3 f#3!2 g#3 [f#3,b3] g#3", // B5
G: "[e3,a3,a#3] [b3,c4,c#4] ~ e4 f#4@2 f#4 [e4,f#4] f#4@6 e4 ~, ~ [a3,e4] ~@6", // A Esus2 A5
H: "f#4@4 c#5@4 b4 ~ g#4 ~ f#4@2 e4 [c#4,e4]", I: "f#4@15 ~", J: "~@2 f#5 ~ f#5@3 e5 c#5@8",
K: "~@2 f#5 ~ f#5@3 e5 f#5@7 ~",
})).s("gm_distortion_guitar").gain(0.48).pan(0.6)
// chords · distortion guitar · "DISTORTION"
const distortion_guitar_2 = note(`<
~@23 A B C@4 D E F G H I J K@2 L@2 M ~ N@2 O@2 P Q R@2 S@2 T@2 U V W X G H Y J Z AA AB@2 AC@2 AD@2 AE@2 B C@2 AF B D E
AG G H AH@2 AI AJ AK@2 G H AL J AM AN ~@10
>`.pickRestart({
A: "~@7 [b2,f#3]", B: "[b2,f#3]",
C: "[~@2 [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] [b2,f#3]@17]/2", // F#5 B5
D: "~@2 [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ f#2@2 g#2@2, ~@3 c#3", E: "[a2,e3]@3 [a2,e3]@5",
F: "~ [a2,e3,b3]!2 [a2,e3,b3]@2 [a2,e3,b3] [a2,e3,b3]@2", G: "[e2,b2,e3]@5 ~ [e2,b2,e3]@10",
H: "~@2 [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3] ~", // E5
I: "[a2,e3,a3]@2 ~ [a2,e3,a3]@5", // A5
J: "~@2 [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3]@4", // A5
K: "[[f#2,c#3,f#3]@14 [f#2,f#3]@2 [g#2,d#3,g#3]@5 ~ [g#2,d#3,g#3]@8 [g#2,d#3,g#3]@2, ~@7 c#3@7 ~@2]/2", // F#5 F# G#5
L: "[[c#3,g#3]@31 ~]/2", M: "[c#4,g#4]@13 ~@3",
N: "[[c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3]@6 [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3]@3 f#3]/2", // C#5
O: "[~@2 [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3]@11 ~ [a2,e3] ~ [a2,e3]@2 e2@2]/2", // A5
P: "[f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ f#2 ~ f#2@2, ~@3 c#3", // F#5
Q: "[g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~", // G#5
R: "[[c#3,g#3]@5 ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3]@7 ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3]@4]/2", // C#5
S: "[e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~", // E5
T: "[[a2,e3]@7 ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3]@7 ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ a2@2 e2@2, ~@7 e3]/2", // A5
U: "[f#2,c#3]@7 ~ [f#2,c#3] ~ [f#2,c#3] ~ f#2@2 f#2@2, ~@3 c#3", V: "[g#2,d#3]@3 f#2 [g#2,d#3]@2 [g#2,d#3]@2",
W: "[a2,e3]", X: "~ [a2,e3,b3]!3 ~ g#3 a3@2, ~@5 [a2,e3]@3", Y: "[a2,e3,a3]@5 ~ [a2,e3,a3]@10",
Z: "[f#2,c#3,f#3]@2 ~ [f#2,c#3,f#3]@5", AA: "[g#2,d#3,g#3]@2 ~ [g#2,d#3,g#3]@5",
AB: "[[c#3,g#3]@5 ~ [b2,f#3]@7 ~ [c#3,g#3]@7 ~@11]/2", // C#5 B5 C#5
AC: "[[a2,e3]@5 ~ [a2,d#3]@7 ~ [a2,e3]@8 ~@2 [a2,e3]@4 [a2,e3]@4]/2", // A5 Adim A5
AD: "[[c#3,g#3]@5 ~ [b2,f#3]@7 ~ [c#3,g#3]@7 ~ [b2,f#3]@4 b2@2 [c#3,g#3]@3 ~]/2", // C#5 B5 C#5 B5 C#5
AE: "[[a2,e3]@5 ~ [a2,d#3]@7 ~ [a2,e3]@6 [a2,d#3]@4 [a2,e3]@4 ~@4]/2", // A5 Adim A5 Adim A5
AF: "~@2 [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [b2,f#3] c#3", // F#5 B5
AG: "~@2 [a2,e3,b3]@2 [a2,e3,b3]@2 [a2,e3,b3]@3 ~ [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2", // Asus2 A5
AH: "[[a2,e3,a3]@4 ~@2 [a2,e3,a3]@13 ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3]@4]/2", // A5
AI: "[f#2,c#3,f#3]@15 ~", AJ: "[g#2,d#3,g#3]@4 ~@2 [g#2,d#3,g#3]@4 [g#2,d#3,g#3] ~ [g#2,d#3,g#3]@3 ~",
AK: "[[c#3,g#3]@5 ~ [b2,f#3]@6 [b2,f#3]@2 [c#3,g#3]@7 ~ [b2,f#3]@5 ~ [b2,f#3]@4]/2", AL: "[a2,e3,a3]@3 [a2,e3,a3]@5",
AM: "[f#2,c#3,f#3]", AN: "[g#2,d#3,g#3]",
})).s("gm_distortion_guitar").gain(0.3).pan(0.3)
// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@16 A B C D E F C G ~@6 H I ~@8 J@2 ~@14 H I ~@20 H I ~@16 J@2 ~@2 K@4>".pickRestart({
A: "[e1,e2,e3] ~ [e1,e2,e3] ~ [e1,e2,e3] ~ [e1,e2,e3] ~ [e1,e2,e3] ~ [e1,e2,e3] ~ [e1,e2,e3] ~ [e1,e2,e3] ~", // E
B: "[e1,e2,e3] ~ [e1,e2,e3] ~ [e1,e2,e3] ~ [e1,e2] ~ [e1,e2,e3] ~@7", // E
C: "[a1,a2,a3] ~ [a1,a2,a3] ~ [a1,a2,a3] ~ [a1,a2,a3] ~ [a1,a2,a3] ~ [a1,a2,a3] ~ [a1,a2,a3] ~ [a1,a2,a3] ~", // A
D: "[a1,a2,a3] ~ [a1,a2,a3] ~ [a1,a2,a3] ~ [a1,a2,a3] ~ [a1,a2,a3] ~@7", // A
E: "[f#1,f#2,f#3] ~ [f#1,f#2,f#3] ~ [f#1,f#2,f#3] ~ [f#1,f#2,f#3] ~ [f#1,f#2,f#3] ~ [f#1,f#2,f#3] ~ [f#1,f#2,f#3] ~ [f#1,f#2,f#3] ~", // F#
F: "[g#1,g#2,g#3] ~ [g#1,g#2,g#3] ~ [g#1,g#2,g#3] ~ [g#1,g#2,g#3] ~ [g#1,g#2,g#3] ~ [g#1,g#2,g#3] ~ [g#1,g#2,g#3] ~ [g#1,g#2,g#3] ~", // G#
G: "[a1,a2,a3] ~@15", H: "[e5,e6] [d#5,d#6] [e5,e6] [b4,b5] [e5,e6] [d#5,d#6] [e5,e6] [a4,a5]",
I: "[e5,e6] [d#5,d#6] [e5,e6] [b4,b5] [e5,e6] [d#5,d#6] [e5,e6] [b4,b5]", J: "[~ [b4,e5,f#5,c#6]@15]/2",
K: "[~@2 [f#4,g#4,c#5]@51 ~@11]/4", // F#sus2
})).s("gm_string_ensemble_1").gain(0.12).pan(0.4)
// chords · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note("<~@33 A ~ B ~@23 C ~ D ~@19 E ~ F ~@5 C ~ D ~@12>".pickRestart({
A: "[b4,d#5,f#5]@4 ~@2 [b4,e5,g#5]@7 ~@3", B: "[b4,d#5]@2 d#5@2 b4 ~ [c#5,e5,g#5]@6 ~@4, f#5@5 ~@11",
C: "[b4,d#5,f#5]@5 ~ [b4,e5,g#5]@6 ~@4", D: "[b4,d#5,f#5]@2 ~ [c#5,e5,g#5]@3 ~@2",
E: "[b4,d#5,f#5]@2 ~ [b4,e5,g#5]@3 ~@2", F: "[b4,d#5,f#5]@4 ~@2 [c#5,e5,g#5]@7 ~@3",
})).s("gm_synth_brass_1").gain(0.28).pan(0.8)
// drums · kick
const kick = s("bd").struct(`<
~@23 A B@6 C@2 D@5 E@2 ~ E ~ D@15 E D@5 E D@7 E F@5 D@2 E D@7 E D@6 E ~ E ~ E ~ G ~@3
>`.pickRestart({
A: "~@5 x ~@2", B: "x ~@2 x!2 ~@3", C: "x ~@2 x ~@4", D: "x!2", E: "x", F: "x ~@3 x!2 ~@2", G: "~@3 x ~@4",
})).gain(0.42)
// drums · snare
const snare = s("sd").struct("<~@23 A@7 B C B@5 C ~@3 A B@15 D B@5 C B@7 ~ B E B@3 E B ~ B@7 C B@5 ~@11>".pickRestart({
A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "~ x ~@6", E: "~@4 x ~@7 x ~ x!2",
})).gain(0.42)
// … 63 more lines
More by Loverboy
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.