Strudelify

Just Remember I Love You

Firefall

KeyF majorTempo124 bpm
0:00/0:00
// Just Remember I Love You — Firefall
// 124 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 79 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(124/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.

// bass · electric bass pick · "Staff-3"
const bass = note(`<
  A@8 B@8 C D E F C G H I@2 F J K@2 F J L@2 M N@8 B@8 C D E F C G H I@2 F J K@2 F J L@2 M O@3 F P M F Q@4
>`.pickRestart({
  A: "[~ f2@8 f2@8 e2@8 e2@8 f2@8 f2@8 e2@8 e2@7]/8",
  B: "[~ f2@8 f2@8 e2@8 f2@4 f2@2 c2@2 f2@4 f2@4 g2@4 g2@4 g2@4 g2@4 f2@3 f2 f2@3]/8", C: "f2 f2@3 f2 f2@3",
  D: "f2 g2@3 g2 g2@3", E: "g2 g2@3 g2 g2@3", F: "g2 f2@3 f2 f2@3", G: "f2 e2@3 e2 e2@3", H: "e2 f2@3 f2 f2@3",
  I: "[f2 f2@3 f2@2 g2@3 c3@3 c3 g2@3]/2", J: "f2 c3@3 c3 g2@3", K: "[g2 f2@3 f2 f2@2 f2@2 c3@3 c3 g2@3]/2",
  L: "[g2 f2@3 f2 f2@2 f2@2 a2@3 a2 a2@3]/2", M: "a2 g2@3 g2 g2@3",
  N: "[g2 f2@3 f2 a2@2 c3@2 f2@3 f2 a2@2 c3@2 g2@3 g2 b2@2 d3@2 g2@3 g2 g2@2 g2@2 f2@8 f2@8 e2@8 e2@7]/8",
  O: "[g2 f2@3 f2 a2@2 c3@2 f2@3 f2 a2@2 c3@2 c3@3 c3 g2@3]/3", P: "f2 a2@3 a2 a2@3",
  Q: "[f2@2 f2@8 c3@3 b2@2 g2@3 c2@32 ~@14]/4",
})).s("gm_electric_bass_pick").gain(0.4).pan(0.8)

