Strudelify

Please Don't Go (dub reprise)

Double You

KeyB♭ majorTempo120 bpm
0:00/0:00
// Please Don't Go (dub reprise) — Double You
// 120 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 1 "+808 TOM" (synth drum patch on one pitch) is played as the kit's tom
// note: Full arrangement: all 185 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@23 A B C D E B C D F B C D E B C D F G D H E G D H F B C D E B C D F G D H E G D H F B C D E B C D F ~@3 I B C D F G
  D H E G D H F G D H E G D H F G D H E G D H F ~@16 B C D E B C D F G D H E G D H F G D H E G D H F G D H E G D H F G D
  H E G D H F ~@8 G D H E G D H F G D H E G D H F ~
>`.pickRestart({
  A: "~@12 eb1 g1 bb1 g1", B: "bb1!3 ~ bb1 ~ bb1!2 ~ bb1!2 ~ bb1@2 bb1 g1",
  C: "~ g1!2 ~ g1 ~ g1!2 ~ g1!2 ~ g1@2 g1 ab1", D: "~ ab1!2 ~ ab1 ~ ab1!2 ~ ab1!2 ~ ab1@2 ab1 eb1",
  E: "~ eb1!2 ~ eb1 ~ eb1!3 f1 ab1 bb1 ab1 f1 eb1 bb1", F: "~ eb1!2 ~ eb1 ~ eb1!3 f1 ab1 c2 ab1 f1 eb1 bb1",
  G: "bb1!3 ~ bb1 ~ bb1!2 ~ bb1!2 ~ bb1@2 bb1 ab1", H: "~ eb1!2 ~ eb1 ~ eb1!2 ~ eb1!2 ~ eb1@2 eb1!2",
  I: "~@9 f1 ab1 bb1 ab1 f1 eb1 bb1",
})).s("gm_electric_bass_finger").gain(0.37)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  ~@16 A B C D A B C D A B C D A B C D A B C D A B C D E F G D E F G D A B C D A B C D E F G D E F G D A B C D A B C D A
  B C D A B C D E F G D E F G D E F G D E F G D E F G D E F G D ~@16 A B C D A B C D E F G D E F G D ~@8 E F G D E F G D
  E F G D E F G D ~@8 E F G D E F G D E F G D E F G D ~
>`.pickRestart({
  A: "~@2 [f4,bb4,eb5]@2 ~ [f4,bb4,d5]@2 ~ [f4,bb4,eb5]@2 ~ [f4,bb4,d5]@2 ~ [f4,bb4,d5]@2", // Ebsus2 Bb Ebsus2 Bb
  B: "~@2 [f4,bb4,eb5]@2 ~ [f4,bb4,d5]@2 ~ [f4,bb4,eb5]@2 ~ [f4,bb4,d5]@2 ~ [ab4,bb4,c5]@2", // Ebsus2 Bb Ebsus2 Bb Ab
  C: "~@2 [ab4,c5,eb5]@2 ~ [ab4,bb4,d5]@2 ~ [ab4,c5,eb5]@2 ~ [ab4,bb4,d5]@2 ~ [g4,bb4]@2", // Ab Bb7 Ab Bb7 Gm
  D: "~@2 [g4,bb4,eb5]@2 ~ [g4,bb4,d5]@2 ~ [g4,bb4,eb5]@2 ~ [g4,bb4,d5]@2 ~ [f4,bb4,d5]@2", // Eb Gm Eb Gm Bb
  E: "~@2 [f4,bb4,eb5]@2 ~ [f4,bb4,d5]@2 ~ [f4,bb4,eb5]@2 ~ [f4,bb4,d5]@2 ~ [f4,ab4,c5]@2", // Ebsus2 Bb Ebsus2 Bb Fm
  F: "~@2 [ab4,c5,eb5]@2 ~ [ab4,bb4,d5]@2 ~ [ab4,c5,eb5]@2 ~ [ab4,bb4,d5]@2 ~ [eb4,g4,bb4]@2", // Ab Bb7 Ab Bb7 Eb
  G: "~@2 [g4,bb4,eb5]@2 ~ [g4,bb4,d5]@2 ~ [g4,bb4,eb5]@2 ~ [g4,bb4,d5]@2 ~ [g4,bb4]@2", // Eb Gm Eb Gm
})).s("gm_percussive_organ").gain(0.23)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@28 A@4 ~@8 B C D E B C D F ~@8 B C D E B C D F G@2 H I A@4 ~@8 B C D E B C D F B C D E B C D F B C D E B C D F ~@48
  B C D E B C D F ~@8 B C D E B C D F B C D E B C D J@2
