Strudelify

Sister Christian

Night Ranger

KeyC majorTempo180 bpm
0:00/0:00
// Sister Christian — Night Ranger
// 180 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 116 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(180/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 · string ensemble 1
const string_ensemble_1 = note(`<
  ~@13 A B C D A B E F ~ G@2 H A I ~ J A B K F ~ L@2 M@2 N@2 O@2 P@2 Q R S T@2 J S U@2 J V W@3 X@2 ~ A B C D A B E F ~
  G@2 H A I ~ J A B K F ~ L@2 M@2 N@2 O@2 P@2 Q R S T@2 J S U@2 J V W@3 X@2 Y Z AA@2 AB Z AC@2
>`.pickRestart({
  A: "g4!2 ~@2", B: "f4", C: "b4 ~@3", D: "c4 ~", E: "b4", F: "~@2 a4 ~@3 c4@2", G: "[g3 ~@2 a3@2 f3 ~@2]/2", H: "g3 ~",
  I: "f4 ~@2 g4", J: "~@2 g4 ~", K: "b4 ~", L: "[c4 ~@2 a3@2 f3 ~@2]/2", M: "g3/2", N: "[c4@3 d4]/2", O: "c4/2",
  P: "[c4@6 d4 ~]/2", Q: "e5!2 c5@2", R: "~ g4", S: "f5!2", T: "[c5@2 ~ e5@3 g4@2]/2", U: "[d5@2 d5 e5@3 g4@2]/2",
  V: "a4@2 a4 ~", W: "[~@2 a4 f4@9]/3", X: "[f4@3 f4@3 d4@2]/2", Y: "e4", Z: "e4 e4@3", AA: "f4/2", AB: "g4",
  AC: "[f4@3 d4]/2",
})).s("gm_string_ensemble_1").gain(0.41)

// other · flute
const flute = note(`<
  ~@13 A ~ B ~ A ~ C@2 ~ D@2 E A F ~ G A ~ H ~@2 I@2 J@2 K@2 L@2 M@2 N O P Q@2 G P R@2 G S T@3 U@2 ~ A ~ B ~ A ~ C@2 ~
  D@2 E A F ~ G A ~ H ~@2 I@2 J@2 K@2 L@2 M@2 N O P Q@2 G P R@2 G S T@3 U@2 V W X@2 Y W Z@2
>`.pickRestart({
  A: "e4!2 ~@2", B: "g4 e4 d4 b3", C: "[g4@5 ~@3]/2", D: "[~@3 f3@2 ~@3]/2", E: "e3 ~", F: "~@3 d4", G: "~@2 e4 ~",
  H: "g4 ~", I: "[g3 ~@2 f3@2 ~@3]/2", J: "e3/2", K: "[a3@3 b3]/2", L: "g3/2", M: "[a3@6 b3 ~]/2", N: "c5!2 g4@2",
  O: "~ e4", P: "c5!2", Q: "[a4@2 ~ c5@3 e4@2]/2", R: "[f4@2 f4 g4@3 e4@2]/2", S: "f4@2 f4 ~", T: "[~@2 f4 d4@9]/3",
  U: "[d4@3 c4@3 b3@2]/2", V: "c4", W: "c4 c4@3", X: "c4/2", Y: "e4", Z: "[c4@3 b3]/2",
})).s("gm_flute").gain(0.4)

// other · acoustic guitar nylon · "Acoustic Guitar (nylon)"
const acoustic_guitar_nylon = note("<~@112 c4 ~@3>").s("gm_acoustic_guitar_nylon").gain(0.33)

