Strudelify

Here I Am (End Title)

Bryan Adams

KeyE♭ majorTempo125 bpm
0:00/0:00
// Here I Am (End Title) — Bryan Adams
// 125 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 1 "Here I Am" overdriven guitar (copy of ch 4 dulcimer)
// note: Full arrangement: all 11 bars on a 32-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): guitar program 29.
setcpm(125/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · overdriven guitar
const overdriven_guitar = note("<~@7 [~@18 c5@5 g4@6 ~@3] [~@17 eb5@5 ~@10] ~@2>").s("gm_overdriven_guitar").gain(0.33)

// bass · electric bass finger
const bass = note("<A@3 B@2 C@5 ~>".pickRestart({
  A: "[~@15 ab2@20 ~@5 eb2@13 ~@3 bb2@14 ~@6 eb2@2 c2@2 ~ c2@3 ~@2 c2@10]/3", B: "[ab2@25 eb2@15 bb2@15 g2@8 ~]/2",
  C: "[~@2 c2@15 ab2@24 ~ eb2@15 bb2@22 ~@3 f2@39 ~@2 ab2@33 ~@4]/5",
})).s("gm_electric_bass_finger").gain(0.5)

// other · distortion guitar
const distortion_guitar = note("<A@3 B@2 C@6>".pickRestart({
  A: "[c2@15 ab2@25 eb2@15 ~ bb2@25 c2@15]/3", B: "[ab2@25 eb2@15 bb2@24]/2",
  C: "[~@2 c2@15 ab2@25 eb2@15 bb2@25 f2@40 ~ ab2@40 ~@29]/6",
})).s("gm_distortion_guitar").gain(0.33)

// other · electric guitar clean
const electric_guitar_clean = note("<A B C D E F G H I@2 ~>".pickRestart({
  A: "~@10 c3 ~@2 c3 ~ c3 ~@2 c3 ~@11 ab2 ~", B: "~ ab2 ~ ab2 ~@2 ab2@2 ~@10 eb3 ~@2 eb3 ~@2 eb3 ~ eb3@2 ~@4",
  C: "~@7 bb2 ~ bb2 ~@2 bb2 ~ bb2 ~@12 c3 ~ c3 ~@2", D: "c3 ~ c3 ~@12 ab2 ~@2 ab2 ~ ab2 ~@2 ab2@2 ~@7",
  E: "~@3 eb3 ~@2 eb3 ~ eb3 ~@2 eb3@2 ~@10 bb2 ~@2 bb2 ~@2 bb2 ~ bb2", F: "~@12 c3 ~ c3 ~@2 c3 ~ c3 ~@12",
  G: "ab2 ~ ab2 ~@2 ab2 ~ ab2@2 ~@11 eb3 ~@2 eb3 ~ eb3 ~@2 eb3@2 ~@2",
  H: "~@8 bb2 ~@2 bb2 ~ bb2 ~@2 bb2 ~@11 f2 ~@2 f2",
  I: "[~@2 f2 ~ f2 ~@7 f2 ~@4 f2 ~ f2 ~@2 f2 ~ f2 ~@2 ab2@27 ~@10]/2",
})).s("gm_electric_guitar_clean").gain(0.33)

// other · pad warm
const pad_warm = note("<A@3 B@2 C@6>".pickRestart({
  A: "[g3@15 ab3@25 g3@15 ~ f3@25 g3@15]/3", B: "[ab3@25 g3@15 f3@24]/2",
  C: "[~@2 g3@15 ab3@25 g3@15 f3@25 f3@40 ~ ab3@40 ~@29]/6",
})).s("gm_pad_warm").gain(0.33)

// other · pad warm
const pad_warm_2 = note("<A@3 B@2 C@6>".pickRestart({
  A: "[c4@15 c4@25 bb3@15 ~ bb3@25 c4@15]/3", B: "[c4@25 bb3@15 bb3@24]/2",
  C: "[~@2 c4@15 c4@25 bb3@15 bb3@25 ab3@40 ~ c4@40 ~@29]/6",
})).s("gm_pad_warm").gain(0.33)

// other · pad warm
const pad_warm_3 = note("<A@3 B@2 C@6>".pickRestart({
  A: "[eb4@15 eb4@25 eb4@15 ~ d4@25 eb4@15]/3", B: "[eb4@25 eb4@15 d4@24]/2",
  C: "[~@2 eb4@15 eb4@25 eb4@15 d4@25 c4@40 ~ eb4@40 ~@29]/6",
})).s("gm_pad_warm").gain(0.33)

// other · guitar harmonics
const guitar_harmonics = note("<~@7 A B@2 ~>".pickRestart({
  A: "~@18 c4@5 g3@6 ~@3", B: "[~@2 eb4@10 c4@6 ~@4 g4@37 ~@5]/2",
})).s("gm_guitar_harmonics").gain(0.24)

// other · guitar harmonics
const guitar_harmonics_2 = note("<~@7 [~@7 c4] [~@17 eb4@5 ~@10] ~@2>").s("gm_guitar_harmonics").gain(0.24)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~ A B C D ~ E F G ~@2>".pickRestart({
  A: "~@3 x ~@12", B: "~@15 x ~@16", C: "~@23 x ~@8", D: "~@31 x", E: "~ x ~@2", F: "~ x", G: "~@25 x ~@6",
})).gain(0.25)