>`.pickRestart({
  A: "[f5@6 d5@2 eb5@3 f5@3 f5@8 d5@2 eb5@3 f5@3 eb5@8 d5@2 eb5@3 d5@3 bb4@18]/4", B: "[f4,f5] [d4,d5] [f4,f5] [d5,d6]",
  C: "[c5,c6]@2 [eb4,eb5] [c5,c6]", D: "[bb4,bb5]",
  E: "[bb4,bb5]@6 [eb4,eb5] [f4,f5] [g4,g5]@2 [f4,f5]@2 [eb4,eb5]@2 [g4,g5]@2", // Bb Eb F G F Eb G
  F: "[bb4,bb5]@6 [eb4,eb5] f4 [g4,g5]@2 [f4,f5]@2 [eb4,eb5]@2 [g4,g5]@2, ~@7 f5@2 ~@7", G: "f6/2", H: "eb6", I: "bb5",
  J: "[[bb4,bb5]@6 [eb4,eb5] f4 [g4,g5]@2 [f4,f5]@2 [eb4,eb5]@2 [g4,g5]@10 ~@8, ~@7 f5@2 ~@23]/2", // Bb Eb G F Eb G
})).s("gm_string_ensemble_1").gain(0.3)

// other · alto sax
const alto_sax = note(`<
  ~@64 A B A B A B A B ~@24 A B A B A B A B ~@24 A B A B A B A B ~@16 A B A B A B A B ~@16 A B A B A B A B ~
>`.pickRestart({
  A: "~ bb4 ~@2 f4 ~@3 f4 ~@2 f4 ~@2 f4 ~", B: "~@2 bb4 ~ f4!2 ~@2 f4 ~@2 f4 ~ f4 g4 ~",
})).s("gm_alto_sax").gain(0.56)

// other · alto sax · soft notes
const alto_sax_soft = note(`<
  ~@64 A ~ A ~ A ~ A ~@25 A ~ A ~ A ~ A ~@25 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@7 f4 ~@8",
})).s("gm_alto_sax").gain(0.32)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<A B C D E B C D A B C F A B C F A B C F ~@92 G@8 ~@65>".pickRestart({
  A: "[bb2,f3,bb3,c4,f4]", B: "[g2,f3,bb3,c4,f4]", C: "[ab2,eb3,bb3,c4,eb4]", D: "[c3,g3,bb3,c4,eb4,f4]",
  E: "[bb2,f3,bb3,c4,d4,f4]", F: "[c3,bb3,c4,eb4,f4]",
  G: "[bb2@16 g2@15 ~ [ab2,eb3]@16 [c3,g3]@16 [bb2,d4]@16 g2@16 [ab2,eb3]@16 [c3,g3]@15 ~, [bb3,c4], [f3,f4] eb4 [f3,f4] eb4]/8", // Ab5 C5 Bb Ab5 C5 Bbsus2 F
})).s("gm_string_ensemble_2").gain(0.13)

// chords · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note("<~@8 A ~@2 B A ~@2 B A ~@2 B ~@95 C ~@3 C ~@65>".pickRestart({
  A: "d4", B: "g3", C: "f4",
})).s("gm_string_ensemble_2").gain(0.08)

// other · recorder
const recorder = note("<A ~ B C D E F G A ~ B C D E F G ~@96 A ~ B C D E F G ~@65>".pickRestart({
  A: "bb5 ~@2 bb5 ~ bb5 ~@2 bb5 ~@2 bb5 ~ bb5 ~@2", B: "~@5 bb6 ~@2 bb6 ~@2 bb6 ~ bb6 ~@2", C: "bb6 ~@2 bb6 ~@12",
  D: "~@3 bb5 ~ bb5 ~@2 bb5 ~@2 bb5 ~ bb5 ~@2", E: "bb5 ~@15", F: "~@3 bb6 ~ bb6 ~@2 bb6 ~@2 bb6 ~ bb6 ~@2",
  G: "bb6 ~@15",
})).s("gm_recorder").gain(0.05)

