Strudelify

Falling in Love With You

Chic

KeyA majorTempo120 bpm
0:00/0:00
// Falling in Love With You — Chic
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 synth bass 1 (copy of ch 2 electric bass finger)
// note: Full arrangement: all 71 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · piano
const piano = note(`<
  ~@13 A@2 B C D E F G A@2 B C D E F G H@3 I J A@2 B C D E F G H@3 I J A@2 B C D E F G D E F G D E F G D E F G D E F K
>`.pickRestart({
  A: "~@2 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~", // D A
  B: "~@2 [d3,g3,b3] ~@3 [d3,g3,b3] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~", // G D
  C: "~@2 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~", // A
  D: "~@2 [d3,g3,b3] ~@3 [d3,g3,b3] ~@3 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~", // G A
  E: "~@2 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [a3,c#4,e4] ~@3 [a3,c#4,e4] ~", // D A
  F: "~@2 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,c#4,e4] ~@3 [a3,c#4,e4] ~", // D A
  G: "~@2 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~", // D
  H: "~@2 [f#3,a3,c#4] ~@3 [f#3,a3,c#4] ~@3 [f#3,b3,d#4] ~@3 [f#3,b3,d#4] ~", // F#m B
  I: "~@2 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3 [g3,b3,d4] ~", // G
  J: "~@2 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3 [a3,c#4,e4] ~@3 [a3,c#4,e4] ~", // G A
  K: "~@2 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@5", // D
})).s("gm_piano").gain(0.25).pan(0.3)

// chords · synth brass 2 · D A G D A G A D …
const synth_brass_2 = note(`<
  [[f#3,a3,d4]@7 ~ [c#3,e3,a3]@7 ~]!2
  [[d3,g3,b3]@7 ~ [f#3,a3,d4]@7 ~]
  [[a3,c#4,e4]@7 ~ [c#3,e3,a3]@7 ~]
  [[d3,g3,b3] [e3,a3,c#4]]
  [[f#3,a3,d4] [g3,b3,d4]]
  [[d3,f#3,a3,d4]@7 ~ [c#3,e3,a3,c#4]@7 ~]
  [[f#3,a3,d4]]
  ~@63
>`).s("gm_synth_brass_2").gain(0.23).pan(0.4)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@21 A@2 B C D E F G H I J K L A@2 B C D E F G H I J K L A@2 B C D E M ~ D E M G D E M G D E M G D E M N
>`.pickRestart({
  A: "[f#5,a5,d6] [c#5,e5,a5]", B: "[d5,g5,b5] [f#5,a5,d6]", C: "[e5,a5,c#6] [c#5,e5,a5]", D: "[d5,g5,b5] [e5,a5,c#6]",
  E: "[d5,f#5,a5] [c#5,e5,a5]", F: "[f#5,a5,d6]@8 [e5,a5,c#6]@7 ~", G: "[d5,f#5,a5]", H: "[f#4,a4,c#5] [f#4,b4,d#5]",
  I: "[f#4,a4,c#5]@3 ~ [f#4,g#4,c#5]@4 [f#4,b4,d#5]@4 [f#4,b4,e5]@3 ~", J: "[f#4,a4,c#5]@8 [f#4,b4,d#5]@7 ~",
  K: "[g4,b4,d5] [g4,b4,e5]", L: "[g4,b4,e5]@8 [a4,c#5,f#5]@7 ~", M: "[d5,f#5,a5]@8 [e5,a5,c#6]@7 ~",
  N: "[d5,f#5,a5]@11 ~@5", // D
})).s("gm_string_ensemble_1").gain(0.12).pan(0.6)

// other · trombone
const trombone = note("<~@11 A B ~@16 C D C A B ~@8 C D C A B ~@24>".pickRestart({
  A: "d4 ~ d4@2 e4 ~ e4@9 ~", B: "d4@8 e4@7 ~", C: "~@10 f#4 g#4 a4 ~@3", D: "~@10 f#4 g#4 a4 ~ f#4 ~",
})).s("gm_trombone").gain(0.37).pan(0.6)

// other · brass section
const brass_section = note("<~@11 A B ~@16 C D C A B ~@8 C D C A B ~@9 E F G ~ E F G ~ E F G ~ E F H>".pickRestart({
  A: "a3 ~ a3@6 b3 ~ b3@6", B: "b3@4 a3@3 ~", C: "~@10 [d#4,f#4] [e4,g#4] [f#4,a4] ~@3",
  D: "~@10 [d#4,f#4] [e4,g#4] [f#4,a4] ~ f#4 ~", E: "~ a4!2 ~@2 a4!2 ~@2 a4!2 ~@2 a4!2 ~",
  F: "~ a4 d5!3 ~ d5 ~ d5 a4!2 ~ a4@2 ~@2", G: "~ d5!4 ~ d5 ~ d5 a4!2 ~@5", H: "~ d5!4 ~ d5 ~ d5 a4 d5 ~@5",
})).s("gm_brass_section").gain(0.32).pan(0.3)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@8 A B C D E ~@21 F@2 G H I J K L ~@5 F@2 G H I J K L I J K L I J K L I J K L I J K M
>`.pickRestart({
  A: "[f#3,a3,c#4] [f#3,b3,d#4]", B: "[f#3,a3,c#4]@3 ~ [f#3,g#3,c#4]@4 [f#3,b3,d#4]@4 [f#3,b3,e4]@3 ~",
  C: "[f#3,a3,c#4]@8 [f#3,b3,d#4]@7 ~", D: "[g3,b3,d4] [g3,b3,e4]", E: "[g3,b3,e4]@8 [a3,c#4,f#4]@7 ~",
  F: "[f#3,a3,d4] [c#3,e3,a3]", G: "[d3,g3,b3] [f#3,a3,d4]", H: "[e3,a3,c#4] [c#3,e3,a3]", I: "[d3,g3,b3] [e3,a3,c#4]",
  J: "[d3,f#3,a3] [c#3,e3,a3]", K: "[f#3,a3,d4]@8 [e3,a3,c#4]@7 ~", L: "[d3,f#3,a3]", M: "[d3,f#3,a3]@11 ~@5",
})).s("gm_synth_strings_1").gain(0.11)

