Strudelify

Never Gonna Fall in Love Again

Eric Carmen

KeyB♭ majorTempo118 bpm
0:00/0:00
// Never Gonna Fall in Love Again — Eric Carmen
// 118 bpm, 4/4, key Bb 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; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(118/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.

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@21 A B C D E B F G A B C D E B ~@20 A B C D E B F G A B C D E B F ~@14 A B C D E B F G A B C D E B F ~@3 A B C D E B
  F G ~@6
>`.pickRestart({
  A: "[bb3,eb4,g4]", B: "[c4,f4,a4]", C: "[d4,f4,a4]", D: "[bb3,d4,g4]", E: "[c4,eb4,g4]", F: "[bb3,d4,f4]",
  G: "[bb3,d4,f4,ab4]", // Bb7
})).s("gm_string_ensemble_1").gain(0.13).pan(0.3)

// chords · string ensemble 1 · "Strings" · soft notes
const string_ensemble_1_soft = note("<~@35 A ~@74 B C D E F C>".pickRestart({
  A: "[bb3,d4,f4]", B: "[bb3,eb4,g4]", C: "[c4,f4,a4]", D: "[d4,f4,a4]", E: "[bb3,d4,g4]", F: "[c4,eb4,g4]",
})).s("gm_string_ensemble_1").gain(0.04).pan(0.3)

// chords · piano · "Piano 1"
const piano = note(`<
  A B@2 C D E F G H I@2 J K E F G H I@2 J L C M N O H P Q L C M N O H P B@2 C D E F G H I@2 J K E F G H I@2 J L C M N O
  H P Q L C M N O H P B L J R N S T U V E H W E L@2 C M N O H P Q L C M N O H P B@2 J L C M N O H P Q L C M N O H X
>`.pickRestart({
  A: "~ c-1 ~@14", B: "[bb3,d4,f4]!4", C: "[bb3,eb4,g4]!4", D: "[c4,eb4,g4]!2 [c4,d4,gb4,a4]!2", E: "[g3,bb3,d4,g4]!4",
  F: "[g3,bb3,d4,f4]!4", G: "[g3,bb3,eb4,g4]!4", H: "[g3,c4,eb4,g4]!4", I: "[c4,d4,gb4,a4]!4", J: "[bb3,d4,g4]!4",
  K: "[a3,c4,eb4,gb4]!2 [a3,c4,d4,gb4]!2", L: "[bb3,d4,f4,ab4]!4", M: "[a3,c4,f4,a4]!4", N: "[a3,d4,f4]!4",
  O: "[bb3,d4,g4]!2 [bb3,d4,f4,g4]!2", P: "[f3,a3,c4,f4]!4", Q: "[f3,bb3,d4,f4]!4", R: "[a3,db4,e4,g4]!4",
  S: "[bb3,d4,g4]!2 [b3,d4,f4,g4]!2", T: "[c4,eb4,g4]!2 [b3,eb4,g4] [bb3,c4,eb4,g4]",
  U: "[bb3,c4,eb4,f4]!2 [a3,c4,f4] [f3,a3,c4,f4]", V: "[a3,d4,f4,a4]!4", W: "[a3,c4,d4,gb4]!4",
  X: "[f3,a3,c4,f4] [f3,a3,f4] [c4,f4] [f3,a3,c4]", // F F5 F
})).s("gm_piano").gain(0.18).pan(0.4)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A B C D E F G H@2 I J K E F G H@2 I L M N O P Q@2 R S T N O P U@2 R A B C D E F V W@2 X A K E F V H@2 X L M N O P Y
  Z R S T N O P Q@2 R AA AB AC AD AE AF AG AH AI AJ Z AK AL AM M N O P Y Z R S AN N O P Y Z R AA AO AP AQ N O P Y Z R AR
  T ~@6
>`.pickRestart({
  A: "bb1@15 ~", B: "~@4 g2@3 ~ g2@2 ~@2 d2@3 f2, ~@3 bb2@2 ~@2 f2@2 ~@2 f2@2 ~@3", C: "eb2", D: "c2@8 d2@7 ~", E: "g1",
  F: "f2@15 ~", G: "eb2@3 d2", H: "[c2@6 ~@2 c2@3 ~ eb2@3 ~ d2@12 ~@4, ~@11 d2@2 ~@2 c2@2 ~@15]/2", I: "c2", J: "bb1",
  K: "a1@4 d2@3 ~", L: "g1@11 ~ f1@4", M: "bb1@7 ~ c2@4 d2@4", N: "eb2@11 ~ bb1@4", O: "f2@11 ~ eb2@4",
  P: "d2@11 ~ a2@4", Q: "[g2@7 ~ g1@4 ~@4 c2@10 ~@2 c2@4, ~@15 d2@2 ~@15]/2", R: "f1@3 ~ g1@2 a1@2",
  S: "bb1@3 ~ f1@2 ~@2", T: "bb1@5 ~@2 bb1 c2@4 d2@3 ~", U: "[g2@7 ~ g1@5 ~@3 c2@10 ~@2 c2@4, ~@15 d2@2 ~@15]/2",
  V: "eb2@11 ~ d2@4", W: "[c2@6 ~@2 c2@3 d2 eb2@3 ~ d2@12 ~@4, ~@15 c2@2 ~@15]/2", X: "c2@15 ~",
  Y: "g2@7 ~ g1@4 ~@3 d2", Z: "c2@5 ~ c2@2", AA: "bb1@10 ~@2 bb1@3 ~, ~@11 f1@2 ~@3", AB: "bb1@11 ~ a1@4",
  AC: "g1@11 ~ bb1@4", AD: "a1@9 ~@3 a1@3 ~", AE: "d2@6 ~@2 a1@4 d2@3 ~", AF: "g1@7 ~ d2@4 b1@3 ~", AG: "c2@11 ~ bb1@4",
  AH: "f1@3 ~ c2@2 bb1 ~", AI: "d2@11 ~ a1@4", AJ: "g1@6 ~@2 g1@4 d2@3 ~", AK: "d2@3 a1", AL: "g1@9 ~@3 g1@4",
  AM: "bb1@7 ~ f1@4 bb1@3 ~", AN: "bb1@5 ~@2 bb1 c2@4 d2@2 ~@2", AO: "f2@5 ~ gb2@2", AP: "g2@5 ~ g2@2",
  AQ: "bb1@3 ~ bb1@3 ~ c2@4 d2@3 ~", AR: "bb1@6 ~@2 f1@7 ~",
})).s("gm_electric_bass_finger").gain(0.34).pan(0.4)

