Strudelify
Urgent cover art

4

Urgent

Foreigner

KeyG majorTempo118 bpm
0:00/0:00
// Urgent — Foreigner
// 118 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 114 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): distguitar.
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.

// bass · electric bass pick · "bass"
const bass = note(`<
  ~@4 A B C D E F@2 B G B G D H F@2 B I B G D H F@2 B J B G D H F@2 B G K L K ~ K M K N@2 ~ B G B G D H F@2 B I B G D@2
  F@2 B G K L K ~ K ~ K ~ K ~ K O P ~@2 Q B G D@2 F@2 B G B G D@2 F@2 B G K L K ~ K ~ K ~ K ~ K O K ~ K ~@2
>`.pickRestart({
  A: "~@3 d2", B: "e1 ~@2 e1!4 ~", C: "e1 ~@2 e1!4 b1", D: "c2 ~@2 c2!4 ~", E: "c2 ~@2 c2!3 c2@2", F: "a1 ~@2 a1!4 ~",
  G: "e1 ~@2 e1!3 b1@2", H: "c2@2 ~@4 c2@2 c2@2 c2@2 c2@3 ~", I: "e1 ~@2 e1!2 d1 d#1 e1", J: "e1 ~@2 e1!3 d2@2",
  K: "e1!2 ~@6", L: "~@10 c2 b1 a1@2 d2@2", M: "~@6 c2 d2", N: "[~@7 d2@3 ~@6]/2", O: "~@5 b1 c2 d2", P: "e2 ~@3",
  Q: "~@7 g1",
})).s("gm_electric_bass_pick").gain(0.78)

// bass · slap bass 1 · "slapbass"
const bass_2 = note(`<
  ~@5 A@2 B@2 C@2 A@4 B@2 C@2 A D A@2 B@2 C@2 A@4 B@2 C@2 A@2 ~@10 A@4 B@2 C@2 A@4 B@2 C@2 A@2 ~@16 A@2 B@2 C@2 A@4 B@2
  C@2 A E ~@17
>`.pickRestart({
  A: "~@4 e2@3 ~@3 e2@3 ~@3", B: "c2 ~ c3@2 c3@2 ~@2 c2 ~ c3@3 ~@3", C: "a1 ~ a2@2 a2@2 ~@2 a1 ~ a2@3 ~@3",
  D: "~@4 e2@3 ~@3 d2 ~ d#2 ~ e2@2", E: "~@4 e2@3 ~@3 e2@3 ~ e2@2",
})).s("gm_slap_bass_1").gain(0.78)

// bass · synth bass 1 · "sythnbass"
const bass_3 = note(`<
  ~@37 A B A B A B A B ~@20 A B A B A B A B A B A B ~@20 A B A B A B A B A B A B C ~@4
>`.pickRestart({
  A: "e3!4 d3!4", B: "a2!3 c3!5", C: "e3!4 d3!2 ~@2",
})).s("gm_synth_bass_1").gain(0.25).pan(0)

// bass · synth bass 1 · "sythnbass" · soft notes
const bass_soft = note("<~@109 [~@6 d3!2] [a2!3 c3!5] [e3!4 d3!4] [a2!3 c3!5] ~>").s("gm_synth_bass_1").gain(0.1).pan(0)

// other · electric guitar clean · "guitar"
const electric_guitar_clean = note(`<
  A B@2 C@2 D@2 E@2 F@2 G@2 D@2 E@2 F@2 G@2 D@2 E@2 F@2 G@2 D@2 E@2 F@2 G@2 ~@10 D@4 E@2 F@2 G@2 D@2 E@2 F@2 G@2 ~@16
  D@2 E@2 F@2 G@2 D@2 E@2 F@2 G@2 ~@17
>`.pickRestart({
  A: "~@7 d#3", B: "e3 [e2,e3]!5 e2 [e2,d#3]", C: "[e2,e3]!6 e2 [e2,d#3]", D: "~ e2!7", E: "c3!8", F: "a2!8", G: "e2!8",
})).s("gm_electric_guitar_clean").gain(0.25).pan(1)

