Strudelify

It's Impossible

Perry Como

KeyG majorTempo71 bpm
0:00/0:00
// It's Impossible — Perry Como
// 71 bpm, 4/4, key G major. 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 41 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(71/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 · fretless bass · "FRETLESS"
const bass = note("<~ A B C D@2 E F G H I J K L M N O A B C D@2 P Q G R S T U V W X Y ~@8>".pickRestart({
  A: "g1@11 ~ g1 ~@3 g1@14 ~@2", B: "g1@5 ~ g1 ~ g1@4 g2@4", C: "f#2@11 ~ f#1 ~@3 f#1@8 f#2@7 ~",
  D: "[b1@11 ~ b1 ~@3 b1@8 b1@4 g1 f#1 f1 e1@9 ~@4 e1 ~@3 e1@8 e2@8]/2", E: "d2@11 ~ d2@4 g1@8 g2@8",
  F: "b1@12 b1 ~@3 b1@12 ~ g1 f#1 f1", G: "e1@10 ~@2 e1@2 ~@2 e2@7 ~ b1@8", H: "a1@8 ~@4 a1 ~@3 a1@12 a1 ~ a#1 b1",
  I: "c2@9 ~@3 c2@3 ~ c3@8 g2@8", J: "g1@10 ~@2 g1 ~@3 g1@13 ~ f#1 f1", K: "e1@12 e1 ~@3 e2@8 e1@8",
  L: "a1@9 ~@3 a1 ~@3 a1@15 ~", M: "a1@8 ~@4 a1 ~@3 a1@11 ~ a1@3 ~", N: "d2@10 ~@2 d2 ~@3 d3@8 a2@8",
  O: "d2@9 ~@3 d2 ~@3 d2@7 ~ d2@7 ~", P: "d2@11 ~ d2@2 ~@2 g1@8 g2@8", Q: "d2@8 a1@5 a1 g#1 g1 f1@12 ~ g1 f#1 f1",
  R: "a1@4 c2@4 e2@4 a2@12 e2@6 d2 c#2", S: "c2@10 d#2 g2 c3@16 c2@4", T: "g1@3 g2 f#2@3 f#2", U: "f2@3 f2 e2@2 b1@2",
  V: "a1@9 ~@3 a1 ~@3 a1@8 e2@6 d#2@2", W: "d2@11 ~ d2 ~@3 d2@7 ~ a1@8", X: "g1@9 ~@3 g1 ~@3 g1@16",
  Y: "g2@12 g1@2 ~@2 g1@13 ~@3",
})).s("gm_fretless_bass").gain(0.19)

// chords · piano · "A.PIANO 1"
const piano = note("<~ A B C D E F G H I J K L M I N O P Q R S@2 T U H V W X Y Z AA AB AC ~@8>".pickRestart({
  A: "[g2,d3]@3 [g2,d3] [g2,e3]@4", B: "[g2,f#3]@3 [g2,f#3] [g2,e3]@4", C: "f#3@3 f#3 f#3@4, a3",
  D: "b2@3 b2 b2@4, d#3", E: "e3@12 e3@4 e3@15 ~, b3@31 ~", F: "d3@3 d3 g3@4, a3@15 ~@17", G: "b2@3 b2 b2@4, a3",
  H: "e3@3 e3 e3@4, g#3@17 ~@15", I: "a2@3 a2 a2@4", J: "~ c3", K: "[g2,d3]@3 [g2,d3] [g2,d3]@4",
  L: "~@3 e3 e3@4, [g#3,d4]", M: "a2@3 a2 a2@4, g3", N: "d3@3 d3 d3@4, a3", O: "d3@3 d3 d3@2 b3 a3, f#3@13 ~@3",
  P: "~@4 b3@19 ~@5 a3@4, c4@9 ~@15 b3@7 ~", Q: "~ b3 ~ a3 ~ b3 ~ a3, c4 b3 c4 b3", R: "~@4 b3@4 b3@19 ~@5, c4@9 ~@23",
  S: "[b2@3 b2 ~@2 b3 ~@2 b3@5 ~ a3, a3 ~@3 b2@3 a3@3 ~@6, ~@32 c4@8 ~@16 b3@7 ~]/2",
  T: "~ b3!2 ~@2 b3 ~ d4, c4@12 a3@13 ~@7, ~@2 c4!2", U: "~ d4 ~@2 [f3,a3]@4, e4 d4@3",
  V: "[b3,c4,e4]@3 [b3,c4,e4] [a3,c4]@4", W: "[a3,c4,d#4]@3 [a3,c4,d#4] [a3,c4]@4",
  X: "[g3,b3,d4]@9 ~@3 [g3,b3,d4]@4 [f#3,b3,d4]@16", Y: "[f3,a3,d4] [e3,g#3,d4]", Z: "g3@3 [g3,c#4] g3@4",
  AA: "[g3,c4]@3 [g3,c4] [f#3,c4]@4", AB: "[g2,d3]@12 [g2,d3]@4 [g2,d3]@15 ~", AC: "[g2,d3]@12 [g2,d3]@4 [g2,d3]@9 ~@7",
})).s("gm_piano").gain(0.32)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note("<~@4 A ~@3 B ~ C ~ D ~ E ~@9 B F G ~@2 H ~@11>".pickRestart({
  A: "a3", B: "d4", C: "c3@3 c3 ~@4", D: "e3@3 ~@5", E: "g3", F: "~ e4", G: "~ d#4", H: "c#4@3 ~ c#4@4",
})).s("gm_piano").gain(0.24)