// other · recorder · soft notes
const recorder_soft = note("<~ A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~@97 A ~ B ~ C ~ D ~@65>".pickRestart({
  A: "bb5 ~@2 bb5 ~ bb5 ~@10", B: "~@5 bb6 ~@2 bb6 ~@2 bb6 ~@4", C: "~@3 bb5 ~ bb5 ~@2 bb5 ~@7",
  D: "~@3 bb6 ~ bb6 ~@2 bb6 ~@7",
})).s("gm_recorder").gain(0.03)

// other · piano · "A.PIANO 1"
const piano = note(`<
  ~@8 A@2 B C D E F G H I H ~@13 J@2 B C D E F G K L M N K L O@2 P Q R@2 S T U V W L X N K L Y@3 ~@7 Z AA AB@2 AC AD AE
  AF W L AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU ~@15 A@2 B C D E AV@2 H I H ~@36 I K AW AX@2 K L AY@2 ~@17
>`.pickRestart({
  A: "[f5@3 ~@3 d5@2 eb5@2 f5@2 ~@2 f5@3 eb5 d5@3 ~@9 bb4@2]/2", B: "~@6 d5@2 eb5 ~ eb5@2 ~@3 bb4",
  C: "bb4@3 ~@11 d5 ~", D: "f5@3 eb5 d5@3 ~@3 d5!2 eb5 ~ f5 ~", E: "f5@3 eb5 d5@4 ~@6 d5@2",
  F: "eb5!2 ~@4 d5@2 eb5@2 ~ eb5@2 d5 ~@2", G: "~ bb4@3 ~@6 d5@2 ~@2 g4@2, c5 ~@7", H: "f4 ~@3", I: "~@10 d5@3 ~ g4@2",
  J: "[f5@3 ~@3 d5@2 eb5@2 f5@2 ~@2 f5@3 eb5 d5@3 ~@11]/2", K: "f4@4 ~@10 d5 ~", L: "f5@11 eb5 d5@3 c5",
  M: "bb4@4 ~@2 d5@2 ~@2 eb5@3 d5 c5 ~", N: "bb4@5 ~@5 d5@2 ~@2 g4@2",
  O: "[bb4@5 ~ bb4 c5 d5@4 c5 ~ c5 bb4@6 ~@9 f5 ~]/2", P: "f5@4 ~@6 d5@2 ~ eb5 f5@2", Q: "f5 ~ d5@3 ~@9 d5 ~",
  R: "[eb5@4 ~@2 d5 ~ eb5@3 ~ d5 ~@2 bb4@8 ~@6 d5 f5 ~, ~@7 c5 ~@8]/2", S: "f5@3 eb5 d5@4 ~@6 [d5,f5] ~",
  T: "f5@3 eb5 d5@3 ~@7 d5@2", U: "eb5 ~ eb5@3 ~ d5 ~ eb5@3 d5 eb5@3 d5", V: "c5 bb4@7 ~@2 d5@2 ~@2 g4@2",
  W: "f4@3 ~@11 d5 ~", X: "bb4@4 ~@2 d5@2 ~@2 eb5@4 d5 c5",
  Y: "[bb4@5 ~ bb4 c5 d5@4 c5 ~@2 bb4@4 ~@3 d5@2 ~@2 g4@2 ~@3 f4@6 ~@11, ~@7 c5 ~@7 g4 ~@8]/3",
  Z: "f5@4 ~@2 d5@2 eb5 ~ f5@2 ~@2 f5@2", AA: "~@2 eb5 d5@5 ~@6 bb4@2",
  AB: "[~@6 d5@2 eb5 ~ eb5@2 ~@2 bb4 bb4@3 ~@12 d5 ~]/2", AC: "f5@3 eb5 d5@4 ~@2 d5!2 eb5 ~ f5 ~",
  AD: "f5@3 eb5 d5@5 ~@5 d5@2", AE: "eb5!2 ~@4 d5@2 eb5@2 ~ eb5@2 ~ d5 ~", AF: "c5 bb4@6 ~@2 bb4 d5@2 ~ g4@2 ~",
  AG: "bb4@5 ~ d5@2 ~@2 eb5@3 ~ d5 c5", AH: "bb4@5 ~ g5@2 ~@2 f5@2 ~@2 f5@2", AI: "~@10 d5@2 eb5 ~ f5 ~",
  AJ: "f5@3 eb5 d5@4 ~ d5 d5@2 eb5 ~ f5 ~", AK: "f5@3 eb5 d5@5 ~ eb5!2 ~@2 f5@2",
  AL: "~@2 f5@2 ~@2 f5@2 ~@2 f5@2 ~@2 f5 ~", AM: "g5@3 f5 d5@4 ~@2 d5!2 eb5 ~ f5 ~",
  AN: "f5@4 eb5@3 ~@3 d5!2 eb5 ~ f5 ~", AO: "f5 eb5@3 ~ g5@2 eb5", AP: "~@2 g5@4 eb5@3 ~ eb5@2 ~@2 [eb5,bb5] ~",
  AQ: "[f5,bb5]@3 [eb5,g5] [d5,f5]@5 ~ [f5,bb5]@2 ~@2 [f5,bb5] ~", // Bb5 Eb Dm Bb5
  AR: "[f5,bb5]@2 g5@6 ~@2 d5@2 eb5 ~ f5 ~, ~ eb5@2 ~@5", AS: "f5@3 eb5 d5@3 ~@3 [eb5,bb5]@2 ~@2 [f5,bb5]@2",
  AT: "~@2 [f5,bb5]@2 ~@2 [f5,bb5]@2 ~@2 [f5,bb5] ~ [f5,bb5] ~ [g5,c6]@2", AU: "~ [f5,bb5] [d5,f5]@6 ~@8",
  AV: "[eb5!2 ~@4 d5@2 eb5@2 ~ eb5@2 d5 ~ c5@2 bb4@3 ~@6 d5@2 ~@2 g4@2]/2", AW: "f5@10 ~ eb5 d5@3 c5",
  AX: "[bb4@4 ~@2 d5@2 ~@2 eb5@3 ~ d5 ~ bb4@5 ~@5 d5@2 ~@2 g4@2, ~@15 c5@2 ~@15]/2",
  AY: "[bb4@4 ~@2 bb4 c5 d5@4 c5 ~ c5 bb4@7 ~@10]/2",
})).s("gm_piano").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  ~@20 A B A B A B A B A B A ~ A B A B A B A B A B A B A B A B A B A B A B A ~ A B A B A B A B A B A B A B A B ~@4 A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2",
})).gain(0.8)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@20 A@11 ~ A@23 ~ A@16 ~@4 A@36 ~@8 A@16 ~@8 A@16 B@8 A@16 ~>".pickRestart({
  A: "~@7 x ~@8", B: "x ~@6 x!2 ~@7",
})).gain(0.24)