// other · electric guitar clean · "guitar"
const electric_guitar_clean_2 = note(`<
  ~@2 A B@2 C@32 ~@3 D ~ D ~@4 C@18 ~ D ~@3 D ~@3 E ~@6 C@16 ~ D ~ D ~ D ~@3 D ~@3 D ~@3
>`.pickRestart({
  A: "~@7 d#3", B: "d#3!2 e3!4 ~ d#3", C: "e3!4 d3!3 ~", D: "~@5 a3 [d4,f#4]@2", E: "~@3 [d4,f#4,a4]",
})).s("gm_electric_guitar_clean").gain(0.25).pan(0)

// other · distortion guitar · "distguitar"
const distortion_guitar = note("<~@80 [~@7 g2] ~@33>").s("gm_distortion_guitar").gain(0.32).pan(0)

// other · distortion guitar · "distguitar2"
const distortion_guitar_2 = note(`<
  ~@5 A@8 ~@16 B@8 C ~ C D C D C ~@3 E@2 ~@8 B@8 C D C ~ C D C ~ C F C ~@5 B@16 C D C D C D C ~ C D C ~ C D C ~@2
>`.pickRestart({
  A: "[e3@11 ~@2 e3 ~ e3@14 e3 ~ e3@14 e3 ~ e3@14 ~@3]/8",
  B: "[e3@22 ~@4 e3@2 ~@2 e3@28 e3@2 ~@2 e3@28 e3@2 ~@2 e3@28 ~@2 a2 b2 d3 ~]/8", C: "[e2,e3] ~",
  D: "~@5 a3 [d4,f#4]@2", E: "[e3@11 ~@5]/2", F: "~@3 [d4,f#4,a4]",
})).s("gm_distortion_guitar").gain(0.32).pan(1)

// chords · lead 2 sawtooth · "sawtooth"
const lead_2_sawtooth = note(`<
  ~@37 A B A B A B A B A B ~@18 A B A B A B A B A B A B A B A B ~@16 A B A B A B A B A B A B C ~@4
>`.pickRestart({
  A: "[e4,g4]!4 [d4,f#4]!4", B: "[a3,c4]!3 [c4,e4]!5", C: "[e4,g4]!4 [d4,f#4]!2 ~@2",
})).s("gm_lead_2_sawtooth").gain(0.08).pan(1)

// chords · lead 2 sawtooth · "sawtooth" · soft notes · D Am C Em D Am C
const lead_2_sawtooth_soft = note(`<
  ~@109
  [~@6 [d4,f#4]!2]
  [[a3,c4]!3 [c4,e4]!5]
  [[e4,g4]!4 [d4,f#4]!4]
  [[a3,c4]!3 [c4,e4]!5]
  ~
>`).s("gm_lead_2_sawtooth").gain(0.03).pan(1)

// chords · pad new age · "pad"
const pad_new_age = note("<~@38 A ~ A ~ A ~@23 A ~ A ~ A ~ A ~ A ~@23 A ~ A ~ A ~ A ~ A ~@7>".pickRestart({
  A: "~@3 [c4,e4,g4]@2 ~@3", // C
})).s("gm_pad_new_age").gain(0.25).pan(1)

// chords · pad new age · "pad" · soft notes · C
const pad_new_age_soft = note("<~@110 [~@3 [c4,e4,g4]@2 ~@3] ~ [~@3 [c4,e4,g4]@2 ~@3] ~>")
  .s("gm_pad_new_age").gain(0.13).pan(1)

