Strudelify

I'll Follow The Sun

Mr. President

KeyF minorTempo139 bpm
0:00/0:00
// I'll Follow The Sun — Mr. President
// 139 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(139/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 · fretless bass · "FRETLESS"
const bass = note(`<
  ~@8 A@2 B C A@2 B ~ A@2 B C A@2 B C A@2 B D A@2 B C A@2 B C A@2 B C A@2 B ~ A@2 B C A@2 B ~ A@2 B C A@2 B D A@2 B C
  A@2 B ~ A@2 B ~ A@2 B C E@2 F G H@2 I J ~ K@2 L M K@2 L ~ N@2 ~
>`.pickRestart({
  A: "f2 f1 c2 eb2 f2 f1 c2 eb2", B: "f2 f1 db2 eb2 f2 f1 db2 eb2", C: "f2 f1 ab1 f1 bb1 f1 c2 eb2",
  D: "f2 f1 ab1 ~ bb1 ~ c2 eb2", E: "[f1@26 g1@5 ab1]/2", F: "bb1", G: "g1", H: "[f1@13 g1@2 ab1]/2", I: "db2",
  J: "eb1@15 ~", K: "g2 g1 d2 f2 g2 g1 d2 f2", L: "g2 g1 eb2 f2 g2 g1 eb2 f2", M: "g2 g1 bb1 g1 c2 g1 d2 f2",
  N: "[g1@31 ~]/2",
})).s("gm_fretless_bass").gain(0.3)

