Strudelify

Don't Give It Up

Bryan Adams

KeyC minorTempo131 bpm
0:00/0:00
// Don't Give It Up — Bryan Adams
// 131 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 11 string ensemble 1 (copy of ch 9 string ensemble 1, 0.25 beats late)
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(131/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
const bass = note(`<
  ~@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@16 C@2 D E C@2 D E C@2 D E C@2 D@2 ~@4 A@2 B@2 A@2 B@2
  A@2 B@2 ~@16 C@2 D E C@2 D E C@2 D E C@2 D@2 C@2 D E C@2 D E ~@2
>`.pickRestart({
  A: "~ ab1 ~@2 ab1 ~@2 ab1@2 ~ ab1 ~@2 ab1 ~@2", B: "~ bb1 ~@2 bb1 ~@2 c2@2 ~ c2 ~@2 c2 ~@2",
  C: "~@2 ab1@3 ~ ab1@3 ~ ab1@3 ~ ab1@2", D: "~@2 c2@3 ~ c2@3 ~ c2@3 ~ c2@2", E: "~@2 eb2@3 ~ eb2@3 ~ eb2@3 ~ eb2@2",
})).s("gm_fretless_bass").gain(0.57)

// other · rock organ
const rock_organ = note("<~@6 A@24 ~@25 B C D E F G ~@5 A@12 ~@33 B C D E F G ~@3>".pickRestart({
  A: "[eb2,bb2]@2 ~ [f2,c3]@2 ~@3", B: "g4!2 eb4 bb4!13", C: "c5!2 bb4 c5 bb4!11 c5", D: "g4!16",
  E: "bb4!4 c5 ~ bb4 ~ bb4 ~ ab4 ~ ab4 ~@3", F: "eb4!2 bb3 c4 eb4!2 bb3 c4 eb4!8", G: "eb4!16",
})).s("gm_rock_organ").gain(0.16)

// other · piano
const piano = note("<~@59 A@2 ~@22 A@2 ~@22 A@2 ~@6 A@2 ~@3>".pickRestart({
  A: "[~@6 bb4 bb5@2 ~@7]/2",
})).s("gm_piano").gain(0.22)

// other · distortion guitar · ""Behind the Sun""
const distortion_guitar = note("<~@6 A@24 ~@2 A@14 ~@8 B C ~@10 A@12 ~@2 A@14 ~@8 B C ~@6 B C ~@8>".pickRestart({
  A: "f2 ~ c3 ~ c3 ~@3 f2 ~ c3 ~ c3 ~@3", B: "eb5 ~@2 d5 ~@2 c5 ~", C: "~ bb4 ~@6",
})).s("gm_distortion_guitar").gain(0.17).pan(0.6)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@13 A@8 B ~@3 C@2 D@2 ~@9 E@5 ~@3 E@5 F@2 G@6 ~@6 H@5 I@4 ~@12 E@5 ~@3 E@5 F@2 J@6 ~@3 K@3 ~@7
>`.pickRestart({
  A: "[~@15 g3@2 eb4@2 eb4@2 d4@2 c4@2 c4 ~ g3@2 ~@2 g3@2 f3@2 ~@4 c3@2 f3@2 f3@2 g3@2 g3@2 f3@2 ~@4 c3@2 eb3@2 f3@2 g3@2 g3@2 ~@2 f3@2 ~@10 eb4@2 eb4@2 eb4@2 d4@2 c4@2 c4 ~ g3@2 ~@2 g3@2 f3@2 ~@4 c3@2 f3@2 f3@2 g3@2 g3@2 f3@2 ~@4 c3@2 eb3@2 f3@2 g3@2 f3]/8",
  B: "~@3 c3@2 ~@2 c3@2 ~@2 c3@2 ~@3", C: "[~@15 eb4@2 d4@2 eb4@2 f4@2 ~ f4@2 ~@6]/2",
  D: "[~@15 eb4@2 d4@2 eb4@2 g4@2 ~ g4@2 ~@6]/2",
  E: "[~ g4@8 eb4@6 g3@2 ~@4 g3@2 g4@4 f4@2 ~@2 f4@2 eb4@2 ~@8 c4@2 c4@2 bb4@4 ab4@4 g4@4 f4@2 eb4@2 f4@2 eb4@2 ~@13]/5",
  F: "[~@11 eb4@4 f4@4 ~@13]/2",
  G: "[~@15 c4@2 g4@8 eb4@6 g3@2 ~@4 g3@2 g4@4 f4@2 ~@2 f4@2 eb4@2 ~@8 c4@2 c4@2 bb4@4 ab4@4 g4@4 f4@2 eb4@2 f4@2 eb4@2 ~@13]/6",
  H: "[~@15 g3@2 eb4@2 eb4@2 d4@2 c4@2 c4 ~ g3@2 ~@2 g3@2 f3@2 ~@4 c3@2 f3@2 f3@2 g3@2 g3@2 f3@2 ~@4 c3@2 eb3@2 f3@2 g3@2 g3@2 ~@2 f3@2 ~@11]/5",
  I: "[~ eb4@2 eb4@2 d4@2 c4@2 c4 ~ g3@2 ~@2 g3@2 f3@2 ~@4 c3@2 f3@2 f3@2 g3@2 g3@2 f3@2 ~@4 c3@2 eb3@2 f3@2 g3@2 f3@2 ~@2 c3@2 ~@2 c3@2 ~@2 c3@2 ~@3]/4",
  J: "[~@15 c4@2 g4@8 eb4@6 g3@2 ~@4 g3@2 g4@4 f4@2 ~@2 f4@2 eb4@2 ~@8 bb4@2 g4@2 bb4@2 ~@2 bb4@2 ~@2 bb4@4 g4@2 f4@2 g4@2 f4@2 eb4@2 ~@11]/6",
  K: "[~ g4@24 f4@6 bb4@2 g4@4 ~@11]/3",
})).s("gm_string_ensemble_1").gain(0.18).pan(0.7)

// other · pizzicato strings
const pizzicato_strings = note(`<
  ~@30 A B C D E B C B@3 C D E B C B@3 C D E B C B@3 C D E B C B F ~@15 A B C D E B C B@3 C D E B C B@3 C D E B C B@3 C
  D E B C B@3 C D E B C B F ~
>`.pickRestart({
  A: "~@8 c4 ~@2 bb3 ~@4", B: "c4 ~@7 c4 ~@2 bb3 ~@4", C: "c4 ~@7 bb3 ~@2 bb3 ~@4", D: "c4 ~@7 f3 g3 ~ ab3 ~ bb3 ~ ab3",
  E: "~ g3 eb3 ~@5 c4 ~@2 bb3 ~@4", F: "c4 ~@15",
})).s("gm_pizzicato_strings").gain(0.22)

// chords · synth bass 2
const synth_bass_2 = note(`<
  ~@30 A B C D E B C F B@2 C D E B C F B@2 C D E B C F B@2 C D E B C F G ~@15 A B C D E B C F B@2 C D E B C F B@2 C D E
  B C F B@2 C D E B C F B@2 C D E B C F H ~
>`.pickRestart({
  A: "~@6 ab1@2 [c4,eb4] ab1@2 [bb3,d4] ~@2 ab1@2", B: "[c4,eb4] ~@5 ab1@2 [c4,eb4] ab1@2 [bb3,d4] ~@2 ab1@2",
  C: "[c4,eb4] ~@5 c2@2 [bb3,eb4] c2@2 [bb3,d4] ~@2 c2@2", // Cm Eb5 Bb
  D: "[c4,eb4] ~@5 c2@2 f4 c2@2 ab4 ~ bb4 ~ ab4, ~@9 g4 ~@4 c2@2", // Cm
  E: "~ g4 eb4 ~@3 ab1@2 [c4,eb4] ab1@2 [bb3,d4] ~@2 ab1@2", F: "[c4,eb4] ~@5 eb2@2 [c4,eb4] eb2@2 [bb3,d4] ~@2 eb2@2",
  G: "[c4,eb4] ~@5 ab1@2 ~ ab1@2 ~@3 ab1@2", H: "[c4,eb4] ~@15",
})).s("gm_synth_bass_2").gain(0.29)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@34
  [~@2 eb5@2 eb5 ~@2 eb5 ~@2 eb5@2 eb5 ~@3]!28
  ~@20
  [~@2 eb5@2 eb5 ~@2 eb5 ~@2 eb5@2 eb5 ~@3]!28
  ~@10
>`).s("gm_acoustic_guitar_nylon").gain(0.19)