// chords · piano · "A.PIANO 1"
const piano_2 = note("<A B C D@2 E F G H I J K L M N O P Q@3 R@2 S@2 T U V W X Y Z AA AB ~@8>".pickRestart({
  A: "~@7 a4, ~@3 b4", B: "c5 b4 b4@4 ~ a4, ~@3 b4", C: "~ b4 ~ a4 ~ b4 ~ a4, c5!2, ~ b4 ~ b4",
  D: "[~ b4 ~@5 e4 ~@7 a4, e4@7 ~ f4@8, c5@9 ~@3 d#4@5 ~@3 f#4@12, ~ b4@6 b4]/2",
  E: "~@4 b4@4 b4@16 ~@4 a4@3 ~, [g4,c5]@31 ~, ~@24 b4@7 ~", // C5
  F: "~ b4 ~ a4 ~@3 d5, f4, c5@15 ~ c5@8 c5@8, ~@8 b4@7 ~@5 b4@12", G: "~ d5 ~@5 b4, f4, e5@17 ~@7 c5@8, ~ d5@3",
  H: "~@7 b4, f4, a#4@17 ~@7 c5@8, ~@2 b4@5 ~", I: "~ c5@5 ~ b4, [e4,g4], d5@17 ~@7 c5@8",
  J: "~@7 a4, [d#4,g4,d5], ~ c5@7, ~@3 b4", K: "~ b4@5 ~ a4, d4, [g4,c5]@9 ~@3 b4@4",
  L: "~@7 g#4, [f4,c5], ~ b4@7, ~@3 a4", M: "b4 a4@5 ~ g#4, [c4,e4], ~@3 a4",
  N: "b4 a4 ~ g#4 ~@3 g4, [c#4,e4]@17 ~@3 e4@12, ~ a4!3", O: "g4@3 ~ f#4@4 f#4@24, c4",
  P: "~ d4 d4@5 ~, [c4,e4]@13 ~@3", // C
  Q: "[~@4 d4@2 ~@2 e4@12 [f#4,g4,b4]@8 [g4,b4]@5 ~@7 c#4@2 d4@2 d#4@2 e4@2, ~ [g4,b4]@4 ~@7, ~@12 d#4@11 ~@33 e4@17 ~@23]/3", // Gmaj7 G
  R: "[~@8 f#4@8 ~@8 f#4@16 f#4@5 ~@3 e4@10 ~@6, [d4,f4]@8 g4@6 ~@6 [g4,b4]@11 ~]/2", // Dm G
  S: "[~@8 [f4,a4]@16 a4@17 ~@19 b4@4, ~@24 f4@9 ~@15 e5@16, ~@13 d5@3, ~@7 c5]/2", // F
  T: "~@2 b4@2 c5@2 ~ b4, f4, a#4@17 ~@7 c5@8", U: "~ c5@5 ~ b4, d5@17 ~@7 c5@8",
  V: "~ c5 ~ b4 ~@3 a4, d5!2, ~@8 c5@9 ~@3 c5@12, ~@3 b4", W: "~@7 b4, c5@9 ~@15 a#4@8, ~ b4@6 ~",
  X: "~@3 b4 ~@3 g#4, c5@8 c5@9 ~@3 d5@12, ~ b4@2 ~ e5@4, ~@3 c5", Y: "~@7 a4, b4@17 ~@7 g#4@8, ~ a4@6 ~",
  Z: "~@3 a4 ~@3 f#4, b4!2 b4@2, ~ a4@2 ~@2 a4@3, ~@3 g4", AA: "a4@4 g4@4 g4@23 ~, b3@31 ~",
  AB: "~@4 d5@4 [b4,d5]@17 ~@7, [a#4,f#5]@17 ~@15", // Bm D#m
})).s("gm_piano").gain(0.48)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~ A B C D E F G H I J K L M N O P Q@2 R S T U V W X Y Z AA AB AC AD@2 ~@8
>`.pickRestart({
  A: "d3 e3", B: "f#3 e3", C: "a3@4 e4@2 d#4 e4", D: "f4 f#4 g4 f#4", E: "[g4,b4]",
  F: "c5 b4@2 a4 c5 b4 c5 d5, [d4,f4] f4, ~@4 d5@3 ~", G: "e5 d5@5 c5 b4, [d4,f4], a4@3 ~",
  H: "a#4@2 b4@2 c5@3 b4, [d4,g#4]", I: "d5 c5@5 c5 b4, e4, g4@3 ~", J: "d5 c5@5 b4 a4, d#4, g4@3 ~",
  K: "c5 b4@6 a4, d4, g4@3 ~", L: "c5 b4@5 a4 g#4, d4, [g#3,f4]@3 ~", M: "b4 a4@5 a4 g#4, c4, [g3,e4]@3 ~",
  N: "b4 a4@2 [g#3,g#4] [g3,a4]@3 g4, [c#4,e4], g3@3 ~@5", O: "g4 f#4@7, [a3,c4]", P: "e5 d5@7, a4, f#4 ~@31",
  Q: "[d5@3 d#5 e5@4 f#5@4 e5@4, b4]/2", R: "[c5,e5]@4 c#5 d5 d#5 e5, [f#4,a4]", S: "f5 f#5 g5 f#5, [a4,d#5]",
  T: "[f#5,a5] [e5,g5], b4", U: "a5 g5, [g4,d5,f5]", V: "e5 d5@3 e6 d6 c6 b5, [a4,f5], a5 ~",
  W: "a#5@2 b5@2 c6@3 b5, [e4,d5,g#5]", X: "e5@2 a5 c6 e6@4, [c4,a4]", Y: "d#6@6 f6 d6 d#6@8, [g4,c5]",
  Z: "d6@6 e6 c#6 [f#4,d6]@8, b4, g4 ~", AA: "c6 b5 d#5 e5 e6 d6 c6 g#5, [f4,a4] [e4,g#4]",
  AB: "b5@4 a5@8 b5 a5 ~ g#5 a5@16, [g4,c#5]", AC: "g5 f#5, [d4,c5]",
  AD: "[a5 ~@7 f#6 d6@5 ~@2, [g4,b4]@4 [g4,b4]@3 ~, ~ g5@8 ~@7]/2", // G
})).s("gm_string_ensemble_2").gain(0.1).pan(0.9)

// other · string ensemble 1 · "STRINGS" · Esus2 D#maj7
const string_ensemble_1 = note(`<
  ~@15
  [~@24 d4 e4 f#4 a4 d5 [e5,f#5] a5 [d6,d#6]]
  [e6 d6@7]
  ~@14
  [~@24 g4 a4 b4 d5 g5 a5 b5 d6]
  [f#6 d6@5 ~@2]
  ~@8
>`).s("gm_string_ensemble_1").gain(0.08).pan(0.2)

// chords · piano · "A.PIANO 2"
const piano_3 = note("<~@7 A@2 B C D E@2 ~ F@2 ~@2 G@2 H I J@2 K ~ L M@2 ~@11>".pickRestart({
  A: "[~@9 d4@2 ~@2 a4@2 ~@7 a6@33 ~@9, ~@11 e4@3 ~ d5@2 f5@2 d6@2 f6@3 ~@40, ~@12 f4@4 e5@2 a5@2 e6@3 ~@41]/2",
  B: "~@8 e5@3 [b4,b5]@3 [a4,a5]@3 [c5,c6]@13 ~@2, ~@7 e4@4 ~@21", // B A C
  C: "~@8 d#5@3 [b4,b5]@3 [a4,a5]@3 [c5,c6]@13 ~@2, ~@7 d#4@4 ~@21", // B A C
  D: "~@15 d7@17, ~@8 d5@2 a5@2 d6@2 b6@3 ~@15, ~@9 g5@2 b5@2 [g6,a6]@4 ~@15", // Gsus2
  E: "[~@9 d#7@2 ~@2 c7@2 ~@17 e5@8 ~@8 c7@9 ~@7, ~@8 e7@3 d7@3 ~@2 a#6@2 g#6@2 f#6@2 e6@2 d6@2 b5@2 g#5@2 f#5@3 ~@12 c6@3 ~@16, ~@12 c#7@3 b6@2 a6@2 g6@2 f6@2 d#6@2 c6@4 g5@3 ~@12 b5@3 a6@3 ~@14, ~@27 a5@3 ~ f5@3 ~@12 e6@3 ~@15]/2",
  F: "[e6@4 ~@6 e6@2 ~@10 b6@2 ~@32 d6@7 ~, ~@4 a5@4 d6@5 ~ c7@4 e7@5 ~ c7@4 b6@4 a6@10 c5@3 e4@5 f#4@3 e5 f#5@4 ~@6, ~@6 c6@5 ~ a6@4 d7@4 a6@5 ~ d7@4 c7@4 f#6@3 c6 a5@3 d5@5 d4@14 ~@4, ~@35 e6@5 e5@3 a4@4 c4@4 a4@7 ~@6, ~@36 d6@3 f#5@5 f#4@4 a3@4 d5@3 a5@4 ~@5]/2",
  G: "[~@8 e7@2 d#7@2 ~@3 c7 ~@13 g#5 ~@2 f5@6 ~@26, ~@12 d7@3 ~ b6@2 a6@2 g6@2 f6@2 d#6@2 c6@2 a5@2 g5@2 ~@32, ~@13 c#7@13 ~ a#5@6 ~@31, ~@17 a#6@2 g#6@2 f#6@2 e6@2 c#6@4 ~@2 f#5@3 ~@30]/2",
  H: "~@8 g6@3 ~@2 e6 ~ e6, ~@5 f#6@2 f#6@3 ~@4 g6@2, ~@3 a6 ~@4", I: "f6@3 ~@13",
  J: "[~@8 a7@2 g#7@2 ~@3 f7 ~@13 c#6 ~@2 a#5@6 ~@26, ~@12 g7@3 ~ e7@2 d7@2 c7@2 a#6@2 g#6@2 f6@2 d6@2 c6@2 ~@32, ~@13 f#7@13 ~ d#6@6 ~@31, ~@17 d#7@2 c#7@2 b6@2 a6@2 f#6@4 ~@2 b5@3 ~@30]/2",
  K: "~@9 b5 c6 e6 b6 a6 g#6 a6 e7 ~@15", L: "~ d7, ~@9 d5@2 a5@2 d6@2 [a6,b6]@3 ~@14, ~@5 g5 b5 g6@2 ~@7",
  M: "[~@9 d#7@2 ~@2 c7@2 ~@17 e5@8 ~@8 a6@9 ~@7, ~@8 e7@3 d7@3 ~@2 a#6@2 g#6@2 f#6@2 e6@2 d6@2 b5@2 g#5@2 f#5@3 ~@12 b5@3 ~@16, ~@12 c#7@3 b6@2 a6@2 g6@2 f6@2 d#6@2 c6@4 g5@3 ~@12 a5@3 e6@3 ~@14, ~@27 a5@3 ~ f5@3 ~@12 c#6@3 ~@15]/2",
})).s("gm_piano").gain(0.1).pan(0.3)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~ A B C D E F G H I J K L M N O P A B Q D B R S H T U V W N X Y@2 ~@8
>`.pickRestart({
  A: "~@8 [g4,b4,d5] ~@15 [g4,b4,e5] ~@7", B: "~@8 [g4,b4,f#5] ~@15 [g4,b4,e5] ~@7",
  C: "~@8 [a4,c5,e5] ~@15 [a4,c5,d#5] ~@7", D: "~@8 [b4,d#5,f#5] ~@15 [a4,d#5,f#5] ~@7",
  E: "~@8 [g4,b4,e5] ~@15 [g4,b4,e5] ~@7", F: "~@8 [a4,c5,f5] ~@15 [g4,d5,f5] ~@7",
  G: "~@8 [a4,d5,f5] ~@15 [a4,d5,f5] ~@7", H: "~@8 [g#4,b4,e5] ~@15 [g#4,c5,e5] ~@7",
  I: "~@8 [a4,c5,e5] ~@15 [g4,c5,e5] ~@7", J: "~@8 [g4,c5,d#5] ~@15 [g4,c5,d#5] ~@7",
  K: "~@8 [g4,b4,d5] ~@15 [g4,b4,d5] ~@7", L: "~@8 [g#4,d5,f5] ~@15 [a4,b4,d5] ~@7",
  M: "~@8 [a4,c5,e5] ~@15 [a4,c5,e5] ~@7", N: "~@8 [g4,c#5,e5] ~@15 [g4,c#5,e5] ~@7",
  O: "~@8 [f#4,a4,d5] ~@15 [f#4,a4,d5] ~@7", P: "~@8 [f#4,a4,c5] ~@15 [f#4,a4,b4] ~@7",
  Q: "~@8 [a4,c5,e5] ~@15 [f#4,a4,d#5] ~@7", R: "~@8 [a4,d5,f5] ~@15 [d5,f5,a5] ~@7",
  S: "~@8 [a4,d5,f5] ~@15 [a4,c5,f5] ~@7", T: "~@8 [b4,c5,e5] ~@15 [a4,c5,e5] ~@7",
  U: "~@8 [g4,c5,d#5] ~@15 [g4,b4,d#5] ~@7", V: "~@8 [g4,b4,d5] ~@15 [f#4,a#4,d5] ~@7",
  W: "~@8 [a4,c5,d#5] ~@15 [g#4,c5,e5] ~@7", X: "~@8 [g4,a4,c5] ~@15 [f#4,a4,c5] ~@7",
  Y: "[~@8 [g4,b4,d5] ~@19 d5@10 ~@2 [g4,b4,f#5] ~@10 f#5@11 ~@2, ~@24 g4@7 ~@17 g4@2 d5@12 ~@2, ~@26 b4@7 ~@16 b4@13 ~@2]/2", // G Gmaj7
})).s("gm_acoustic_guitar_steel").gain(0.09).pan(0.8)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~ A B C B D B E B F B@2 G H B I D A B C B D B E B F B@2 G B@2 F J ~@8
>`.pickRestart({
  A: "x!2 ~@2 x!6 ~ x!3 ~ x", B: "x!16", C: "x!7 ~ x!8", D: "x ~ x!14", E: "x!13 ~ x ~", F: "x!11 ~ x!4",
  G: "x!10 ~ x!5", H: "x!3 ~ x!2 ~ x!2 ~@2 x!3 ~ x", I: "x!2 ~ x!13", J: "x!2 ~ x!3 ~@26",
})).gain(0.19)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct(`<
  ~ A ~ B ~ C ~ D ~ E ~@2 F G ~ H C A ~ B ~ C ~ D ~ E ~@2 F ~@2 E I ~@8
>`.pickRestart({
  A: "~@2 x!2 ~@6 x ~@3 x ~", B: "~@7 x ~@8", C: "~ x ~@14", D: "~@13 x ~ x", E: "~@11 x ~@4", F: "~@5 x ~@2",
  G: "~@3 x ~@2 x ~@2 x!2 ~@3 x ~", H: "~ x ~@6", I: "~@2 x ~@3 x!26",
})).gain(0.13)

stack(
  bass, piano, piano_soft, piano_2, string_ensemble_2, string_ensemble_1, piano_3, acoustic_guitar_steel, cabasa,
  cabasa_soft
)