// chords · lead 1 square · "SQUAREWAVE"
const lead_1_square = note(`<
  ~@8 A B C D A B C ~ E@2 F@2 E@2 F@2 E@2 F ~ A B C D A B C D A B C D A B C ~ A B C D A B C ~ E@2 F@2 E@2 F ~ A B C D A
  B C ~ A B C ~ E@2 F D ~@9 G H I J G H I ~@4
>`.pickRestart({
  A: "~@2 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~", // Fm
  B: "~@2 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,f4]@2, ~@14 ab4 ~", // Fm F5
  C: "~@2 [db4,ab4] ~@3 [db4,f4,ab4]@2 ~@2 [f4,ab4]@2 ~@2 [db4,f4] ~, ~@2 f4@2 ~@6 db4 ~@3 ab4@2", // Db5 Db Fm Db
  D: "~@2 [c4,g4]@2 ~@2 [c4,eb4,g4]@2 ~@2 [c4,eb4,g4]@2 ~@2 [c4,eb4,g4] ~, ~@2 eb4 ~@13", // C5 Cm
  E: "c3 ~ c3!3 ~ c3!3 ~ c3!3 ~ c3!2", F: "ab2 ~ ab2!3 ~ ab2!3 ~ ab2!3 ~ ab2!2",
  G: "~@2 [d4,g4,bb4] ~@3 [d4,g4,bb4] ~@3 [d4,g4,bb4] ~@3 [d4,g4,bb4] ~", // Gm
  H: "~@2 [d4,g4,bb4] ~@3 [d4,g4,bb4] ~@3 [d4,g4,bb4] ~@3 [d4,g4]@2, ~@14 bb4 ~", // Gm G5
  I: "~@2 [eb4,bb4] ~@3 [eb4,g4,bb4]@2 ~@2 [g4,bb4]@2 ~@2 [eb4,g4] ~, ~@2 g4@2 ~@6 eb4 ~@3 bb4@2", // Eb5 Eb Gm Eb
  J: "~@2 [d4,a4]@2 ~@2 [d4,f4,a4]@2 ~@2 [d4,f4,a4]@2 ~@2 [d4,f4,a4] ~, ~@2 f4 ~@13", // D5 Dm
})).s("gm_lead_1_square").gain(0.25)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square_2 = note(`<
  A B C D E B C D E B C D E B C D F G H I G@2 H I G@2 H J ~@16 E B C D E B C D F G H I G@2 H J ~@8 E B C D G@2 K D ~@20
>`.pickRestart({
  A: "ab4@2 f4 g4 ab4 ~ f4 g4, ~@14 ab4 ~", B: "ab4!2 f4 g4 ab4!2 f4 g4, ~@6 ab4 ~@9",
  C: "ab4!2 f4 g4 ab4!2 f4 [g4,ab4]", D: "bb4 c5 ab4 [ab4,c5] [g4,bb4] c5 [f4,ab4] c5, ab4 ~@15",
  E: "g4 c5 f4 [g4,c5] ab4 ~ f4 g4, ab4@4 ~@10 ab4 ~", F: "[f2,g4] [f1,c5] [c2,f4] [eb2,c5] f2 f1 c2 eb2",
  G: "f2 f1 c2 eb2 f2 f1 c2 eb2", H: "f2 f1 db2 eb2 f2 f1 db2 eb2", I: "f2 f1 ab1 f1 bb1 f1 c2 eb2",
  J: "f2 f1 ab1 ~ bb1 ~ c2 eb2", K: "~ ab4 f4 g4 ab4!2 f4 [g4,ab4]",
})).s("gm_lead_1_square").gain(0.13)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@36 A B C D A B C D ~@4 E@3 F ~@12 A B C D ~@2 E F ~@4 G@8 ~@5 H I J K L@2 ~
>`.pickRestart({
  A: "f5 ~ f4 ~ g4 ~ f4 ~ ab4 ~ f4 ~ bb4 ~ f4 ~", B: "c5 ~ f4 ~ bb4 ~ f4 ~ ab4 ~ f4 ~ g4 ~ f4 ~",
  C: "bb4 ~ f4 ~ ab4 ~ f4 ~ g4 ~ f4 ~@3 f4 ~", D: "ab4 ~ eb4 ~ g4 ~ eb4 ~ f4 ~ eb4 ~@3 eb4 ~",
  E: "ab4 ~ f4 ~ g4 ~ f4 ~ ab4 ~ f4 ~ g4 ~ f4 ~", F: "g4 ~ f4 ~ ab4 ~ f4 ~ bb4 ~ f4 ~ c5 ~@3", G: "[[f3,f4]@127 ~]/8",
  H: "g5 ~ g4 ~ a4 ~ g4 ~ bb4 ~ g4 ~ c5 ~ g4 ~", I: "d5 ~ g4 ~ c5 ~ g4 ~ bb4 ~ g4 ~ a4 ~ g4 ~",
  J: "c5 ~ g4 ~ bb4 ~ g4 ~ a4 ~ g4 ~@3 g4 ~", K: "bb4 ~ f4 ~ a4 ~ f4 ~ g4 ~ f4 ~@3 f4 ~", L: "[g4@31 ~]/2",
})).s("gm_lead_2_sawtooth").gain(0.48).pan(0.7)

// chords · lead 8 bass lead · "BASS&LEAD"
const lead_8_bass_lead = note("<~@18 A B C ~ A B ~@30 A B ~@33 D E F G ~@3>".pickRestart({
  A: "~@14 eb5!2", B: "[eb5,f5]!3 f5 eb5 f5 eb5!2 [eb5,f5]!4 [eb5,ab5]!2 [g5,ab5]!2", C: "g5!2 ~@14",
  D: "g5 ~ g4 ~ a4 ~ g4 ~ bb4 ~ g4 ~ c5 ~ g4 ~", E: "d5 ~ g4 ~ c5 ~ g4 ~ bb4 ~ g4 ~ a4 ~ g4 ~",
  F: "c5 ~ g4 ~ bb4 ~ g4 ~ a4 ~ g4 ~@3 g4 ~", G: "bb4 ~ f4 ~ a4 ~ f4 ~ g4 ~ f4 ~@3 f4 ~",
})).s("gm_lead_8_bass_lead").gain(0.2)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth_2 = note("<~@8 A@7 ~@13 A@15 ~ A@7 ~@9 A@7 ~ A@3 ~ A@3 ~@10 B@7 ~@4>".pickRestart({
  A: "f3!16", B: "g3!16",
})).s("gm_lead_2_sawtooth").gain(0.3).pan(0.7)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~@40 A B C D ~@22 C D ~@23 E F G@2 ~>".pickRestart({
  A: "[f4,f5] [g4,g5]", B: "[ab4,ab5] [bb4,bb5]", C: "[c5,c6] [bb4,bb5]", D: "[ab4,ab5] [g4,g5]", E: "[d5,d6] [c5,c6]",
  F: "[bb4,bb5] [a4,a5]", G: "[g4@31 ~]/2",
})).s("gm_string_ensemble_2").gain(0.24).pan(0.3)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@30 A B ~@2 A B ~@2 C D ~@2 E D ~@18 A B ~@2 E D ~@19 F G ~@2 H I ~@3>".pickRestart({
  A: "~@7 f4", B: "~@2 f4 ~ f4 ~ g4 ~ f4 ~ eb4 ~ eb4@2 ~@2", C: "~@2 f4 ~ f4 ~ f4 ~ f4 ~ ab4 ~ ab4@2 ~@2",
  D: "f4 ~ f4!3 ~ g4 ~ f4 ~ eb4 ~ eb4@2 ~@2", E: "~@2 f4 ~ f4 ~ f4 ~ f4 ~ ab4 ~ ab4 ~@3", F: "~@7 g4",
  G: "~@2 g4 ~ g4 ~ a4 ~ g4 ~ f4 ~ f4@2 ~@2", H: "~@2 g4 ~ g4 ~ g4 ~ g4 ~ bb4 ~ bb4 ~@3",
  I: "g4 ~ g4!3 ~ a4 ~ g4 ~ f4 ~ f4@2 ~@2",
})).s("gm_overdriven_guitar").gain(0.29)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@3 ~ A@7 B A@11 C A@15 D A@7 ~ A@7 C A@7 D A@3 ~ A@3 E F G F ~ F G A H F A@7 D F ~@2
>`.pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "x ~ x ~@3 x ~ x ~ x!3 ~ x ~", D: "x ~ x!3 ~ x ~ x ~ x ~ x ~@3",
  E: "~@2 x ~@3 x ~ x ~ x!3 ~ x ~", F: "x", G: "~@7 x", H: "x!3 ~",
})).gain(0.71)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A B A C A B A ~ A B A C A B A C A B A ~ A B A C A B A D A B A C A B A ~ A B A C A B A ~ A B A C A B A ~ A B A D A
  B A ~ A B A ~ A B A ~@10 A B A D A B A ~@4