// other · rock organ
const rock_organ_2 = note("<~@62 A B C D E F D E F D E F D E F G ~@42>".pickRestart({
  A: "~@2 ab3 ~@2 bb3 c4 ~ bb3 c4 ab3 c4 ~@2 bb3 c4", B: "~ bb3 c4 ~ bb3 c4 ab3 bb3 c4 ~ bb3 c4 ~ bb3 c4 ~",
  C: "bb3 c4 ab3 bb3 c4 ~ bb3 c4 ~ bb3 c4 ~ bb3 c4 ab3 bb3", D: "c4 ~ bb3 c4 ~ bb3 c4 ~ bb3 c4 ~ bb3 c4 ~ bb3 c4",
  E: "~ bb3 c4 ~ bb3 c4 ~ bb3 c4 ~ bb3 c4 ~ bb3 c4 ~", F: "bb3 c4 ~ bb3 c4 ~ bb3 c4 ~ bb3 c4 ~ bb3 c4 ~ bb3",
  G: "c4 ~ bb3 c4 ~ bb3 c4 ~ bb3 c4 ~ bb3 c4 ~ bb3 ~",
})).s("gm_rock_organ").gain(0.18)

// other · string ensemble 1
const string_ensemble_1_2 = note("<~@40 A B@5 ~@16 C@2 D@2 ~@8 E@2 F@2 ~@10 A B@5 ~@26>".pickRestart({
  A: "eb3", B: "[~ b3@5 ~ g4@6 ~ eb5@5 ~]/5", C: "[~@15 c3@15 ~@2]/2", D: "[~@2 ab3@19 ~@11]/2",
  E: "[~@15 g3@15 ~@2]/2", F: "[~@2 eb4@19 ~@11]/2",
})).s("gm_string_ensemble_1").gain(0.12)

