Strudelify

Don't Tell Me You Love Me

Night Ranger

KeyF♯ minorTempo167 bpm
0:00/0:00
// Don't Tell Me You Love Me — Night Ranger
// 167 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 193 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(167/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 · distortion guitar · "Guiter1"
const distortion_guitar = note(`<
  ~@2 A@15 ~@36 A@4 ~@36 B@2 C@2 D E F G H I J K L M N@2 O@2 P@2 Q@2 R@2 P@2 S@2 T@2 U V ~@24 W X Y Z AA Y AA AB ~@8 W
  AC D AD AC@2 AE AB AF AG AH AI AJ AK AJ AL AM AN AO AP AQ AR AS@2 AT@2 AU AV
>`.pickRestart({
  A: "b3 e4 d#4 b3 a3 e4 d#4 a3", B: "[c#4 b3 a3@2 c#4@16 c#4 b3 a3@2 c#4 b3 a3@2 c#4 b3 a3@2]/2",
  C: "[d4@24 a3@2 b3@2 c#4@2 b3 a3]/2", D: "b3", E: "a3@2 a3@2 a3@2 b3!2",
  F: "c#4@2 b3 a3 b3 a3 g#3@2 a3 g#3 f#3@2 g#3@2 f#3@2", G: "g#3 f#3 f3@2 f#3 e3 f#3 e3 c#3@2 b2@2 b3@2 b3@2",
  H: "d4@2 e4@2 f#4@2 d4@2 e4@2 f#4@2 a4 f#4 a4 f#4", I: "e4@2 f#4@2 e4 f#4 a4@2 b4@2 a4@2 c#5!2 b4 a4",
  J: "c#5@2 b4!2 d5@2 c#5 c5 d#5@2 c#5 e5!2 d#5 e5@2", K: "f#5 e5!2 f#5 g#5 f#5 ~ g#5 a5 g#5 a5 b5 b5@4",
  L: "b5@8 a5@3 g#5@3 a5@2", M: "b5@3 a5@3 g#5@2 a5@4 ~@4", N: "d6/2", O: "[f#2,c#3]/2", P: "[d3,a3]/2", Q: "[e3,b3]/2",
  R: "[c#3,g#3]/2", S: "[~@8 e4@3 b3@5, [a2,e3]]/2", T: "[b2,f#3]/2", U: "[g2,d3,g3]!4 ~@4",
  V: "~ e2 f#2 g2 a2 e2 f#2 g2", W: "f#3", X: "d4", Y: "e4", Z: "f4", AA: "f#4", AB: "g4", AC: "a3", AD: "c#4",
  AE: "d4@4 f#4 e4 f#4 e4 d4@4 f#4 e4 f#4 e4", AF: "a4@3 a4@3 a4!2", AG: "d4!8", AH: "g#4!8", AI: "f4!8", AJ: "f#4!8",
  AK: "c#4!8", AL: "a5@3 b5@3 c#6@2", AM: "a5", AN: "a5 g#5 f#5 e5 d5@12", AO: "b5 a5 g#5 f#5 e5@12",
  AP: "c#6 b5 a5 b5 c#6@12", AQ: "d6@6 c#6@6 b5 c#6 ~ b5", AR: "c#6@6 b5@6 a5 b5 ~ a5",
  AS: "[b5@6 a5@6 f#5 a5 ~ f#5@7 g#5@6 a5@4]/2", AT: "[f#5@3 ~ f#5@2 f#5@3 ~ f#5@2 f#5@3 ~]/2",
  AU: "f#5@2 f#5@3 ~ f#5@2", AV: "f#5 ~@3",
})).s("gm_distortion_guitar").gain(0.8)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@6 A B C D@3 E D@3 F G@2 H@2 D@3 I G@2 H@2 D@4 J K L M N O P Q R H S T D U V W X Y S Z D@3 AA G@2 H@2 D@3 I G@2 H@2
  D@4 J K L M N O P Q R H S T D U V W X Y S Z D@2 U@2 V@2 W@2 U@2 H@2 S@2 T@2 D@2 U@2 V AB W AC U AD H AE S@2 AF AG AH@3
  ~@17 H@4 D U V W U H S T D U V W U H S T D U V W U H S Z D U V W U H S AI D U V W U H S AJ A B C AK