>`.pickRestart({
  A: "~@4 x ~@2 x ~@4 x ~@3", B: "~@4 x ~@2 x ~ x ~@2 x ~@3", C: "~@4 x ~@2 x ~@2 x ~ x ~ x ~", D: "~@4 x ~@3 x ~ x!6",
})).gain(0.29)

// drums · clap
const clap = s("cp").struct("<~@8 A@7 B A@27 ~ A@7 B A@15 ~ A@3 B A@3 ~@10 A@7 ~@4>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.29)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@80 [~ x ~ x]!4 ~@12>").gain(0.14)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@4 A@3 ~ A@7 ~ A@11 ~ A@23 B A@7 ~ A@11 B A@3 ~ A@8 ~ A@8 ~@3>".pickRestart({
  A: "~@3 x ~@3 x ~@3 x ~@3 x", B: "~@3 x ~@3 x ~@3 x ~@4",
})).gain(0.07)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A@3 ~ A@7 ~ A@11 ~ A@23 B A@7 ~ A@11 B A@3 ~ A@8 ~ A@8 ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2",
})).gain(0.29)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@8 A@7 B A@11 ~ A@15 B A@7 B A@7 ~ A@7 B A@3 B A@3 ~@5 A@4 ~ A@7 B ~@3
>`.pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "~@2 x!2 ~@2 x!2 ~@8",
})).gain(0.36)

// drums · splash
const splash = s("cr").struct(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A B A ~ C
  ~@4 A ~@3 A ~@3 A ~@2
>`.pickRestart({
  A: "x", B: "~@7 x", C: "x ~@2 x!2 ~@11",
})).gain(0.29)

// drums · bongos
const bongos = s("bongo:4").struct(`<
  ~@72
  [~@2 x ~ x ~@2 x!3 ~ x ~ x!2 ~]
  [x ~ x ~ x!2 ~ x ~ x!2 ~ x ~@3]
  [x ~ x ~ x ~ x!2 ~ x!2 ~@5]
  [x!8]
  ~@20
>`).gain(1.13)

// drums · shaker
const shaker = s("sh").struct("<~@16 A@11 ~ A@15 ~@9 A@7 ~ A@7 ~@5 A@3 ~@5 A@4 ~ A@7 ~@4>".pickRestart({
  A: "x!16",
})).gain(0.14)

stack(
  bass, lead_1_square, lead_1_square_2, lead_2_sawtooth, lead_8_bass_lead, lead_2_sawtooth_2, string_ensemble_2,
  overdriven_guitar, kick, snare, clap, clap_soft, pedal_hat, open_hat, tambourine, splash, bongos, shaker
)

More by Mr. President