// chords · acoustic guitar steel · "Staff-4"
const acoustic_guitar_steel = note(`<
  A B@3 A C@3 D@4 E@8 F@4 G H@4 I@5 A B@3 A C@3 D@4 J@3 K@7 L@2 G M@4 I@5 A N@2 O@8
>`.pickRestart({
  A: "~ e4@3 [f3,a3,c4,e4]@4, f3 ~, ~ [a3,b3]@7 ~@8", // Fmaj7 Asus2
  B: "[~ e4 [f3,a3,c4,e4]@2 [f3,a3,c4,e4]@5 [g3,b3,d4,e4]@3 ~ g3@4 [g3,b3,d4,e4]@3 ~ g3@3, f3@4 ~@21 [b3,d4]@9 ~@7 [b3,d4]@7, ~ [a3,b3]@3 ~@20 e4@10 ~@6 e4@8]/3", // Fmaj7 Em7 Bm Asus2
  C: "[~ e4 [f3,a3,c4,e4]@2 [f3,a3,c4,e4]@5 [g3,b3,d4,e4]@3 [g3,b3,d4,e4]@5 [g3,b3,d4,e4]@3 [g3,b3,d4,e4]@4, f3 ~@11, ~ [a3,b3]@3 ~@44]/3", // Fmaj7 Em7 Asus2
  D: "[~ e4@3 [f3,a3,c4,e4]@5 [f3,a3,b3,e4]@3 [f3,a3,c4,e4]@5 [g3,b3,e4]@3 [g3,b3,e4]@5 [f3,a3,b3,e4]@3 [f3,a3,c4,e4]@4, f3 ~@7, ~ [a3,b3]@7 ~@56]/4", // Fmaj7 Em Fmaj7 Asus2
  E: "[~ e4@3 [f3,a3,c4,e4]@5 [g3,b3,d4,e4]@3 [g3,b3,d4,e4]@5 [g3,b3,d4,e4]@3 [g3,b3,d4,e4]@5 [f3,a3,b3,e4]@3 [f3,a3,c4,e4]@5 [f3,a3,b3,e4] [f3,a3,c4,e4]@2 [f3,a3,c4,e4]@5 [g3,b3,d4,e4]@3 [g3,b3,d4,e4]@5 [g3,b3,d4,e4]@3 [g3,b3,d4,e4]@5 [f3,a3,b3,e4]@3 [f3,a3,c4,e4]@4, f3 ~@15, ~ [a3,b3]@7 ~@120]/8", // Fmaj7 Em7 Fmaj7 Em7 Fmaj7 Asus2
  F: "[~ [f3,a3,b3,e4]@3 [f3,a3,c4,e4]@5 [g3,b3,e4]@3 [g3,b3,e4]@5 [f3,a3,b3,e4]@3 [f3,a3,c4,e4]@5 [f3,a3,c4,e4]@3 [f3,a3,c4,e4]@2 [b3,d4,g4]@2]/4", // Fmaj7 Em Fmaj7 G
  G: "~ c5@4 [d4,g4,b4,d5]@3, c4@5 ~@3, ~ [e4,a4]@9 ~@6", // G A5
  H: "[[e4,a4,d5]@4 [e4,a4,c5]@5 [c4,e4,a4,c5]@3 ~ d5@4 [c4,f4,a4,c5]@3 [c4,f4,a4,c5]@2 ~ c5@2 [c4,e4,a4,c5]@4 [d4,g4,b4,d5]@3, ~@12 d4@5 ~@5 c4@3 ~@7, ~@25 [g4,b4]@9 ~@11 [f4,a4]@5 ~@14]/4", // Dsus2 Am F Am G F
  I: "[[e4,a4,d5]@4 [d4,e4,a4]@5 [c4,e4,a4,c5]@3 ~ d5@4 [c4,f4,a4,c5]@3 [c4,f4,a4,c5]@2 ~ c5@2 [c4,e4,a4]@3 [c4,e4,a4]@5 [b3,d4,a4]@3 [b3,d4,a4]@4, ~@12 d4@5 ~@5 c4@3 ~@15, ~@25 [g4,b4]@9 ~@11 [f4,a4]@5 ~@30]/5", // Dsus2 Am F Am Bm7 G F
  J: "[~ e4@3 [f3,a3,c4,e4]@5 [g3,b3,d4,e4]@3 [g3,b3,d4,e4]@5 [g3,b3,d4,e4]@3 ~ g3 ~@2, f3@8 ~@33 [b3,d4]@3 ~@4, ~ [a3,b3]@7 ~@32 e4@4 ~@4]/3", // Fmaj7 Em7 Bm Asus2
  K: "[~ [f3,a3,b3,e4]@3 [f3,a3,c4,e4]@5 [f3,a3,b3,e4] [f3,a3,c4,e4]@2 [f3,a3,c4,e4]@5 [g3,b3,d4,e4]@3 [g3,b3,d4,e4]@5 [g3,b3,d4,e4]@3 [g3,b3,d4,e4]@5 [f3,a3,b3,e4]@3 [f3,a3,c4,e4]@5 [f3,a3,b3,e4]@3 [f3,a3,c4,e4]@5 [g3,b3,e4]@3 [g3,b3,e4]@4]/7", // Fmaj7 Em7 Fmaj7 Em
  L: "[~ [f3,a3,b3,e4]@3 [f3,a3,c4,e4]@5 [f3,a3,c4,e4]@3 [f3,a3,c4,e4]@2 [b3,d4,g4]@2]/2", // Fmaj7 G
  M: "[[e4,a4,d5]@4 [d4,e4,a4]@5 [c4,e4,a4,c5]@3 ~ d5@4 [c4,f4,a4,c5]@3 [c4,f4,a4,c5]@2 ~ c5@2 [c4,e4,a4,c5]@4 [d4,g4,b4,d5]@3, ~@12 d4@5 ~@5 c4@3 ~@7, ~@25 [g4,b4]@9 ~@11 [f4,a4]@5 ~@14]/4", // Dsus2 Am F Am G F
  N: "[~ e4 [f3,a3,c4,e4]@2 [f3,a3,c4,e4]@5 [c4,e4,a4,c5]@4 [d4,g4,b4,d5]@3, f3 ~@7, ~ [a3,b3]@3 ~@28]/2", // Fmaj7 Am G Asus2
  O: "[[e4,a4,d5]@8 [d4,e4,a4]@10 [a4,c5]@6 [a4,c5]@10 [g4,b4,d5]@16 [e4,a4,c5]@16 [e4,a4,c5]@8 [c4,c5]@3 [b3,b4]@2 [g3,g4]@3 [g3,b3,e4]@32 ~@14]/8", // Dsus2 Am G Am C B G Em
})).s("gm_acoustic_guitar_steel").gain(0.4).pan(0.2)

