Strudelify

Up 'N Away

Mr. President

KeyG minorTempo120 bpm
0:00/0:00
// Up 'N Away — Mr. President
// 120 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 131 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, 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 · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  A B C D E F G H A B C D A B C D ~@29 A B C D E F I D ~@29 A B C D E F I D ~@41
>`.pickRestart({
  A: "f4@3 ~ a3 ~ a3@2 bb3 ~ bb3@2 a3 ~@3", B: "~@2 f4@2 a3 ~ a3@2 bb3 ~ bb3@2 a3 ~@3",
  C: "d4@4 g3 ~ g3@2 a3 ~ a3@2 f3 ~@3", D: "~@2 d4@2 g3 ~ g3@2 a3 ~ a3@2 f3 ~@3",
  E: "f4@3 ~ a3 ~ a3@2 bb3 ~ bb3@2 a3 ~@3, f5 a4", F: "~@2 f4@2 a3 ~ a3@2 bb3 ~ bb3@2 a3 ~@3, bb4 a4",
  G: "d4@4 g3 ~ g3@2 a3 ~ a3@2 f3 ~@3, d5@8 g4@7 ~", H: "~@2 d4@2 g3 ~ g3@2 a3 ~ a3@2 f3 ~@3, a4@8 f4@7 ~",
  I: "d4@4 g3 ~ g3@2 a3 ~ a3@2 f3 ~@3, d5 g4",
})).s("gm_lead_2_sawtooth").gain(0.13).pan(0.2)

// bass · synth bass 2
const bass = note(`<
  ~@8 A B C D A B C E A B C D A B C D A B C F A@2 G H A@2 I H A@2 G H A@2 I H ~ A B C D A B C ~ A B C D A B C D A B C F
  A@2 G H A@2 I H A@2 G H A@2 I H ~ A B C D A B C ~ A B C D A B C F A@2 G H A@2 I H A@2 G H A@2 I H J@2 K L J@2 M L J@2
  K L J@2 M L ~
>`.pickRestart({
  A: "g1 g2 g1 g2 g1 g2 g1 g2", B: "g1 g2 g1 g2 g1 g2 f1 f2", C: "d1 d2 d1 d2 d1 d2 d1 d2",
  D: "d1 d2 d1 d2 d1 d2 f1 f2", E: "d1 ~@7", F: "d1 [c1,c2] db1 eb2 d1 d2 f1 f2, d2 ~@15",
  G: "eb1 eb2 eb1 eb2 eb1 eb2 eb1 eb2", H: "eb1 eb2 eb1 eb2 eb1 eb2 f1 f2", I: "f1 f2 f1 f2 f1 f2 f1 f2",
  J: "ab1 ab2 ab1 ab2 ab1 ab2 ab1 ab2", K: "e1 e2 e1 e2 e1 e2 e1 e2", L: "e1 e2 e1 e2 e1 e2 gb1 gb2",
  M: "gb1 gb2 gb1 gb2 gb1 gb2 gb1 gb2",
})).s("gm_synth_bass_2").gain(0.35)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@4 A B C D ~@20 E@4 F@2 G H E@4 F@2 G H ~@5 A B C ~@13 E@4 F@2 G H E@4 F@2 G H ~@5 A B C ~@9 E@4 F@2 G H E@4 F@2 G H
  I@4 J@2 K L I@4 J@2 K L ~
>`.pickRestart({
  A: "f5 a4", B: "bb4 a4", C: "d5@8 g4@7 ~", D: "a4@8 f4@7 ~", E: "[d5@31 ~ eb5@32, [g4,bb4]]/4",
  F: "[[g4,d5], bb4 ~@31]/2", G: "[f4,a4,c5]", H: "[g4,bb4,eb5]@15 ~", I: "[eb5@31 ~ e5@32, [ab4,b4]]/4",
  J: "[[ab4,eb5], b4 ~@31]/2", K: "[gb4,bb4,db5]", L: "[ab4,b4,e5]@15 ~",
})).s("gm_string_ensemble_2").gain(0.09).pan(0.3)