>`.pickRestart({
  A: "f#1 ~ f#1!2", B: "~ f#1!2 ~", C: "f#1!2 ~ f#1", D: "f#1!8", E: "f#1!4 e2 c#2 b1 a1",
  F: "f#1 c#2 e2 f#2 a2 f#2 e2 c#2", G: "a1/2", H: "a1!8", I: "f#1!4 c#2 b1 a1!2", J: "d2@3 e2", K: "d2 c#2", L: "b1",
  M: "d2 a2 d3 c#3 b2 a2 g#2 e2", N: "f#1", O: "d2", P: "e1", Q: "c#2", R: "d2!3 c#2 d2!2 c#2 b1", S: "b1!8", T: "g1!8",
  U: "d2!8", V: "e2!8", W: "c#2!8", X: "d2!6 c#2 b1", Y: "a1!6 f#1 a1", Z: "g1 e1 f#1 g1 a1 g1 f#1 e1", AA: "f#1!7 g#1",
  AB: "e2!7 d2", AC: "c#2!4 e2@2 f#2@2", AD: "d2!6 f#2@2", AE: "a1!6 c#2@2", AF: "g1!4 ~@4",
  AG: "~ e1 f#1 g1 a1 e1 f#1 g1", AH: "f#1/3", AI: "g1@3 g1@3 g1@2", AJ: "g2@3 d2@3 g1@2", AK: "f#1 ~@3",
})).s("gm_electric_bass_pick").gain(0.64)

// chords · church organ · "Keybord"
const church_organ = note(`<
  ~@18 A B@2 C ~ D ~@2 A B@2 C ~ D ~ E F G H I J K L J M G N I J O P J M G N Q@4 ~ A B@2 C ~ D ~@2 A B@2 C ~ D ~ E F G H
  I J K L J M G N I J O P J M G N R@2 S@2 K T U P S@2 V@2 W G X Y Z AA AB AC O AD AE AF S@2 AG@2 AH G AI ~ B@24 I J O P
  J AJ AK AL I J O AM J AN AK AL I J O AM J AN AK AL I J O AM J AJ AK AO I J O AM J AJ AK AO ~@4
