Strudelify
The seventh Son cover art

All the Best

The seventh Son

Johnny Rivers

KeyB♭ majorTempo155 bpm
0:00/0:00
// The seventh Son — Johnny Rivers
// 155 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 4 "Rhythm 1 (Piano)" piano (copy of ch 3 "Bass 2" electric bass pick, 0.079 beats late); ch 7 "Lead b" distortion guitar (copy of ch 6 "Lead 1" clavinet, 0.073 beats late)
// 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): Lead c.
setcpm(155/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 · "Bass 1"
const bass = note(`<
  A@4 B@3 C D E F G H I J@2 K@7 L E@2 M G H I N O K@7 L E@2 M G H I N O K@7 L E@2 M G H I J@2 K@7 L E P Q ~@6
>`.pickRestart({
  A: "bb1@2 bb1 eb2 f2 ab2!3", B: "bb1 ~@3", C: "bb0@2 ~@3 bb0 c1 d1", D: "eb1!2 bb1 db2", E: "eb2!2 bb1 db2",
  F: "bb2!2 f2 ab2", G: "bb1!2 f1 bb1", H: "f2!2 c2 f2", I: "eb2!2 bb1 eb2", J: "[bb1@2 f1@2 g1 a1@2 bb1@2 f1!5 ~@2]/2",
  K: "bb1@2 ~@3 f2@3", L: "bb1@2 ~@3 bb1 c2 d2", M: "bb1!2 f1 ab1", N: "bb1@2 f1@2 g1 a1@2 bb1", O: "bb1 f1!5 ~@2",
  P: "eb2!2 bb1 ~", Q: "bb1!2 f1 ~",
})).s("gm_fretless_bass").gain(0.5)

// bass · fretless bass · "Bass 1" · soft notes
const bass_soft = note("<~@73 A B C D E F@2 ~>".pickRestart({
  A: "~@3 db2", B: "~@3 ab1", C: "bb1!2 f1 bb1", D: "f2!2 c2 f2", E: "eb2!2 bb1 eb2",
  F: "[bb1@2 f1@2 g1 a1@2 bb1@2 f1!5 ~@2]/2",
})).s("gm_fretless_bass").gain(0.19)

// bass · electric bass pick · "Bass 2"
const bass_2 = note(`<
  A@4 B@3 C D E F G H I J@2 K@7 L E@2 M G H I N O K@7 L E@2 M G H I N O K@7 L E@2 M G H I J@2 K@7 L E@2 P ~@6
>`.pickRestart({
  A: "bb2@2 bb2 eb3 f3 ab3!3", B: "bb2 ~@3", C: "bb1@2 ~@3 bb1 c2 d2", D: "eb2!2 bb2 db3", E: "eb3!2 bb2 db3",
  F: "bb3!2 f3 ab3", G: "bb2!2 f2 bb2", H: "f3!2 c3 f3", I: "eb3!2 bb2 eb3", J: "[bb2@2 f2@2 g2 a2@2 bb2@2 f2!5 ~@2]/2",
  K: "bb2@2 ~@3 f3@3", L: "bb2@2 ~@3 bb2 c3 d3", M: "bb2!2 f2 ab2", N: "bb2@2 f2@2 g2 a2@2 bb2", O: "bb2 f2!5 ~@2",
  P: "bb2 ~ f2 ~",
})).s("gm_electric_bass_pick").gain(0.5)

// bass · electric bass pick · "Bass 2" · soft notes
const bass_soft_2 = note("<~@74 A B C D E@2 ~>".pickRestart({
  A: "~ bb2 ~ ab2", B: "bb2!2 f2 bb2", C: "f3!2 c3 f3", D: "eb3!2 bb2 eb3", E: "[bb2@2 f2@2 g2 a2@2 bb2@2 f2!5 ~@2]/2",
})).s("gm_electric_bass_pick").gain(0.19)

// chords · piano · "Rhythm 2 (Piano)"
const piano = note(`<
  A@4 B@2 C D E F G H I J K@2 L@3 M L@2 N O E F G H I J P Q L@3 M L@2 N O E F G H I J P Q L@3 M L@2 N O E F G H I J K@2
  L R@2 S R@2 T U E F V W ~@5
>`.pickRestart({
  A: "~ [f4,ab4,bb4] ~ [f4,ab4,bb4]", B: "[d4,bb4,d5] ~@3", C: "[d4,bb4,d5] ~ bb4 db5", D: "ab4 ~@3",
  E: "~@2 [eb5,g5]@2 [eb5,g5]!4", F: "[eb5,g5] [f5,ab5]@2 [eb5,g5]@3 ~@2", G: "~@2 [d5,f5]@2 [d5,f5]!4",
  H: "[d5,f5] [eb5,g5]@2 [d5,f5]@3 ~@2", I: "[c5,eb5]", J: "[bb4,db5]",
  K: "[~@2 [d5,f5]!2 [db5,e5] [c5,eb5]@2 [bb4,d5]@2 f4!5 ~@2]/2", L: "[d4,bb4,d5]@2 ~@3 [eb4,a4,db5]@3",
  M: "[d4,bb4,d5]@2 bb4@2 bb4 [eb4,a4,db5]@3", N: "[d4,bb4,d5]@2 ~@3 [eb4,a4]@3, ~@9 db5@7",
  O: "[d4,bb4,d5]@4 ~@5 eb4@7", P: "~@2 [d5,f5]!2 [db5,e5] [c5,eb5]@2 [bb4,d5]", Q: "[bb4,d5] f4!5 ~@2",
  R: "[bb4,d5]@2 ~@3 [a4,db5]@3", S: "[bb4,d5]@2 bb4@2 bb4 [a4,db5]@3", T: "[bb4,d5]@2 ~@3 a4@3, ~@9 db5@7",
  U: "[bb4,d5] ~@3", V: "~@2 f5@2 [d5,f5] d5!3", W: "f5 ~@7",
})).s("gm_piano").gain(0.5).pan(0.4)

// chords · piano · "Rhythm 2 (Piano)" · soft notes
const piano_soft = note("<~@74 A B C D E@2 ~>".pickRestart({
  A: "~@2 d5@2 ~ f5!3", B: "d5 [eb5,g5]@2 [d5,f5]@3 ~@2", C: "[c5,eb5]", D: "[bb4,db5]",
  E: "[~@2 [d5,f5]!2 [db5,e5] [c5,eb5]@2 [bb4,d5]@2 f4!5 ~@2]/2", // Dm Dbm Cm Bb
})).s("gm_piano").gain(0.12).pan(0.4)

// other · clavinet · "Lead 2"
const clavinet = note("<~@4 A B C D E F G H I J@2 K L M L N O P Q R E F G H I J@2 ~@50>".pickRestart({
  A: "bb4 g4 bb4 g4 bb4 f4 g4 f4", B: "~ bb4@2 g4 bb4 f4 g4 f4", C: "bb4@2 bb4@2 bb3@2 db4 bb3",
  D: "~ db4@2 db4 bb3 g3 db4!2", E: "bb3 ~@3", F: "~@6 f4 db4", G: "f4 d4 ~@6", H: "~@6 ab4 f4",
  I: "ab4@2 ab4!2 f4 eb4 ~ f4", J: "[bb4!2 db4 bb3 ~ db4!2 bb3@3 ~@6]/2", K: "~@6 g4 f4", L: "bb4@2 bb4@2 bb4 f4 g4 f4",
  M: "~ bb4 g4 bb4@2 f4 g4 f4", N: "ab4 bb3!2 ~", O: "~ bb4!2 ab4 bb4@2 ~@2", P: "~ g4 bb4 g4 bb4 f4@3",
  Q: "bb4@2 bb4 g4 bb4 f4 g4 f4", R: "~ ab4!2 d4 bb3@2 db4!2",
})).s("gm_clavinet").gain(0.5)

// other · electric guitar muted · "Lead 2"
const electric_guitar_muted = note(`<
  ~@31 A B C B D E F G H I J K L M N@2 O P Q R S T U V W X Y Z AA AB AC@2 A B C B D E F G H I J K ~@6
>`.pickRestart({
  A: "~@6 g4 f4", B: "bb4@2 bb4@2 bb4 f4 g4 f4", C: "~ bb4 g4 bb4@2 f4 g4 f4", D: "ab4 bb3!2 ~",
  E: "~ bb4!2 ab4 bb4@2 ~@2", F: "~ g4 bb4 g4 bb4 f4@3", G: "bb4@2 bb4 g4 bb4 f4 g4 f4", H: "~ ab4!2 d4 bb3@2 db4!2",
  I: "bb3 ~@3", J: "~@6 f4 db4", K: "f4 d4 ~@6", L: "~@6 ab4 f4", M: "ab4@2 ab4!2 f4 eb4 ~ f4",
  N: "[bb4!2 db4 bb3 ~ db4!2 bb3@3 ~@6]/2", O: "~@12 f4 g4 f4 ab4", P: "bb4@4 c5 bb4@2 ab4 bb4@2 f4@2 g4@2 f4@2",
  Q: "g4 ab4 bb4@2 g4@2 bb4@4 eb4 f4 g4@2 f4 ab4", R: "bb4@3 c5 bb4@3 ab4 bb4@2 eb4 f4 g4@2 f4 g4",
  S: "ab4@4 bb3@4 bb3@4 ~@3 eb4", T: "gb4 ab4 bb4!2 bb4@2 gb4 ab4 bb4!2 bb4@2 ~@4",
  U: "~@2 f4 g4 bb4@2 a4 g4 bb4@2 ab4 f4@5", V: "bb4@4 bb4@2 g4@2 bb4@2 eb4 f4 g4 a4 f4 g4",
  W: "~@2 ab4@2 ab4@2 d4@2 bb3@3 c4 db4@2 db4@2", X: "c4 bb3@3 ~@12", Y: "~@12 eb4 f4 eb4 db4", Z: "eb4 d4 ~@6",
  AA: "~@12 gb4 ab4 f4 g4", AB: "ab4@3 bb4 ab4@2 ab4@2 g4 f4 eb4@2 ~@2 f4@2",
  AC: "[bb4@2 bb4@2 db4 b3 bb3@2 ~ b3 db4@2 db4@2 c4 bb3@5 ~@12]/2",
})).s("gm_electric_guitar_muted").gain(0.5).pan(0.2)

// other · electric guitar muted · "Lead 2" · soft notes
const electric_guitar_muted_2 = note("<~@75 A B C@2 D ~>".pickRestart({
  A: "~@6 ab4 f4", B: "ab4@2 ab4!2 f4 eb4 ~ f4", C: "[bb4!2 db4 bb3 ~ db4!2 bb3@3 ~@6]/2", D: "~@6 g4 f4",
})).s("gm_electric_guitar_muted").gain(0.25).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B@3 C D@7 E B F@2 G H@11 C B F@2 G H@11 C B F@2 G H@11 I J K L M N H@11 ~
>`.pickRestart({
  A: "x ~@3 x ~ x ~@3 x ~@4 x", B: "x", C: "x!2 ~@2 x!3 ~ x!4 ~@4", D: "x!4", E: "x!6 ~@2", F: "x ~@4 x!3",
  G: "x ~ x ~ x!4", H: "x!2", I: "~ x!3 ~ x ~@2", J: "x ~@2 x!2 ~ x ~@9", K: "x!7 ~@3 x ~ x!2 ~@2", L: "x!2 ~ x!5 ~@8",
  M: "x!6 ~@2 x!3 ~ x!3 ~", N: "x!5 ~@3",
})).gain(0.44)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B@3 C D@7 E F G H@2 I@11 J F G H@2 I@11 J F G H@2 I@11 K L M N O P I@10 E ~
>`.pickRestart({
  A: "x ~ x!2 ~ x!3", B: "x", C: "x!2 ~@2 x!3 ~ x!5 ~@3", D: "x!3 ~ x!3 ~", E: "x!8", F: "x!2 ~@6", G: "x!2 ~@3 x!3",
  H: "x ~@4 x!3", I: "x ~ x!3 ~ x!2", J: "x!2 ~@2 x!3 ~ x!4 ~@4", K: "~ x!3 ~ x ~@2", L: "x ~@2 x!2 ~ x ~@9",
  M: "x!7 ~@3 x ~ x!2 ~@2", N: "x!2 ~ x!6 ~@3 x ~ x ~", O: "x!6 ~@2 x!3 ~ x!3 ~", P: "x!5 ~ x!2",
})).gain(0.25)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 A B ~@2 C D@7 E F G@3 D@11 C F G@3 D@11 C F G@3 D@11 ~ H I J K L D@11 ~
>`.pickRestart({
  A: "~@5 x!3", B: "x", C: "~@8 x!5 ~@3", D: "x!2 ~@2 x!2 ~@2", E: "x!6 ~@2", F: "x!2 ~@6", G: "x!2 ~@3 x!3",
  H: "~@6 x ~@8 x", I: "~@15 x", J: "~@4 x!4 ~@8", K: "x!4 ~@4 x!3 ~ x!4", L: "~@3 x",
})).gain(0.37)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@8 A@8 B C@2 A@12 D B C@2 A@12 D B C@2 A@12 ~@4 E F A@11 ~>".pickRestart({
  A: "x!8", B: "x!3 ~@5", C: "x!2 ~@3 x!3", D: "x!2 ~@2 x!3 ~ x!4 ~@4", E: "~@15 x", F: "~@4 x!4",
})).gain(0.44)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@3 B ~@23 B ~@15 B ~@15 A C B ~@2 D ~@12>".pickRestart({
  A: "~@2 x!2 ~@4", B: "~@4 x!3 ~@9", C: "~@3 x!2 ~@3 x ~@7", D: "~@2 x!3 ~@3",
})).gain(0.44)

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~@3 B ~@23 C ~@15 C ~@15 D C E F G H ~@12>".pickRestart({
  A: "x", B: "x!2 ~@10 x ~@3", C: "x!2 ~@14", D: "~ x ~@3 x!2 ~", E: "x!4 ~@12", F: "x ~ x!2 ~@12", G: "~@4 x!2 ~@10",
  H: "x!2 ~@6",
})).gain(0.44)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A@3 ~@7 A B ~ A@2 C A D A E A F A F A ~@2 F A@3 C A D A E A F A F A ~@2 F A@3 C A D A E A F A F A ~@2 F D G@2 H
  ~@13
>`.pickRestart({
  A: "x", B: "~ x!6 ~", C: "x!2 ~@2", D: "x!2", E: "x!4", F: "~@3 x", G: "~ x", H: "~@15 x",
})).gain(0.25)

stack(
  bass, bass_soft, bass_2, bass_soft_2, piano, piano_soft, clavinet, electric_guitar_muted, electric_guitar_muted_2,
  kick, snare, low_tom, pedal_hat, mid_tom, high_tom, crash
)

More by Johnny Rivers