// chords · synth brass 1
const synth_brass_1 = note("<~@8 A B C D E ~@16 A B C D E ~@8 A B C D E ~@24>".pickRestart({
  A: "[f#4,a4,c#5] [f#4,b4,d#5]", B: "[f#4,a4,c#5]@3 ~ [f#4,g#4,c#5]@4 [f#4,b4,d#5]@4 [f#4,b4,e5]@3 ~",
  C: "[f#4,a4,c#5]@8 [f#4,b4,d#5]@7 ~", D: "[g4,b4,d5] [g4,b4,e5]", E: "[g4,b4,e5]@8 [a4,c#5,f#5]@7 ~",
})).s("gm_synth_brass_1").gain(0.17).pan(0.4)

// bass · electric bass finger
const bass = note(`<
  ~@13 A@2 B C D E A@4 B C D E A@2 F G F H I A@2 B C D E A@2 F G F H I A@2 B C D E A@2 D E A@2 D E A@2 D E A@2 D E A J
>`.pickRestart({
  A: "~ a1 d2!3 ~ d2 ~ d2 a1 a1@6", B: "~ a1 g2!3 ~ g2 ~ f#2 a1 f#2@6", C: "~ a1 e2!3 ~ e2 ~ e2 a1 a1@6",
  D: "~ a1 b1!3 ~ b1 ~ b1 c#2 c#2@6", E: "~ a1 d2!3 ~ d2 ~ d2 a1 e2@6", F: "c#2!2 ~@3 f#2 a2 c#3 b2!2 ~@6",
  G: "c#2!2 ~@3 f#2 a2 c#3 b2@3 ~ b2 ~ b2 ~", H: "g2 a2 a1 ~ a1@3 ~ g2 a2 a1 ~ a1@3 ~", I: "g2@5 f#2 g2@2 g2 a2@3 a1@4",
  J: "~ a1 d2!3 ~ d2 ~ d2 a1 d2 ~@5",
})).s("gm_electric_bass_finger").gain(0.33)

// other · trumpet
const trumpet = note("<~@11 A B ~@16 C D E A B ~@8 C D E A B ~@9 F G H ~ F G H ~ F G H ~ F G I>".pickRestart({
  A: "b4 ~ b4@6 d5 ~ d5@6", B: "[d5,e5]@8 [c#5,a5]@7 ~", C: "~@10 [f#4,d#5] [g#4,e5] [a4,f#5] ~@3",
  D: "~@10 [f#4,d#5] [g#4,e5] [a4,f#5] ~ [f#4,d#5] ~", E: "~@10 f#4 g#4 a4 ~@3",
  F: "~ a4!2 ~@2 a4!2 ~@2 a4!2 ~@2 a4!2 ~", G: "~ a4 d5!3 ~ d5 ~ d5 a4!2 ~ a4@2 ~@2", H: "~ d5!4 ~ d5 ~ d5 a4!2 ~@5",
  I: "~ d5!4 ~ d5 ~ d5 a4 d5 ~@5",
})).s("gm_trumpet").gain(0.34).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@8 [x ~@3 x!2 ~@2]!5 [x!4]!57 [x ~ x ~ x!2 ~@2]>").gain(0.45)

// drums · rim
const rim = s("rim").struct("<~@8 [x ~@6 x ~ x ~@4 x ~]!5 [~@7 x ~ x ~@5 x]!57 [~@7 x ~ x ~@6]>").gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@8 [~@4 x ~@2 x ~ x ~ x!2 ~ x!2]!5 [~ x ~ x!2 ~@4 x ~ x!5]!57 [~ x ~ x!5 ~ x ~@6]>")
  .gain(0.3)

// drums · clap
const clap = s("cp").struct("<~@13 [~ x ~ x]!57 [~ x ~@2]>").gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<~@8 [x!16]!62 [x!11 ~@5]>").gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@8 x ~@4 x ~@56 [~@5 x ~@2]>").gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~@13 [x!16]!57 [x!11 ~@5]>").gain(0.2)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@8 [x!4 ~ x!7 ~ x!3]!62 [x!4 ~ x!6 ~@5]>").gain(1.01)

// drums · shaker
const shaker = s("sh").struct("<~@8 [~@7 x]!5 [~@2 x!2 ~@2 x ~@3 x!2 ~@2 x ~]!57 [~@2 x!2 ~@2 x ~@3 x ~@5]>").gain(0.25)

stack(
  piano, synth_brass_2, string_ensemble_1, trombone, brass_section, synth_strings_1, synth_brass_1, bass, trumpet, kick,
  rim, snare, clap, hihat, crash, tambourine, cabasa, shaker
)

More by Chic