// other · alto sax · "sax2"
const alto_sax = note("<~@41 A ~@3 B C ~@24 D@2 A ~@3 B C B E F@2 G@2 H I J K@3 L M@4 N ~@6 A ~@10>".pickRestart({
  A: "~@2 g4 e4 g4 e4 g4 e4", B: "e4 ~ e4 ~ e4 ~ e4 ~ d4 ~ d4 ~ d4 ~ d4 ~", C: "a3 ~ e4 ~ c4 ~ e4 ~@9",
  D: "[~@12 b4@2 a4@3 g4 e4@3 ~@11]/2", E: "c4 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4 ~",
  F: "[~@2 c6 d6 e6@18 ~@4 a#4@3 ~ a#4@2]/2", G: "[g4 e4@2 ~@2 a#4@6 a4!4 g4]/2", H: "a4@2 g4@4 ~@4 a#4@3 a#4@3",
  I: "a#4@3 ~ b4@3 g4 a4 ~ g4 ~ e4 ~ d4 ~", J: "g4 e4@4 ~ e4!2 g4@2 a4@2 b4@2 b4@2",
  K: "[b4 ~ e4!2 g4 a4 ~@11 e5 a#4!3 a4!2 g4, ~@7 a#4@11 ~@6]/3", L: "e4@6 ~@2 g4!2 a4@2 b4@2 b4@2",
  M: "[a#4@2 f#6@12 e6@24 ~@2 d6 ~ e6 ~ d6 ~ e6@16 ~@2]/4", N: "~@4 e5 d5 a4 ~ g4@2 ~@6",
})).s("gm_alto_sax").gain(0.54).pan(0)

// chords · shanai · "backups" · Em
const shanai = note("<~@77 [~@8 [e6,g6]!8] [[e6,g6]!16] [[e6,g6]!13 ~@3] ~@34>").s("gm_shanai").gain(0.02).pan(0)

// drums · kick
const kick = s("bd").struct("<~@5 A@40 ~@2 A@30 B ~@3 A@15 C A@16 ~>".pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x", C: "x!2",
})).gain(0.7)

// drums · snare
const snare = s("sd").struct("<~@3 A@37 B A@3 B A@23 B A@7 B A@3 C A@15 D A@3 B A@3 B A@3 B A@3 B ~>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@3 x!5", D: "~@5 x!2 ~",
})).gain(0.7)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@3 A@34 B A B A B A B A C A C A@17 B A B A B A B A B A B A C A@3 C A@15 B A B A B A B A B A B A B A B A ~
>`.pickRestart({
  A: "x!8", B: "x!5 ~ x!2", C: "~ x!7",
})).gain(0.7)

// drums · mid tom
const mid_tom = s("mt").struct("<~@80 [~@3 x!5] ~@33>").gain(0.7)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@37 A ~ A ~ A ~ A ~@21 A ~ A ~ A ~ A ~ A ~ A ~@21 A ~ A ~ A ~ A ~ A ~ A ~ B ~@4
>`.pickRestart({
  A: "~@10 x!3 ~ x ~", B: "~@10 x!3 ~@3",
})).gain(0.7)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@109 [~@7 x] ~ [~@10 x!3 ~ x ~] ~@2>").gain(0.23)

// drums · crash
const crash = s("cr").struct(`<
  ~@37 A ~ A B A ~ A B ~@2 C ~@17 A ~ A B A ~ A D A ~ A B ~@3 E C ~@14 F A ~ A B A ~ A B A ~ A B G ~@4
>`.pickRestart({
  A: "~@10 x!3 ~ x ~", B: "~@6 x!2", C: "x", D: "~@3 x", E: "~@3 x!5", F: "~@5 x!3", G: "~@10 x!2 ~@4",
})).gain(0.54)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@109 [~@6 x!2] ~ [~@10 x!3 ~ x ~] [~@6 x!2] ~>").gain(0.16)

stack(
  bass, bass_2, bass_3, bass_soft, electric_guitar_clean, electric_guitar_clean_2, distortion_guitar,
  distortion_guitar_2, lead_2_sawtooth, lead_2_sawtooth_soft, pad_new_age, pad_new_age_soft, alto_sax, shanai, kick,
  snare, hihat, mid_tom, high_tom, high_tom_soft, crash, crash_soft
)

More by Foreigner