// other · piano · "Bright Acoustic Piano"
const piano = note(`<
  A@2 ~@2 B@2 C@2 ~@5 D E F ~ D G H I@2 ~@3 D E F J D G H I@2 ~@2 K@6 L@2 ~@17 D E F ~ D G H I@2 ~@3 D E F J D G H I@2
  ~@2 K@6 L@2 ~@16 K@4 M@2 N@2
>`.pickRestart({
  A: "[~ g3@7]/2", B: "[~ g3@6 ~]/2", C: "[~@3 d3@5]/2", D: "c3 c3@3", E: "f2", F: "g2", G: "f3", H: "g3",
  I: "[f3@3 ~]/2", J: "c2", K: "c3!4", L: "c3@2 c3@2 c3!2 c3@2", M: "c3/2", N: "[c3@6 g2!2]/2",
})).s("gm_piano").gain(0.51).pan(0.4)

// bass · acoustic bass
const bass = note(`<
  A@2 B@2 C@4 D@2 E@2 F ~@3 G H I J K@2 L@2 G H ~@3 H I J K@2 L@2 F ~@5 M N O@2 P@2 O@2 P Q O@2 P@2 R S T@2 F ~@3 G H I
  J K@2 L@2 G H ~@3 H I J K@2 L@2 F ~@5 M N O@2 P@2 O@2 P Q O@2 P@2 R S T@2 U@4 V@4
>`.pickRestart({
  A: "c3/2", B: "[f2@3 g2]/2", C: "[c3@7 f2@4 g2@5]/4", D: "f2/2", E: "[e2@3 d2@3 g2@2]/2", F: "c2 ~", G: "c2",
  H: "c2 c2@3", I: "f2", J: "g2", K: "[f2@3 f2]/2", L: "[e2@3 d2@2 g2@3]/2", M: "~@2 c2@2 c2!2 c2@2",
  N: "c2@2 c2@2 c2!2 c2@2", O: "c2!2 c3@2", P: "f2!2 f3@2", Q: "a#2!2", R: "a#2@3 a#2", S: "a#2",
  T: "[a#2@3 a2@3 g2@2]/2", U: "c2/4", V: "[c2@7 ~]/4",
})).s("gm_acoustic_bass").gain(0.56)