// drums · clap
const clap = s("cp").struct("<~@32 [~ x ~ x]!80 ~@8 [~ x ~ x]!64 ~>").gain(0.72)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@32 [~@7 x ~@8]!80 ~@8 [~@7 x ~@8]!64 ~>").gain(0.16)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@20
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!116
  ~@8
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!16
  ~@8
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!16
  ~
>`).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct("<~@20 [~ x ~ x ~ x ~ x]!116 ~@8 [~ x ~ x ~ x ~ x]!16 ~@8 [~ x ~ x ~ x ~ x]!16 ~>")
  .gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@20 A B A B A B A B A B A ~ A B A B A B A B A B A B A B A B A B A B A B A ~ A B A B A B A B A B A B A B A B ~@4 A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2",
})).gain(0.56)

// drums · crash
const crash = s("cr").struct(`<
  ~@20 A ~@3 A ~@7 A ~@23 A ~@19 A ~@43 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~@8
>`.pickRestart({
  A: "x",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@16
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!96
  ~@8
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!16
  ~@8
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!40
  ~
>`).gain(0.4)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@16
  [~ x ~@3 x ~@3 x ~@3 x ~@2]!96
  ~@8
  [~ x ~@3 x ~@3 x ~@3 x ~@2]!16
  ~@8
  [~ x ~@3 x ~@3 x ~@3 x ~@2]!40
// … 29 more lines

More by Double You