Strudelify

This Time

Bryan Adams

KeyA majorTempo126 bpm
0:00/0:00
// This Time — Bryan Adams
// 126 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 81 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): guitar program 25, guitar program 30.
setcpm(126/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 · overdriven guitar
const overdriven_guitar = note(`<
  ~ A@2 B@2 A@2 C@2 D E F G H E F G H I J K@2 L@2 M@8 A@2 B@2 A@2 C@2 D E F G H E F G H I J K@2 L@2 M@16 A@2 B@2 A@2 C@2
  D N
>`.pickRestart({
  A: "[[e3,e4] [c#3,c#4] [e3,e4] [f#3,f#4]@2 [a3,a4]@2 [b3,b4]@5 [d4,d5] [c#4,c#5] [a3,a4] [b3,b4]]/2", // E C# E F# A B D C# …
  B: "[[a3,a4] [e3,e4] [c#3,c#4] [f#3,f#4]@2 [a3,a4]@2 [b3,b4]@3 [b3,b4] [a3,a4] [c#4,c#5]@2 [b3,b4] [a3,a4]]/2", // A E C# F# A B A C# …
  C: "[[a3,a4] [e3,e4] [c#3,c#4] [f#3,f#4]@2 [a3,a4]@2 [b3,b4]@6 [a3,a4] [c#4,c#5]@2]/2", D: "[b3,b4]",
  E: "[a2,d3,a3,d4,f#4]", F: "[a2,e3,a3,c#4]", G: "c#3 f#3 a3 e4@5", H: "b2 e3 g#3 e4@5",
  I: "[d3,a3,d4,f#4]@2 ~ [d3,a3,d4,f#4] [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2", // D
  J: "[c#3,e3,a3,c#4]@2 ~ [c#3,e3,a3,c#4] [c#3,e3,a3,c#4]@2 [c#3,e3,a3,c#4]@2", // A
  K: "[b2,f#3,b3,d4]@2 ~ [b2,f#3,b3,d4] [b2,f#3,b3,d4]@2 [b2,f#3,b3,d4]@2", // Bm
  L: "[e2 e3 g#3 e4@2 b3 g#3 [a3,e4]@2 b3 a3 e3 e4 b3 g#3 e3]/2", // A5
  M: "[[a2,e3,a3]@3 [d3,a3,d4]@2 [d3,a3,d4]!2 [g2,d3,g3,b3]@2 [g2,d3,g3,b3]!3 [e2,b2,e3,b3]@2 [e2,b2,e3,b3]@2]/2", // A5 D5 G E5
  N: "[a3,a4]", // A
})).s("gm_overdriven_guitar").gain(0.4).pan(0)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<~ A B C B A B C D E ~@22 A B C B A B C D E ~@30 A B C B A B C D E F>".pickRestart({
  A: "[a2,a3]@3 [d3,a3,d4]@3 ~@2", B: "[g2,d3,g3,b3]@3 ~ [b2,e3,b3,e4]@3 ~", C: "e3@3 [d3,a3,d4]@3 ~@2",
  D: "[g2,b2,d3,g3]", E: "[e3,e4]", F: "[e3,c#4,e4] ~@3",
})).s("gm_acoustic_guitar_steel").gain(0.4).pan(1)

// bass · electric bass finger
const bass = note(`<
  ~ A@6 B@2 C D@2 E F D@2 E F G H I@2 J@2 K@2 A@2 K@2 A@8 B@2 C D@2 E F D@2 E F G H I@2 J@2 K@2 A@2 K@2 A@2 K@2 A@2 K@2
  A@8 B@2 C L
>`.pickRestart({
  A: "[a1 f#1 a1 d2@2 d2@2 g1@5 e1@4]/2", B: "[a1 f#1 a1 d2@2 d2@2 g1@9]/2", C: "e1", D: "a1@3 a1 a1@4",
  E: "c#2@3 c#2 c#2@4", F: "b1@3 b1 b1@4", G: "d2!8", H: "c#2!8", I: "b1!8", J: "e1!8",
  K: "[a1 f#1 a1 d2@2 d2@2 g1@5 e1@2 e1@2]/2", L: "a1",
})).s("gm_electric_bass_finger").gain(0.57).pan(0.4)

// chords · drawbar organ
const drawbar_organ = note(`<
  ~ A B A B A B A C D E F G H E F G H I J K@2 L M A B A B A B A B A B A B A B A C D E F G H E F G H I J K@2 L M A B A B
  A B A B A B A B A B A B A B A B A B A C D N
>`.pickRestart({
  A: "[a3,e4,a4]@3 [d4,a4,d5]@5", B: "[g3,d4,g4,b4] [b3,e4,b4,e5]", C: "[g3,b3,d4,g4]", D: "[b3,e4,b4,e5]",
  E: "[a3,d4,a4,d5,f#5]", F: "[a3,e4,a4,c#5]", G: "[c#4,f#4,a4]", H: "[b3,e4,g#4,b4]", I: "[d4,f#4,a4,d6]",
  J: "[c#4,e4,a4,c#5,a5]", K: "[b3,d4,f#4,b4,b5]", L: "[e3,b3,e4,g#4,e5]", M: "[e3,b3,e4,a4,e5] [e3,b3,e4,g#4,e5]",
  N: "[a3,e4,a4]", // A5
})).s("gm_drawbar_organ").gain(0.4).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~ A@8 ~ B@12 C@2 A@16 ~ B@12 C@2 A@24 ~ D>".pickRestart({
  A: "x ~@2 x ~@4", B: "x ~@2 x!2 ~@3", C: "x!8", D: "x",
})).gain(0.4)

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

// drums · low tom
const low_tom = s("lt").struct("<~@17 [~@12 x!3 ~] ~@30 [~@12 x!3 ~] ~@32>").gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~@18 [x!8]!6 ~@25 [x!8]!6 ~@26>").gain(0.4)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@10 A@3 ~ A@4 ~@23 A@3 ~ A@4 ~@32>".pickRestart({
  A: "x!4",
})).gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct("<~@9 A ~@3 A ~@3 A ~@22 A ~@3 A ~@3 A ~@30 A ~>".pickRestart({
  A: "x!2 ~ x!2 ~ x ~",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<[~@11 x ~@4] ~@80>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@10 x!9 ~@22 x!9 ~@30 x>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~ [x!4]!8 ~@15 [x!4]!16 ~@15 [x!4]!24 ~@2>").gain(0.4)

// drums · cowbell
const cowbell = s("cb").struct("<~ [x!4]!8 ~@15 [x!4]!16 ~@15 [x!4]!24 ~@2>").gain(0.4)

stack(
  overdriven_guitar, acoustic_guitar_steel, bass, drawbar_organ, kick, snare, low_tom, hihat, hihat_soft, mid_tom,
  open_hat, crash, ride, cowbell
)

More by Bryan Adams