// chords · piano · "Acoustic Grand Piano"
const piano_2 = note(`<
  A@2 B@2 C@4 D@2 E@2 F G H@2 I J K@4 L@2 M J N O P J Q R@3 S@2 T@2 U@2 V@2 W@2 X Y Z AA@2 AB Z AC@2 AB AD AE@3 AF@2 F G
  H@2 I J K@4 L@2 M J N O P J Q R@3 S@2 T@2 U@2 V@2 W@2 X Y Z AA@2 AB Z AC@2 AB AD AE@3 AF@2 AG@4 AH@4
>`.pickRestart({
  A: "[[c4,e4] [d4,f4] [e4,g4] [e4,c5]@2 [c4,g4]@2 d4, c3, ~ g3@7]/2", // C Dm Em C C5
  B: "[[c4,e4] [d4,f4] [e4,g4] [c4,a4]@3 [g2,b3,g4]@2, f2@3 ~]/2", // C Dm Em F G
  C: "[[c4,e4] [d4,f4] [e4,g4] [e4,c5] [c4,g4] d4 e4 f4 [c4,a4] g4 f4 [b3,g4]@2 d4@2 b3, c3@7 f2@4 [g2,d3]@5, ~ g3@6 ~@9]/4", // C Dm Em C C5 F Em G5
  D: "[[a3,f4] c4 a4 g4 f4 [a3,f4] c4 a3, f2]/2", E: "[[g3,e4] d4 c4 a3 c4 d4 a3 c4, e2@3 d2@3 g2@2]/2",
  F: "[c2,c4]@2 e5!2", G: "[c3,e4,g4,e5] [e4,g4,e5] d5 c5, ~ c3@3",
  H: "[a4@2 e5 ~ [g4,b4] e4 d4 b3, [f2,f4] g2, ~@3 d5@4 ~]/2", I: "[c4,e4]@2 e5!2, c2",
  J: "[c2,c3,e4,g4,e5]@2 [e4,g4,e5]@2 e5 d5 c5@2, ~ [c2,c3]@3", // C Em C
  K: "[a4@4 e5@2 ~@6 c5@2 ~@4 [a4,c5] g4 f4@2 [c4,f4]@2 a3@2 c4@2 b4@2 a4@2, [f2,f3,f4]@4 g4@5 ~@7, ~@3 d5@3 ~@10, ~@2 [g2,g3]@2 [f2,f3]@3 f2, ~@4 b4@3 b4@2 ~@7]/4", // Am F5 F G F
  L: "[[g3,c4] d4 e4 [d2,f3,a3,d4]@2 [f3,a3] c4 d4, e2@3 ~@2 g2@3]/2", M: "[e3,g3,c4]@2 e5!2, c2",
  N: "[f4,a4] e5@2 [d4,g4,d5], f2", O: "a4 b4 g4 d4, g2", P: "e4 e5 [e4,g4,e5] e5, c2", Q: "a4 e5, [f2,f3,f4]",
  R: "[[g4,b4,d5]@4 c5@2 ~@4 [a4,c5] g4 f4@2 [c4,f4]@2 a3@2 c4@2 a4@2 a4 g4, [g2,g3]@2 [f2,f3]@3 f2, ~@3 b4@2 ~@7]/3", // G Am F5 G F
  S: "[[g3,c4,e4] d4 e4 [d2,f3,a3,d4]@2 [f3,a3] c4 d4, e2@3 ~@2 g2@3]/2", T: "[c3!4 c3!4, [e3,g3,c4], c2 ~@3]/2",
  U: "[c3!4 c3!4, [a3,c4,f4]@3 [b3,d4,g4]]/2", V: "[c3!4 c3!4, [g3,c4,e4]]/2",
  W: "[c3@2 [c2,c3]@2 [c2,c3]!2 [c2,c3]@2 [c2,c3]@2 [c2,c3]@2 [c2,c3]!2 [c2,c3,g4]@2, [a3,c4,f4]@6 [b3,d4,g4] ~]/2", // C C5 F G
  X: "[c2,c5,e5,g5]!2 [c3,g4,c5,e5]@2", Y: "c2!2 [c3,e4,g4,c5]@2", Z: "f2!2 [f3,c5,f5,a5]@2, [c5,f5,a#5] ~",
  AA: "[f2!2 f5 ~ c2!2 [c3,e4,g4,c5]@2, [a4,c5,g5] f3 ~@2, ~@3 [c5,e5,g5]@3 ~@2]/2", AB: "c2!2 [e4,g4,c5] c5, ~ c3",
  AC: "[[a#2,f4,d5,f5]@2 [f4,d5,f5] ~ c2!2 [c3,e4,g4,c5]@2, ~ a#2 ~@2, ~@3 [g4,e5,g5]@3 ~@2]/2", // A# Dm C
  AD: "f2!2 [f4,a4,f5] e5, [f4,a4,f5] f3", AE: "[f2!2 [f4,a4,c5] ~ a#2@3 a#2 a#2@4, e5 f3 ~@4, ~ [d4,f4,a#4]@3]/3",
  AF: "[[a#2,d4,f4,a#4]@3 [a2,c4,f4,a4]@3 [g2,b3,d4,g4]@2]/2", // A# F G
  AG: "[c3!4 [c3,c4,e4,c5] c3!3 c3!4 c3!4, c2, [c4,e4,g4]@4 ~ [c4,e4,g4]@3 [c4,f4,a4]@8]/4", // C F
  AH: "[[e4,g4,c5]@4 [c4,e4,c5] [c4,e4,g4]@3 [c3,c4,f4,a4]@6 g2!2, c2@7 ~, c3@4 ~@3 [b3,d4,g4]]/4", // C F G
})).s("gm_piano").gain(0.37).pan(1)

stack(string_ensemble_1, flute, acoustic_guitar_nylon, piano, bass, piano_2)

More by Night Ranger