>`.pickRestart({
  A: "~@3 [b3,d#4,f#4]", B: "[b3,d#4,f#4]@3 [a3,c#4,e4]@3 [b3,d#4,f#4]@2", C: "[f#3,b3,d#4] [f#3,a#3,c#4] ~@2",
  D: "[f#3,a#3,c#4]!2 ~@6", E: "[d4,f#4,a4]@3 [e4,g#4,b4]", F: "[d4,f#4,a4] [c#4,e4,g#4]", G: "[b3,d4,f#4]",
  H: "[d4,f#4,a4] [b3,e4,g#4]", I: "[c#4,f#4,a4]", J: "[d4,f#4,a4]", K: "[b3,e4,g#4]", L: "[c#4,e4,g#4]",
  M: "[a3,c#4,e4]", N: "[b3,d4,g4]", O: "[b3,e4,g#4]@3 [b3,e4,a4]@3 [b3,e4,g#4]@2", P: "[c#4,f4,g#4]",
  Q: "[f#3,c#4] ~@2 [f#3,c#4]", R: "[c#4,f#4,a4]/2", S: "[d4,f#4,a4]/2", T: "[b3,e4,a4]@3 [b3,e4,g#4]@3 [b3,e4,f#4]@2",
  U: "[c#4,f4]!4", V: "[a3,c#4,e4]/2", W: "[b3,d4]@3 [b3,e4]", X: "[a3,d4]@3 [b3,d4,g4]", Y: "[g4,b4,d5]",
  Z: "[a3,c#4,f#4]@2 [a3,c#4,e4] [a3,c#4,f#4]", AA: "[a3,c#4,f#4]", AB: "[a3,d4,f#4]@2 [a3,c#4,e4] [a3,d4,f#4]",
  AC: "[a3,d4,f#4]", AD: "[b3,e4,g#4] [b3,e4,a4] [b3,e4,g#4]@2", AE: "[g#3,c#4,f4] [g#3,d#4,f#4]",
  AF: "[c#4,f4,g#4] [g#3,c#4,e4] [b3,d#4,f#4] [b3,e4,g#4]", AG: "[c#4,e4,a4]/2", AH: "[b3,d4,f#4]@3 [b3,e4,g#4]",
  AI: "[b3,d4,g4]!4 ~@4", AJ: "[c#4,e4,a4]", AK: "[d4,f#4,b4]", AL: "[d4,g4,b4]",
  AM: "[g#3,c#4,f4]@3 [g#3,c#4,f#4]@3 [c#4,e4,g#4]@2", AN: "[d4,e4,a4]", AO: "[d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@2",
})).s("gm_church_organ").gain(0.48)

// bass · lead 8 bass lead · "BassSynth"
const bass_2 = note("<~@129 A@8 B@4 C@8 ~@44>".pickRestart({
  A: "f#1/8", B: "b1/4", C: "a1/8",
})).s("gm_lead_8_bass_lead").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  ~@6 A B C D@3 E D@3 F D@15 F E@3 G H@3 I D@3 J D@7 J D@3 E D@15 F E@3 G H@3 I D@3 J D@7 J D@14 E K D@7 J D@6 ~ L M ~@3
  M ~@15 N@3 ~ F E@6 O D E@6 P D E@6 J E@7 Q E@7 Q M ~@3
>`.pickRestart({
  A: "x ~ x!2", B: "~ x!2 ~", C: "x!2 ~ x", D: "x ~@3 x!2 ~@2", E: "x ~@3 x!2 ~ x", F: "x ~@3 x ~@2 x",
  G: "x ~@2 x ~ x ~ x", H: "x ~@6 x", I: "x ~@4 x ~ x", J: "~ x ~ x ~ x ~ x", K: "~ x ~ x ~@4", L: "~@5 x ~ x", M: "x",
  N: "x!4", O: "x ~@2 x ~ x ~@2", P: "x!2 ~ x ~ x ~ x", Q: "~ x!2 ~ x!2 ~ x",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct(`<
  ~@6 A B C D@7 E F@4 D@4 F@4 D@3 G D@3 H I@3 J D@3 K D@7 K D@4 F@4 D@4 F@4 D@3 G D@3 H I@3 J D@3 K D@7 K D@15 K D@7 L
  D@6 ~@24 M N D@7 O D@7 O D@7 P D@7 Q D@7 Q ~@4
>`.pickRestart({
  A: "x ~ x!2", B: "~ x!2 ~", C: "x!2 ~ x", D: "~ x ~ x", E: "~@4 x ~@3 x ~@2 x!2 ~@3", F: "~@3 x",
  G: "~@4 x ~@6 x!2 ~@3", H: "~ x!2 ~ x ~@3", I: "~ x", J: "~@2 x!2", K: "x!2 ~@2", L: "x!4", M: "~@5 x!3",
  N: "x!3 ~@5", O: "~ x!3", P: "x!2", Q: "x ~@2 x ~@2 x ~",
})).gain(0.72)

// drums · clap
const clap = s("cp").struct("<[x!2] [x!3 ~] ~@191>").gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@128 [~@14 x!2] ~@60 [~@2 x!2] [~ x!2 ~] [x!2 ~ x] x>").gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~@137 [~ x ~@14] ~@55>").gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@44 A ~@7 A ~@31 A ~@7 A ~@31 B ~@3 C ~@19 A ~@44>".pickRestart({
  A: "~@3 x", B: "~ x!3 ~@4", C: "~@12 x!2 ~@2",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@21 A B@3 ~@4 A B@2 C A B@2 D ~@24 A B@3 ~@4 A B@2 C A B@2 D ~@60 D ~@55
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x!3 ~", D: "x",
})).gain(0.72)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@17 A@4 ~@4 A@4 ~@7 B ~@7 C ~@7 C ~@4 A@4 ~@4 A@4 ~@7 B ~@7 C ~@7 C ~@15 D ~@14 E F ~@3 G ~@18 H I ~@23 J ~@20
>`.pickRestart({
  A: "~ x ~@2", B: "~@3 x", C: "~ x", D: "~@4 x!4", E: "x!4 ~@4", F: "~@2 x!2", G: "x ~@2 x ~@2 x!3 ~@7", H: "~@5 x!3",
  I: "x!6 ~@2", J: "~ x ~ x",
})).gain(0.72)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A@7 ~ A@7 ~ A@5 ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A@7 ~ A@7 ~ A ~@13 A ~ A ~@7
  A ~@3 A ~@3 A ~ A ~ A ~@19 A ~@7 A ~@6 A@2 ~@7 A ~@6 B A ~@6 B A ~@3
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@2 x ~",
})).gain(0.72)

// drums · ride
const ride = s("rd").struct(`<
  ~@9 A B@3 A B@2 C ~@20 D@3 E A@3 F A@7 F A@4 ~@20 D@3 E A@3 F A@7 F A B@13 A ~ A B@6 G A B@3 H B ~@26 D G@6 C A B@6 I
  A B@6 J A B@6 ~ A B@6 ~@5
>`.pickRestart({
  A: "~@2 x!6", B: "x!8", C: "x!3 ~", D: "~ x!3", E: "~ x ~@2", F: "x!2 ~@2", G: "x!4", H: "~ x!7", I: "~ x!2 ~",
  J: "x",
})).gain(0.64)

stack(
  distortion_guitar, bass, church_organ, bass_2, kick, snare, clap, low_tom, hihat, mid_tom, open_hat, high_tom, crash,
  ride
)

More by Night Ranger