// drums · rim
const rim = s("rim").struct("<A B C D E F G H I ~@2>".pickRestart({
  A: "~@5 x ~@9 x", B: "~@9 x ~@6", C: "~@7 x ~@19 x ~@4", D: "~@15 x ~@16", E: "~@3 x ~@19 x ~@8", F: "~@3 x ~@4",
  G: "x ~@4 x ~@2", H: "~@2 x ~@4 x", I: "~@17 x ~@14",
})).gain(0.5)

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

// drums · hihat
const hihat = s("hh").struct("<A B C A D C A E F ~@2>".pickRestart({
  A: "x ~@4 x ~@4 x ~@4 x ~@4 x ~@4 x ~@4 x ~", B: "~@3 x ~@4 x ~@4 x ~@4 x ~@5 x ~@4 x ~@2",
  C: "~@2 x ~@4 x ~@4 x ~@4 x ~@4 x ~@4 x ~@4", D: "~@3 x ~@4 x ~@4 x ~@4 x ~@4 x ~@5 x ~@2",
  E: "~@3 x ~@4 x ~@4 x ~@4 x ~@4 x ~@4 x ~@3", F: "~@2 x ~@4 x ~@4 x ~@4 x ~@4 x ~@9",
})).gain(0.45)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<A B C A D E A D F ~@2>".pickRestart({
  A: "~@3 x ~@4 x ~@4 x ~@4 x ~@4 x ~@4 x ~@3", B: "~ x ~@4 x ~@4 x ~@4 x ~@4 x ~@4 x ~@5",
  C: "x ~@4 x ~@4 x ~@4 x ~@4 x ~@4 x ~@4 x ~", D: "~ x ~@4 x ~@4 x ~@4 x ~@4 x ~@4 x ~@4 x",
  E: "~@5 x ~@4 x ~@4 x ~@4 x ~@4 x ~@4 x ~", F: "~@4 x ~@5 x ~@4 x ~@4 x ~@4 x ~@6",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 [~@27 x ~@4] ~@2>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<x ~@4 [~ x ~@14] ~@2 [~@27 x ~@4] ~@2>").gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<A B C D E F G H I ~@2>".pickRestart({
  A: "~@5 x ~@9 x ~@4 x ~@4 x ~@6", B: "~@3 x ~@4 x ~@4 x ~@10 x ~@4 x ~@2", C: "~@2 x ~@9 x ~@4 x ~@4 x ~@9",
  D: "x ~@4 x ~@4 x ~@9 x ~@4 x ~@4 x ~", E: "~@8 x ~@4 x ~@4 x ~@10 x ~@2", F: "~@7 x ~@9 x ~@4 x ~@4 x ~@4",
  G: "~@5 x ~@4 x ~@4 x ~@9 x ~@4 x ~", H: "~@3 x ~@9 x ~@4 x ~@4 x ~@8", I: "~@2 x ~@4 x ~@4 x ~@9 x ~@9",
})).gain(0.5)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<A B C D E F G H I ~@2>".pickRestart({
  A: "~@4 x ~@4 x ~@4 x ~", B: "~@8 x ~@4 x ~@2", C: "~@5 x ~@19 x ~@6", D: "~@3 x ~@9 x ~@18",
  E: "~ x ~@9 x ~@9 x ~@10", F: "~@5 x ~@4 x ~@4 x", G: "~@9 x ~@4 x ~", H: "~@3 x ~@9 x ~@2", I: "~@4 x ~@10 x ~@16",
})).gain(0.3)

stack(
  overdriven_guitar, bass, distortion_guitar, electric_guitar_clean, pad_warm, pad_warm_2, pad_warm_3, guitar_harmonics,
  guitar_harmonics_2, kick, kick_soft, rim, snare, hihat, hihat_soft, mid_tom, crash, tambourine, tambourine_soft
)

More by Bryan Adams