Strudelify

Please Don't Go

No Mercy

KeyB♭ majorTempo125 bpm
0:00/0:00
// Please Don't Go — No Mercy
// 124.5 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 133 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): #Dazed Gt.
setcpm(124.5/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// chords · percussive organ · "#Organ 20"
const percussive_organ = note(`<
  ~@9 A@2 B@2 A@2 C@2 ~@6 D@2 E@2 D@2 E@2 D@6 E@2 ~@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 ~@4 D@2 E@2 D@2 E@2 D@6 E@2 ~@2 B@2
  A@2 C@2 ~@26 B@2 A@2 C@2 A@2 B@2 A@2 C@2 ~@10
>`.pickRestart({
  A: "[d4,f4,bb4] ~@2 [d4,f4,bb4] ~@2 [d4,f4,bb4] ~@3 [d4,f4,bb4] ~@5", // Bb
  B: "[eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~@5", // Eb
  C: "[c4,f4,a4] ~@2 [c4,f4,a4] ~@2 [c4,f4,a4] ~@3 [c4,f4,a4] ~@5", // F
  D: "[g3,g4] ~@2 [g3,g4] ~@2 [g3,g4] ~@3 [g3,g4] ~@5", E: "[d4,d5] ~@2 [d4,d5] ~@2 [d4,d5] ~@3 [d4,d5] ~@5",
})).s("gm_percussive_organ").gain(0.35).pan(0.7)

// bass · electric bass finger · "Fing.Bass"
const bass = note(`<
  ~@9 A B C@2 A D E F G H I H G J K L M N K L M N K L K L K L M N ~@2 C@2 A D E O A B C@2 A D E O G H G J K L M N K L M
  N K L K L K L M N ~@2 C@2 A D E O ~@4 P Q R S P Q R S ~@2 M T ~@10 C@2 A D E O A B C@2 A D E O P Q R S P Q R S ~@2
>`.pickRestart({
  A: "bb1 ~@2 bb1 ~@2 bb1@2 bb1!2 bb2 ~ ab2 bb2 ~@2", B: "bb1 ~@2 bb1 ~@2 bb1@2 ~ bb1 bb2 ~ ab2 bb2 ~@2",
  C: "eb1 ~@2 eb1 ~@2 eb1@3 ~ eb2 ~ db2 eb2 ~@2", D: "bb1 ~@2 bb1 ~@2 bb1@2 ~ bb1 bb2 ~ ab2 bb2 ~ eb1",
  E: "f1@2 ~ f1 ~ f1 f1@4 f2 ~ eb2 f2 ~ eb1", F: "f1@2 ~ f1 ~ f1 f1@3 ~ f2 ~ eb2 gb2 ~@2",
  G: "d2 ~ d2 ~ bb1@2 ~@2 g1@2 ~ g1@2 ~ g1 ~", H: "~@2 d2 ~ bb1@2 ~@2 eb2@2 ~ eb2@2 ~ eb2 ~",
  I: "d2 ~ d2 ~ bb1@2 ~@2 g1@2 ~ g1 ~@2 g1 ~", J: "~@2 d2 ~ bb1@2 ~@2 eb2@2 ~@6",
  K: "g1@2 ~ g1 ~@2 g1 ~ g1!2 g2 ~ f2 g2 ~@2", L: "g1@2 ~ g1 ~@2 g1@2 ~ g1 g2 ~ f2 g2 ~@2",
  M: "d2 ~@2 d2 ~@2 d2@2 ~ d2 d3@2 c3 d3 ~@2", N: "d2 ~@2 d2 ~@2 d2 ~@2 d2 d3 ~ c3 d3 ~@2",
  O: "f1@2 ~ f1 ~ f1 f1@3 ~ f2 ~ eb2 f2 ~@2", P: "g1@2 ~@4 g1@2 ~@2 g2 ~ f2 g2@2 ~",
  Q: "f1@2 ~@4 f1@2 ~@2 f2 ~ eb2 f2@2 ~", R: "eb1@2 ~@4 eb1@2 ~@2 eb2 ~ d2 eb2 ~@2",
  S: "d1@2 ~@4 d1@2 ~@2 d2 ~ c2 d2@2 ~", T: "d2 ~@2 d2 ~@2 d2 ~@2 d2 d3 ~ g2@3 ~",
})).s("gm_electric_bass_finger").gain(0.66)

// chords · synth strings 1 · "#Syn.Strn"
const synth_strings_1 = note(`<
  ~ A@2 B@2 C@2 D@2 E@2 F@2 E@2 G@2 ~@30 E@2 F@2 E@2 G@2 ~@22 F@2 E@2 G@2 ~@26 F@2 E@2 G@2 E@2 F@2 E@2 G@2 ~@10
>`.pickRestart({
  A: "[d4,f4,bb4,d5]/2", B: "[bb3,eb4,g4,bb4]/2", C: "[f3,bb3,d4,f4]/2", D: "[f3,a3,c4,f4]/2", E: "[f4,bb4,d5]/2",
  F: "[g4,bb4,eb5]/2", G: "[f4,a4,c5]/2",
})).s("gm_synth_strings_1").gain(0.35)

// chords · synth strings 1 · "Syn.Strin"
const synth_strings_1_2 = note(`<
  A@3 B@2 C@2 D@2 E@2 F@2 E@2 G@2 ~@14 H I J@2 K@2 L@2 M@2 ~@26 H I J@2 K@2 L@2 M@2 ~@14 N O P Q ~@4 R@2 S@2 R@2 S@2 T@2
  ~@18 N O P Q ~@2
>`.pickRestart({
  A: "[bb3,d4,f4]/3", B: "[eb2,eb3,bb3,eb4,g4]/2", C: "[bb1,bb2,f3,bb3,d4]/2", D: "[f1,f2,f3,a3,c4]/2",
  E: "[f3,bb3,d4]/2", F: "[g3,bb3,eb4]/2", G: "[f3,a3,c4]/2", H: "[a3,a4]", I: "[bb3,bb4]@3 [c4,c5]",
  J: "[[d4,d5]@3 [f4,f5]]/2", K: "[[g4,g5]@6 [a4,a5] [bb4,bb5]]/2", L: "[[d4,d5]@3 [eb4,eb5]]/2", M: "[bb1@31 ~]/2",
  N: "g6", O: "f6", P: "eb6", Q: "d6", R: "[g2,f3,g3,bb3,d4]/2", S: "[d2,d3,f3,a3,c4]/2", T: "bb1/2",
})).s("gm_synth_strings_1").gain(0.31)

// chords · lead 2 sawtooth · "#Saw"
const lead_2_sawtooth = note(`<
  ~@3 A@2 B C D E F C G H C@2 E@2 ~@30 F C G H C@2 E@2 ~@26 E@2 ~@30 E@2 F C G H C@2 E@2 ~@10
>`.pickRestart({
  A: "g3!2 [bb3,eb4,g4]!2 g3!2 [bb3,eb4,g4]!2 g3!2 [bb3,eb4,g4]!2 g3!2 [bb3,eb4,g4]!2", // Eb
  B: "f3!2 [bb3,d4,f4]!2 f3!2 [bb3,d4] [bb3,d4,f4] f3!2 [bb3,d4] [bb3,d4,f4] f3!2 [bb3,d4,f4]!2", // Bb
  C: "f3!2 [bb3,d4,f4]!2 f3!2 [bb3,d4,f4]!2 f3!2 [bb3,d4,f4]!2 f3!2 [bb3,d4,f4]!2", // Bb
  D: "f3!2 [a3,c4,f4] [a3,c4] f3!2 [a3,c4,f4]!2 f3!2 [a3,c4,f4]!2 f3!2 [a3,c4,f4]!2", // F Am F
  E: "f3!2 [a3,c4,f4]!2 f3!2 [a3,c4,f4]!2 f3!2 [a3,c4,f4]!2 f3!2 [a3,c4,f4]!2", // F
  F: "f3!2 bb3 [bb3,d4,f4] f3!2 [bb3,d4,f4]!2 f3!2 [bb3,d4,f4]!2 f3!2 [bb3,d4,f4]!2", // Bb
  G: "g3!2 [bb3,eb4,g4]!2 g3!2 [bb3,eb4] [bb3,eb4,g4] g3!2 [bb3,eb4] [bb3,eb4,g4] g3!2 [bb3,eb4,g4]!2", // Eb Eb5 Eb Eb5 Eb
  H: "g3!2 [bb3,eb4,g4]!2 g3!2 [bb3,eb4] [bb3,eb4,g4] g3!2 [bb3,eb4,g4]!2 g3!2 [bb3,eb4] [bb3,eb4,g4]", // Eb Eb5 Eb Eb5 Eb
})).s("gm_lead_2_sawtooth").gain(0.15).pan(0.6)

// chords · acoustic guitar nylon · "Nylon Gtr"
const acoustic_guitar_nylon = note(`<
  ~@9 A@2 B@2 A@2 C@2 D E F E G H I@2 J@2 I@2 J@2 I@6 J@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 D E G H I@2 J@2 I@2 J@2 I@6
  J@2 A@2 B@2 A@2 C@2 K@2 L K M N O P M N O P K@2 Q R ~@8 A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 M N O P M N O P ~@2
>`.pickRestart({
  A: "[f3,bb3,d4,f4] ~@2 [f3,bb3,d4,f4] ~@2 [f3,bb3,d4,f4] ~@3 [f3,bb3,d4,f4] ~@5", // Bb
  B: "[g3,bb3,eb4,g4] ~@2 [g3,bb3,eb4,g4] ~@2 [g3,bb3,eb4,g4] ~@3 [g3,bb3,eb4,g4] ~@5", // Eb
  C: "[f3,a3,c4,f4] ~@2 [f3,a3,c4,f4] ~@2 [f3,a3,c4,f4] ~@3 [f3,a3,c4,f4] ~@5", // F
  D: "d4 ~ d4 ~ bb3@2 ~@2 g3@2 ~ g3@2 ~ g3@2", E: "~@2 d4 ~ bb3@2 ~@2 eb4@2 ~ eb4@2 ~ eb4 ~",
  F: "d4 ~ d4 ~ bb3@2 ~@2 g3@2 ~ g3@2 ~ g3 ~",
  G: "[d4,d5] ~ [d4,d5] ~ [bb3,bb4]@2 ~@2 [g3,g4]@2 ~ [g3,g4]@2 ~ [g3,g4]@2", // D Bb G
  H: "~@2 [d4,d5] ~ [bb3,bb4]@2 ~@2 [eb4,eb5]@2 ~@6", // D Bb Eb
  I: "[d3,g3,bb3,d4] ~@2 [d3,g3,bb3,d4] ~@2 [d3,g3,bb3,d4] ~@3 [d3,g3,bb3,d4] ~@5", // Gm
  J: "[d3,gb3,a3,d4] ~@2 [d3,gb3,a3,d4] ~@2 [d3,gb3,a3,d4] ~@3 [d3,gb3,a3,d4] ~@5", // D
  K: "[g3,bb3,d4,g4] ~@2 [g3,bb3,d4,g4] ~@2 [g3,bb3,d4,g4] ~@3 [g3,bb3,d4,g4] ~@2 [g3,bb3,d4,g4] ~@2", // Gm
  L: "[g3,bb3,d4,g4] ~@2 [g3,bb3,d4,g4] ~@2 [g3,bb3,d4,g4] ~@2 [g3,bb3,d4,g4]!2 ~@2 [g3,bb3,d4,g4] ~@2", // Gm
  M: "[g3,bb3,d4,g4] ~@5 [g3,bb3,d4,g4] ~@3 [g3,bb3,d4,g4] ~@2 [g3,bb3,d4,g4] ~@2", // Gm
  N: "[f3,a3,c4,f4] ~@5 [f3,a3,c4,f4] ~@3 [f3,a3,c4,f4] ~@2 [f3,a3,c4,f4] ~@2", // F
  O: "[eb3,g3,bb3,eb4] ~@5 [eb3,g3,bb3,eb4] ~@3 [eb3,g3,bb3,eb4] ~@2 [eb3,g3,bb3,eb4] ~@2", // Eb
  P: "[d3,gb3,a3,d4] ~@5 [d3,gb3,a3,d4] ~@3 [d3,gb3,a3,d4] ~@2 [d3,gb3,a3,d4] ~@2", // D
  Q: "[a3,d4,gb4,a4] ~@2 [a3,d4,gb4,a4] ~@2 [a3,d4,gb4,a4] ~@3 [a3,d4,gb4,a4] ~@2 [a3,d4,gb4,a4] ~@2", // D
  R: "[a3,d4,gb4,a4] ~@2 [a3,d4,gb4,a4] ~@2 [a3,d4,gb4,a4] ~@9", // D
})).s("gm_acoustic_guitar_nylon").gain(0.4).pan(0.4)

// chords · acoustic guitar nylon · "Nylon Gtr" · soft notes · Gm D
const acoustic_guitar_nylon_2 = note(`<
  ~@95
  [~ [g3,bb3,d4,g4]!2 ~ [g3,bb3,d4,g4]!2 ~ [g3,bb3,d4,g4]!3 ~ [g3,bb3,d4,g4]!2 ~ [g3,bb3,d4,g4]!2]!2
  [~ [a3,d4,gb4,a4]!2 ~ [a3,d4,gb4,a4]!2 ~ [a3,d4,gb4,a4]!3 ~ [a3,d4,gb4,a4]!2 ~ [a3,d4,gb4,a4]!2]
  [~ [a3,d4,gb4,a4]!2 ~ [a3,d4,gb4,a4]!2 ~@10]
  ~@34
>`).s("gm_acoustic_guitar_nylon").gain(0.22).pan(0.4)

// other · distortion guitar · "#Dazed Gt"
const distortion_guitar = note(`<
  ~@20
  [~@14 eb3 ~]
  [d3 ~ d3 ~ bb2@2 ~@2 g2@2 ~ g2@2 ~ g2@2]
  [~@2 bb2 ~@5]
  ~@35
  [~@2 bb2 ~@5]
  ~@74
>`).s("gm_distortion_guitar").gain(0.35).pan(0.6)

// other · timpani
const timpani = note("<A B ~@81 B ~@11 B ~@3 B ~@7 B ~@23 B ~>".pickRestart({
  A: "f1@5 ~@3", B: "f1",
})).s("gm_timpani").gain(0.8)

// other · pad sweep · "Sweep Pad"
const pad_sweep = note("<~@83 A@4 ~@46>".pickRestart({
  A: "[~@12 [g4,g5]@21 ~@11 [g4,g5]@20]/4", // G
})).s("gm_pad_sweep").gain(0.38)

// drums · kick
const kick = s("bd").struct("<A ~@8 B@30 A ~ B@34 A ~ B@6 C B C B@9 ~@2 B@2 ~@8 A ~ B@22 ~@2>".pickRestart({
  A: "x", B: "x!4", C: "x ~ x ~ x ~ x!2",
})).gain(0.7)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@5 A B ~@6 A B ~@6 C ~@17 D ~@3 A B ~@6 A B ~@4 C ~@17 D ~@3 A B ~@24 E ~ D ~@3 A B ~@6 A B ~@12
>`.pickRestart({
  A: "x!16", B: "x!5 ~@11", C: "x!10 ~@6", D: "x!11 ~@5", E: "x!6 ~@10",
})).gain(0.16)

// drums · clap
const clap = s("cp").struct("<~@9 A@74 B C B C A@8 ~@2 A@2 ~@8 A@24 ~@2>".pickRestart({
  A: "~ x ~ x", B: "x ~@2 x ~@2 x ~@4 x!2 ~@3", C: "x ~@2 x ~@2 x ~@4 x ~ x ~@2",
})).gain(0.47)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@87 [x!4 ~ x!7 ~ x!3]!8 ~@28 [x!4 ~ x!7 ~ x!3]!8 ~@2>").gain(0.23)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@5 A@17 B A@16 ~@2 A@17 B A@16 ~@2 A@6 ~@4 A@8 ~@2 A C ~@10 A@22 ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x!3 ~@2", C: "~ x ~ x ~ x ~@2",
})).gain(0.78)

// drums · crash
const crash = s("cr").struct("<~@38 A B ~@34 A B ~@19 B ~@2 C ~@8 B ~@25>".pickRestart({
  A: "x!4", B: "x", C: "x!3 ~",
})).gain(0.31)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@9 A@13 B A@16 ~@2 A@17 B A@16 ~@2 A@6 ~@4 A@8 ~@2 A C ~@10 A@22 ~@2
>`.pickRestart({
  A: "x!16", B: "x!12 ~@4", C: "x!13 ~@3",
})).gain(0.31)