// other · string ensemble 1
const string_ensemble_1_3 = note("<~@40 A@2 B@3 C@2 ~@16 D@2 E@2 ~@8 F@2 G ~@10 A@2 B@3 C@2 ~@25>".pickRestart({
  A: "[~@2 g3@5 ~]/2", B: "[~ eb4@5 ~ b4@5]/3", C: "[~ g5@5 ~@2]/2", D: "[~@7 e3@19 ~@6]/2", E: "[~ c4@19 ~@12]/2",
  F: "[~@7 b3@19 ~@6]/2", G: "~ g4@15",
})).s("gm_string_ensemble_1").gain(0.12)

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

// drums · snare
const snare = s("sd").struct("<~@24 A@6 ~@9 B A@6 ~@26 A@6 ~@9 B A@6 ~@15 C ~@10>".pickRestart({
  A: "x!16", B: "~@12 x!4", C: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
})).gain(0.11)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@38 A B ~@46 A B ~@21 C ~@10>".pickRestart({
  A: "x!16", B: "x!12 ~@4", C: "x!8",
})).gain(0.06)

// drums · clap
const clap = s("cp").struct("<~@13 A B@15 C ~@2 B@30 ~@3 D B@7 C B@4 ~@2 B@38 ~@2>".pickRestart({
  A: "~@7 x ~@2 x ~@3 x ~", B: "~ x ~ x", C: "~@4 x ~@2 x ~ x ~@2 x ~@3", D: "~@5 x!3",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~@6 [x!8]!24 ~@32 [~ x ~ x ~ x ~ x]!4 [x!8]!12 ~@42>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@22 A@8 ~@16 A@16 ~@5 B C A@9 ~@16 A@24 ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~@6", C: "~ x ~@3 x ~@2",
})).gain(0.34)

// drums · tambourine
const tambourine = s("tb").struct("<~@6 A@24 ~@16 B@16 ~@4 A@12 ~@16 B@24 ~@2>".pickRestart({
  A: "x!16", B: "x!2",
})).gain(0.17)

// drums · crash
const crash = s("cr").struct(`<
  ~@6 A ~@3 A ~@3 A ~@3 A ~@2 B A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3 A ~@7 A ~@3 A ~@7 A ~@6 B A ~@7 A ~@7 A ~@7 A
  ~
>`.pickRestart({
  A: "x", B: "~@2 x!2",
})).gain(0.45)

// drums · guiro
const guiro = s("guiro:0").struct("<~@46 [~ x ~ x ~ x ~ x]!16 ~@32 [~ x ~ x ~ x ~ x]!24 ~@2>").gain(8.4)

stack(
  bass, rock_organ, piano, distortion_guitar, string_ensemble_1, pizzicato_strings, synth_bass_2, acoustic_guitar_nylon,
  rock_organ_2, string_ensemble_1_2, string_ensemble_1_3, kick, snare, snare_soft, clap, hihat, open_hat, tambourine,
  crash, guiro
)

More by Bryan Adams