Strudelify
It's Impossible cover art

Catch a Falling Star

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 16-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, A@4 for four bars: edit a riff to change every repeat.

// bass · fretless bass · "FRETLESS"
const bass = note("<~ A B C D E F G H I J K L M N O P A B C D E Q R H S T U V W X Y Z ~@8>".pickRestart({
  A: "g1@6 g1 ~ g1@7 ~", B: "g1@5 ~ g1 ~ g1@4 g2@4", C: "f#2@6 f#1 ~ f#1@4 f#2@4", D: "b1@6 b1 ~ b1@4 b1@2 g1 [f1,f#1]",
  E: "e1@5 ~ e1 ~ e1@4 e2@4", F: "d2@3 d2 g1@2 g2@2", G: "b1@6 b1 ~ b1@6 ~ [f1,f#1,g1]", H: "e1@5 ~ e1 ~ e2@4 b1@4",
  I: "a1@4 ~@2 a1 ~ a1@6 a1 [a#1,b1]", J: "c2@5 ~ c2@2 c3@4 g2@4", K: "g1@5 ~ g1 ~ g1@7 [f1,f#1]",
  L: "e1@6 e1 ~ e2@4 e1@4", M: "a1@4 ~@2 a1 ~ a1@8", N: "a1@4 ~@2 a1 ~ a1@5 ~ a1@2", O: "d2@5 ~ d2 ~ d3@4 a2@4",
  P: "d2@5 ~ d2 ~ d2@4 d2@4", Q: "d2@6 d2 ~ g1@4 g2@4", R: "d2@4 a1@2 a1 g#1 f1@6 ~ [f1,f#1,g1], ~@8 g1 ~@7",
  S: "a1@2 c2@2 e2@2 a2@6 e2@3 [c#2,d2]", T: "c2@5 d#2 c3@8 c2@2, ~@6 g2 ~@9", U: "g1@3 g2 f#2@3 f#2",
  V: "f2@3 f2 e2@2 b1@2", W: "a1@5 ~ a1 ~ a1@4 e2@3 d#2", X: "d2@6 d2 ~ d2@4 a1@4", Y: "g1@4 ~@2 g1 ~ g1@8",
  Z: "g2@6 g1 ~ g1@7 ~",
})).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 K AB ~@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@6 e3@2 e3@7 ~, b3@15 ~", F: "[d3,a3]@3 d3 g3@4", G: "b2@3 b2 b2@4, a3",
  H: "e3@3 e3 e3@4, g#3 ~", 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: "~ b3@5 ~ a3, c4 ~@2 b3",
  Q: "~ b3 ~ a3 ~ b3 ~ a3, c4 b3 c4 b3", R: "~ b3 b3@5 ~, c4 ~@3",
  S: "[b2@3 b2 ~@2 b3 ~@2 b3@5 ~ a3, a3 ~@3 b2@3 a3@3 ~@6, ~@4 c4 ~@2 b3]/2",
  T: "~ b3!2 ~@2 b3 ~ d4, c4@3 a3@3 ~@2, ~@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]@2 ~ [g3,b3,d4] [f#3,b3,d4]@4", 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]@6 [g2,d3]@2 [g2,d3]@5 ~@3",
})).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: "~ b4 b4@4 ~ a4, [g4,c5]@15 ~, ~@3 b4", F: "~ b4!2 a4 ~@3 d5, f4, c5@7 ~ c5@4 c5@4, ~@5 b4@3",
  G: "~ d5 ~@5 b4, f4, e5@9 ~@3 c5@4, ~ d5@3", H: "~@7 b4, f4, a#4@2 ~ c5, ~@2 b4@5 ~",
  I: "~ c5@5 ~ b4, [e4,g4], d5@9 ~@3 c5@4", 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]@9 ~ e4@6, ~ a4!3", O: "g4 f#4 f#4@6, c4", P: "~ d4 d4@5 ~, [c4,e4]@13 ~@3",
  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, ~@3 d#4@3 ~@8 e4@4 ~@6]/3", // Gmaj7 G
  R: "[~@4 f#4@4 ~@4 f#4@8 f#4@3 ~ e4@5 ~@3, [d4,f4]@8 g4@6 ~@6 [g4,b4]@11 ~]/2", // Dm G
  S: "[~@2 [f4,a4]@4 a4@4 ~@5 b4, ~@3 f4 ~@2 e5@2, ~@13 d5@3, ~@7 c5]/2", T: "~@2 b4@2 c5@2 ~ b4, f4, a#4@2 ~ c5",
  U: "~ c5@5 ~ b4, d5@2 ~ c5", V: "~ c5 ~ b4 ~@3 a4, d5!2, ~@2 c5@2 ~ c5@3, ~@3 b4", W: "~@7 b4, c5 ~@2 a#4, ~ b4@6 ~",
  X: "~@3 b4 ~@3 g#4, c5!2 e5@2, ~ b4@2 ~@2 d5@3, ~@3 c5", Y: "~@7 a4, b4@2 ~ g#4, ~ a4@6 ~",
  Z: "~@3 a4 ~@3 f#4, b4!2 b4@2, ~ a4@2 ~@2 a4@3, ~@3 g4", AA: "a4 g4 g4@6, b3",
  AB: "~@2 d5@2 [b4,d5]@9 ~@3, [a#4,f#5]@9 ~@7", // 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 ~@15",
  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@2 a5@4 b5 [g#5,a5] a5@8, [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" · Dsus2 Asus4 D Asus2 Dsus4 Bm
const string_ensemble_1 = note(`<
  ~@15
  [~@12 [d4,e4] f#4 [a4,d5,e5] [f#5,a5,d6]]
  [e6 d6@7, d#6 ~@15]
  ~@14
  [~@12 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 H I J K L M ~ N O@2 ~@11>".pickRestart({
  A: "[~@8 [e5,f5] ~ e6 a6@17 ~@4, ~@5 [d4,e4]@2 [a4,d5]@2 a5@2 f6@2 ~@19, ~@3 f4 ~ d6 ~@10]/2", // Fmaj7 Dsus2 D5
  B: "~@9 c6@6 ~, ~@2 [e4,e5] b5 c5@3 ~, ~@5 b4@2 [a4,a5]@2 ~@7", // E A
  C: "~@9 c6@6 ~, ~@2 [d#4,d#5] b5 c5@3 ~, ~@5 b4@2 [a4,a5]@2 ~@7", // D# A
  D: "~@4 d5 g5 d6 d7@8 ~, ~@5 a5@2 a6@2 ~@7, ~@3 [b5,g6] ~@4, ~@7 b6 ~@8", // Em
  E: "[~@4 e7 ~ c#7 c7 ~@2 f#6 ~ d6 ~ g#5 ~ e5@4 ~@2 [b5,c6] [e6,a6] c7@4 ~@4, ~@5 [d7,d#7]@2 b6@2 [g#6,a6]@2 [d#6,e6]@2 [a5,b5]@2 [f5,f#5]@2 ~@15, ~@4 a#6 [f6,g6] c6 g5 ~@8]/2", // Cmaj7 A5 D#maj7 Amaj7 Emaj7 Asus2 F#maj7 Fsus2
  F: "[e6@2 ~@9 b6 ~@16 [a5,d6]@3 ~, ~@2 a5@2 d6@2 a6@2 d7@2 a6@3 d7@2 c7@2 e6@4 ~@2 e4@2 f#4@2 [e5,f#5]@2 ~@3, ~@3 c6@2 e6@2 c7@2 e7@3 c7@2 b6@2 a6@6 ~@2 [a3,c4]@2 d5@2 ~@4, ~@17 f#6@2 [f#5,a5,c6]@2 [a4,c5,d5]@2 d4@7 ~@2, ~@18 d6@2 e5@2 f#4@3 a4@4 ~@3]/2", // D5 Esus2 Am F#dim D7
  G: "~@4 e7 ~ d7 c7 b6 [a6,a#6] [f#6,g6,g#6] [e6,f6] d#6 c6 [g#5,a5] [f#5,g5], ~@5 d#7@2 c#7@6 a#5@3, ~@6 c#6 ~", // A#maj7 Fmaj7 Amaj7 Gmaj7
  H: "f5@3 ~@13", I: "~@8 g6@3 ~@4 e6, ~@5 f#6@2 f#6@3 ~@3 e6@2 ~, ~@3 a6 ~@3 g6", J: "f6@3 ~@13",
  K: "~@4 a7 ~ g7 f7 e7 [d7,d#7] [b6,c7,c#7] [a6,a#6] g#6 f6 [c#6,d6] [b5,c6], ~@5 g#7@2 f#7@6 d#6@3, ~@6 f#6 ~", // D#maj7 A#maj7 Dmaj7 Cmaj7
  L: "a#5@3 ~@13", M: "~@5 [b5,c6,e6] [a6,b6] g#6 [a6,e7] ~@7",
  N: "~@5 [d5,g5] [a5,b5] d6 d7@8, ~@7 [g6,a6]@2 ~@7, ~@8 b6 ~@7", // G5 Asus2 Gsus2
  O: "[~@4 e7 ~ c#7 c7 ~@2 f#6 ~ d6 ~ g#5 ~ e5@4 ~@2 a5 [b5,c#6] a6@4 ~@4, ~@5 [d7,d#7]@2 b6@2 [g#6,a6]@2 [d#6,e6]@2 [a5,b5]@2 [f5,f#5]@2 ~@15, ~@8 a#6@2 [f6,g6]@2 c6@2 g5@2 ~@7 e6@2 ~@7]/2", // Bsus2 D#maj7 Amaj7 Emaj7 Asus2 F#maj7 Fsus2
})).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: "~@4 [g4,b4,d5] ~@7 [g4,b4,e5] ~@3", B: "~@4 [g4,b4,f#5] ~@7 [g4,b4,e5] ~@3",
  C: "~@4 [a4,c5,e5] ~@7 [a4,c5,d#5] ~@3", D: "~@4 [b4,d#5,f#5] ~@7 [a4,d#5,f#5] ~@3",
  E: "~@4 [g4,b4,e5] ~@7 [g4,b4,e5] ~@3", F: "~@4 [a4,c5,f5] ~@7 [g4,d5,f5] ~@3",
  G: "~@4 [a4,d5,f5] ~@7 [a4,d5,f5] ~@3", H: "~@4 [g#4,b4,e5] ~@7 [g#4,c5,e5] ~@3",
  I: "~@4 [a4,c5,e5] ~@7 [g4,c5,e5] ~@3", J: "~@4 [g4,c5,d#5] ~@7 [g4,c5,d#5] ~@3",
  K: "~@4 [g4,b4,d5] ~@7 [g4,b4,d5] ~@3", L: "~@4 [g#4,d5,f5] ~@7 [a4,b4,d5] ~@3",
  M: "~@4 [a4,c5,e5] ~@7 [a4,c5,e5] ~@3", N: "~@4 [g4,c#5,e5] ~@7 [g4,c#5,e5] ~@3",
  O: "~@4 [f#4,a4,d5] ~@7 [f#4,a4,d5] ~@3", P: "~@4 [f#4,a4,c5] ~@7 [f#4,a4,b4] ~@3",
  Q: "~@4 [a4,c5,e5] ~@7 [f#4,a4,d#5] ~@3", R: "~@4 [a4,d5,f5] ~@7 [d5,f5,a5] ~@3",
  S: "~@4 [a4,d5,f5] ~@7 [a4,c5,f5] ~@3", T: "~@4 [b4,c5,e5] ~@7 [a4,c5,e5] ~@3",
  U: "~@4 [g4,c5,d#5] ~@7 [g4,b4,d#5] ~@3", V: "~@4 [g4,b4,d5] ~@7 [f#4,a#4,d5] ~@3",
  W: "~@4 [a4,c5,d#5] ~@7 [g#4,c5,e5] ~@3", X: "~@4 [g4,a4,c5] ~@7 [f#4,a4,c5] ~@3",
  Y: "[~@4 [g4,b4,d5] ~@9 d5@5 ~ [g4,b4,f#5] ~@5 f#5@6, ~@12 g4@3 ~@9 g4@2 ~@6, ~@13 b4@3 ~@9 [b4,d5]@6 ~]/2", // G Gmaj7 Bm
})).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!4 ~@12",
})).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: "~@4 x!12",
})).gain(0.13)

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