// drums · congas
const congas = s("conga:13").struct("<~@9 A@30 ~@2 A@34 ~@2 A@18 ~@2 A@2 ~@10 A@22 ~@2>".pickRestart({
  A: "~ x ~@3 x ~@2",
})).gain(1.49)

// drums · congas
const congas_2 = s("conga:18").struct("<~@9 A B@29 ~@2 B@6 A B@27 ~@2 B@18 ~@2 B@2 ~@10 B@6 A B@15 ~@2>".pickRestart({
  A: "x ~@6 x", B: "~@7 x",
})).gain(1.49)

// drums · congas
const congas_3 = s("conga:33").struct("<~@9 A@30 ~@2 A@34 ~@2 A@18 ~@2 A@2 ~@10 A@22 ~@2>".pickRestart({
  A: "~@6 x!2 ~@8",
})).gain(1.49)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@9 A@13 B A@16 ~@2 A@17 B A@16 ~@2 A@6 ~@14 A C ~@10 A@14 ~@10>".pickRestart({
  A: "x!16", B: "x!12 ~@4", C: "x!13 ~@3",
})).gain(1.18)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@83 [~@3 x] ~ [~@3 x] ~@12 [~@3 x] ~@34>").gain(4.16)

// drums · rim
const rim = s("rim").struct("<~@83 [x!16]!12 ~@28 [x!16]!8 ~@2>").gain(0.54)

// drums · lt
const lt = s("lt").struct("<~ [x!2]!2 ~@95 [~ x] [x!2]!2 ~@30 [x!2]!2>").gain(0.08)

// … 5 more lines

More by No Mercy