// chords · synth brass 1
const synth_brass_1 = note("<~@20 A@2 B@2 A@2 B ~@26 A@2 B@2 A@2 B@2 A@2 B C ~@25 A@2 B@2 A@2 B C ~@33>".pickRestart({
  A: "[d3,g3] ~ [d3,g3] ~@2 [d3,g3] ~ [d3,g3] ~@8", B: "[d3,f3] ~ [d3,f3] ~@2 [d3,f3] ~ [d3,f3] ~@8", C: "d2 ~@15",
})).s("gm_synth_brass_1").gain(0.28).pan(0.4)

// bass · synth bass 2
const bass_2 = note(`<
  ~@8 A B C D A B C E A B C D A B C D A B C ~ A@2 F G A@2 H G A@2 F G A@2 H G ~ A B C D A B C ~ A B C D A B C D A B C E
  A@2 F G A@2 H G A@2 F G A@2 H G ~ A B C D A B C ~ A B C D A B C E A@2 F G A@2 H G A@2 F G A@2 H G I@2 J K I@2 L K I@2
  J K I@2 L K ~
>`.pickRestart({
  A: "g2 ~ g2!3 ~ g2!3 ~ g2!3 ~ g2!2", B: "g2 ~ g2!3 ~ g2!3 ~ g2!2 f2 ~ f2!2", C: "d2 ~ d2!3 ~ d2!3 ~ d2!3 ~ d2!2",
  D: "d2 ~ d2!3 ~ d2!3 ~ d2!2 f2 ~ f2!2", E: "d2 ~@15", F: "eb2 ~ eb2!3 ~ eb2!3 ~ eb2!3 ~ eb2!2",
  G: "eb2 ~ eb2!3 ~ eb2!3 ~ eb2!2 f2 ~ f2!2", H: "f2 ~ f2!3 ~ f2!3 ~ f2!3 ~ f2!2",
  I: "ab2 ~ ab2!3 ~ ab2!3 ~ ab2!3 ~ ab2!2", J: "e2 ~ e2!3 ~ e2!3 ~ e2!3 ~ e2!2",
  K: "e2 ~ e2!3 ~ e2!3 ~ e2!2 gb2 ~ gb2!2", L: "gb2 ~ gb2!3 ~ gb2!3 ~ gb2!3 ~ gb2!2",
})).s("gm_synth_bass_2").gain(0.21).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@3 ~ A@7 ~ A@11 ~ A@16 ~ A@19 B A@16 ~ A@15 B A@8 C B C D C B E A@9 C B C D C B E A ~
>`.pickRestart({
  A: "x!4", B: "x", C: "x ~@6 x", D: "x!2 ~@6", E: "~ x!3",
})).gain(0.52)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@3 ~ A@7 ~ A@11 ~ A@16 ~ A@19 ~ A@16 ~ A@15 ~ A@8 ~@4 A@12 ~@4 A@4 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.52)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 [~@8 x ~@2 x ~@2 x!2] ~@97 [~@14 x!2] x ~@16>").gain(0.35)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A@3 ~ A@7 ~ A@11 ~ A@16 ~ A@19 ~ A@16 ~ A@15 ~ A@8 B C B D E@2 A@10 B C B D E@2 A@2 ~
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x ~@6 x", C: "x", D: "x!2 ~@6", E: "x!2 ~ x ~ x ~ x",
})).gain(0.29)

// drums · high tom
const high_tom = s("ht").struct("<~@15 [~@9 x ~@2 x ~@3] ~@97 [~@6 x ~ x!4 ~@4] ~@17>").gain(0.35)

stack(lead_2_sawtooth, bass, string_ensemble_2, synth_brass_1, bass_2, kick, hihat, mid_tom, open_hat, high_tom)

More by Mr. President