// chords · string ensemble 1 · "Staff-6"
const string_ensemble_1 = note("<~@15 A@7 B@8 C@8 A@7 D@8 E@7 F@8 G@8 H@2 ~>".pickRestart({
  A: "[~ [c4,f4]@16 [d4,g4]@16 [c4,f4]@16 [b3,e4]@7]/7", // F5 G5 F5 E5
  B: "[~ [c4,f4]@13 [d4,g4]@3 [c4,e4,g4]@4 [b3,d4,g4]@4 [c4,e4]@8 [c4,e4,g4]@4 [b3,d4,g4]@4 f3@4 f4@4 [c4,e4,g4]@4 [b3,d4,g4]@4 [c4,e4]@7, ~@41 [a3,c4]@8 ~@15]/8", // F5 G5 C G C G C G …
  C: "[~ [c4,e4,g4]@4 [b3,d4,g4]@4 f3@4 f4@4 [a3,c4]@8 [g3,b3]@8 [c4,f4]@16 [d4,g4]@11 ~@4, ~@9 [a3,c4]@8 ~@47]/8", // C G Am G F5 G5 Am
  D: "[~ [c4,f4]@16 [d4,g4]@16 [c4,f4]@16 [d4,g4]@15]/8", // F5 G5 F5 G5
  E: "[~ [c4,f4]@16 [b3,e4]@8 [c4,f4]@13 [d4,g4]@3 [c4,e4,g4]@4 [b3,d4,g4]@4 [c4,e4]@7]/7", // F5 E5 F5 G5 C G C
  F: "[~ [c4,e4,g4]@4 [b3,d4,g4]@4 f3@4 f4@4 [c4,e4,g4]@4 [b3,d4,g4]@4 [c4,e4]@8 [c4,e4,g4]@4 [b3,d4,g4]@4 f3@4 f4@4 [a3,c4]@8 [g3,b3]@7, ~@9 [a3,c4]@8 ~@24 [a3,c4]@8 ~@15]/8", // C G C G C G Am G …
  G: "[~@2 [c4,f4]@32 [c4,e4,g4]@8 [b3,d4,g4]@8 [c4,e4]@16 [a3,e4]@16 [e3,g3,c4]@16 [a3,c4]@24 a4@3 g4@2 e4]/8", // F5 C G C A5 C Am
  H: "[~ a3@8 ~@7]/2",
})).s("gm_string_ensemble_1").gain(0.4).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@14 A B C@7 D B C@2 E B C@2 E B C@4 F C@10 G B C@7 D B C@2 E B C@2 E B C@2 H B C@4 I J ~@2
>`.pickRestart({
  A: "~@10 x!3 ~@3", B: "x!2 ~ x ~ x ~ x", C: "~ x ~ x ~ x ~ x", D: "~ x ~ x!2 ~ x!2", E: "~ x ~ x ~ x!2 ~",
  F: "~ x ~@5 x", G: "~@2 x ~@3 x ~@3 x!3 ~@3", H: "~@2 x ~@3 x ~@3 x!3 ~ x ~", I: "~@2 x ~@7 x ~@2 x ~ x",
  J: "~ x ~@6",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct(`<
  ~@14 A B C@7 D B C@2 E B C@2 F B C@4 G C@10 H B C@7 D B C@2 E B C@2 F B C@2 I B C@4 J K ~@2
>`.pickRestart({
  A: "~@10 x!3 ~@3", B: "x ~@2 x ~@3 x", C: "~@3 x ~@3 x", D: "~@3 x!2 ~ x!2", E: "~@6 x ~@5 x ~ x!2",
  F: "~@3 x ~@2 x!2", G: "~ x ~@5 x", H: "~@6 x ~@3 x!3 ~@3", I: "~@6 x ~@3 x!3 ~ x ~", J: "~@10 x ~@2 x ~ x",
  K: "~ x ~@6",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@15 A@9 B@12 A C A@20 B@17 D C ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@3 x ~ x!3 ~@3 x ~", C: "~ x ~@6", D: "~@10 x ~@2 x ~@2",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@25 x!12 ~@22 x!16 [x ~@14 x] ~@3>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@15 A ~@8 A ~@3 A ~@8 A@2 ~@10 A ~@8 A ~@11 A ~@4 A@2 ~@2>".pickRestart({
  A: "~ x ~@6",
})).gain(0.4)

stack(bass, acoustic_guitar_steel, string_ensemble_1, kick, snare, hihat, open_hat, crash)

More by Firefall