// bass · electric bass finger · "Bass" · soft notes
const bass_soft = note("<~@110 A B C D@2 E>".pickRestart({
  A: "eb2@11 ~ bb1@4", B: "f2@11 ~ eb2@4", C: "d2@11 ~ a2@4", D: "[g2@7 ~ g1@4 ~@4 c2@10 ~@2 c2@4, ~@15 d2@2 ~@15]/2",
  E: "f1@3 ~ g1@2 a1@2",
})).s("gm_electric_bass_finger").gain(0.1).pan(0.4)

// other · piano
const piano_2 = note("<~ A@2 B C ~@30 A@2 B C ~@77>".pickRestart({
  A: "c5!2 bb4!2", B: "d5!2 c5!2", C: "eb5!2 c5 d5",
})).s("gm_piano").gain(0.19).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@13 A@22 ~@12 A@51 B ~@3 A@7 B ~@6>".pickRestart({
  A: "x!2", B: "x",
})).gain(0.28)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@109 [~ x] [x!2]!5 x>").gain(0.09)

// drums · snare
const snare = s("sd").struct("<~@13 [~ x ~ x]!22 ~@12 [~ x ~ x]!51 ~@4 [~ x ~ x]!7 [~ x ~@2] ~@6>").gain(0.23)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@109 [~@3 x] [~ x ~ x]!5 [~ x ~@2]>").gain(0.09)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@12
  [~@3 x!2 ~@2 x ~@3 x!2 ~@2 x]
  ~@33
  [~@3 x!2 ~@2 x ~@3 x!2 ~@2 x]
  ~@54
  [~@3 x!2 ~@2 x ~@3 x!2 ~@2 x]
  ~@14
>`).gain(0.28)

// drums · hihat
const hihat = s("hh").struct("<~@5 [~ x ~ x]!30 ~@4 [~ x ~ x]!59 ~@4 [~ x ~ x]!8 ~@6>").gain(0.33)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@110 [~ x ~ x]!6>").gain(0.09)

stack(
  string_ensemble_1, string_ensemble_1_soft, piano, bass, bass_soft, piano_2, kick, kick_soft, snare, snare_soft,
  low_tom, hihat, hihat_soft
)

More by Eric Carmen