Strudelify

Loveland

Tower of Power

KeyG majorTempo100 bpm
0:00/0:00
// Loveland — Tower of Power
// 100 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/2570516; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 71 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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.

// other · trumpet · "Tromba in Si♭"
const trumpet = note(`<
  ~@12 A B A ~ C D C D E F G H G ~ I J K@2 L ~@3 M N M O C D C D E F P Q R ~ C D C D ~@3 A S A S A S A S M H T H M H T H
>`.pickRestart({
  A: "~@10 a5@3 f5 ~@2", B: "~@7 g#5 a5 f5 g5 e5 f5 c5 d5@2", C: "~@3 a5", D: "c6!3 ~@5", E: "~ g4", F: "a#4 c5",
  G: "~@2 f5!4 ~@10", H: "~@4 d5 f5 ~ g#5 ~ g#5 ~ g5 f5@2 d5 ~", I: "~@4 f5@3 ~@5 f5@3 ~", J: "~ f4@2 ~",
  K: "[c5@24 ~@2 f4 ~ a4 c5 d5 ~]/2", L: "d5 ~", M: "~@4 c5 d5 ~ f4@6 ~@3", N: "~@4 d5 f5 ~ g#5 ~ g#5 g5@2 f5@2 d5 ~",
  O: "~@4 c5 f5@2 g#5@3 ~@6", P: "~@10 f5 e5 f5 e5 f5 ~", Q: "~@12 c5 g#4@3", R: "f4 ~@9 f5 e5 f5 e5 f5 ~",
  S: "~@7 g#5 a5 f5 g5 e5 f5 c5 d5 ~", T: "~@4 c5 d5 ~ c6@6 ~@3",
})).s("gm_trumpet").gain(0.3)

// other · alto sax · "Sassofono contralto"
const alto_sax = note(`<
  ~@12 A B A ~ C D C D E F G H G ~ I J K@2 L ~@3 M N M O C D C D E F P Q R ~ C D C D ~@3 A S A S A S A S M H T H M H T H
>`.pickRestart({
  A: "~@10 c5@3 f4 ~@2", B: "~@7 g#4 a4 f4 g4 e4 f4 c4 d4@2", C: "~ f4", D: "c5!3 ~@5", E: "~ d5", F: "d5 c5",
  G: "~@2 c5!4 ~@10", H: "~@4 d4 f4 ~ g#4 ~ g#4 ~ g4 f4@2 d4 ~", I: "~@4 f5@3 ~@5 f5@3 ~", J: "~@4 a4@3 ~",
  K: "[c5@24 ~@2 f4 ~ a4 c5 d5 ~]/2", L: "d5 ~", M: "~@4 c5 d5 ~ f4@6 ~@3", N: "~@4 d4 f4 ~ g#4 ~ g#4 g4@2 f4@2 d4 ~",
  O: "~@4 d4 f4@2 g#4@3 ~@6", P: "~@10 a4 g#4 a4 g#4 a4 ~", Q: "~@12 f5 c5@3", R: "f4 ~@9 a4 g#4 a4 g#4 a4 ~",
  S: "~@7 g#4 a4 f4 g4 e4 f4 c4 d4 ~", T: "~@4 c5 d5 ~ f5@6 ~@3",
})).s("gm_alto_sax").gain(0.3)

// other · baritone sax · "Sassofono baritono"
const baritone_sax = note(`<
  ~@12 A B A ~@2 C ~ C D E F G F H I ~ J@2 K ~@3 L M L N ~ C ~ C D O P Q R ~@2 C ~ C ~@2 S A T A U A T A U L G V G L G V
  G
>`.pickRestart({
  A: "~@10 a2@3 f2 ~@2", B: "~@7 g#3 a3 f3 g3 e3 f3 c3 d3@2", C: "g2!3 ~@5", D: "~ d2", E: "g2 e3", F: "~@2 f2!4 ~@10",
  G: "~@4 d3 f3 ~ g#3 ~ g#3 ~ g#3 f3@2 d3 ~", H: "g2 c3", I: "~@4 f2@3 ~@5 f2@3 ~", J: "[c4@24 ~@2 f2 ~ e2 c2 d2 ~]/2",
  K: "d2 ~", L: "~@4 c3 d3 ~ f2@6 ~@3", M: "~@4 d3 f3 ~ g#3 ~ g#3 g3@2 f3@2 d3 ~", N: "~@4 d3 f3@2 g#3@3 ~@6",
  O: "g2 e2", P: "~@10 f2 e2 f2 e2 f2 ~", Q: "~@12 c3 g#2@3", R: "f2 ~@9 f2 e2 f2 e2 f2 ~", S: "~ c2@2 ~",
  T: "~@7 g#3 a3 f3 g3 e3 f3 c3 d3 ~", U: "~@7 g#2 a2 f2 g2 e2 f2 c2 d2 ~", V: "~@4 c3 d3 ~ f3@6 ~@3",
})).s("gm_baritone_sax").gain(0.3)

// chords · epiano1 · "Piano"
const epiano1 = note(`<
  A B C D E F G H F G I J C B C K L M L M N O C B C D E F G H F G I J C B C K L M L M N O P Q P R L M L M N S T C B C B
  C B C B C B C B C B C B
>`.pickRestart({
  A: "f2@6 ~@2 a2 c3 ~ d3 ~ c3 a2@2, [f3,c4,a4,f6]@15 ~", B: "[g2,g3,d4,a#4,d5,f5]@11 ~@5",
  C: "[f2,f3,c4,a4,f5]@6 ~@2 [a2,a3] [c3,c4] ~ [d3,d4] ~ [c3,c4] [a2,a3]@2", D: "[g2,g3,d4,a#4,d5,f5] [c3,c4,e4,g4,c5]",
  E: "[f3,f4,a4,c5] [e3,e4,g4,b4,e5]", F: "[d3,d4,a4,d5,f5] [c3,c4,g4,c5,e5]",
  G: "[a#2,a#3,f4,a#4,d5] [a2,a3,e4,a4,c5]", H: "[g2,g3,d4,g4,a#4] [a2,a3,e4,g4,c#5]",
  I: "[g2,g3,d4,g4,a#4] [a2,a3,e4,a4,c5]", J: "[b2,b3,f4,a4,d5]@15 ~",
  K: "[f2,g3,d4,a#4,d5,f5]@8 ~@2 [c3,c4,g4]@3 [a#2,a#3,f4]@3", L: "[a2,a3,e4,a4,c5,a5] [d3,d4,a4,d5,f5]",
  M: "[g2,g3,g4,a#4,d5,f5]@2 [g2,g3,g4,a#4,d5,f5]@2 [g2,g3,g4,a#4,d5,f5]@2 ~@4 [c3,c4,g4,e5]@3 [a#2,a#3,f4,d5]@3", // Gm7 C A#
  N: "[a2,a3,e4,a4,c5,a5] [d2,d3,d4,a4,d5,f5]", O: "[g2,g3,g4,a#4,d5,f5] [c3,c4,e4,g4,c5,e5]",
  P: "f2@2 [a4,d#5,f5,c6]!4 ~ [a4,d#5,f5,c6] ~ [a4,d#5,f5,c6] ~ [a4,d#5,f5,c6]!4 ~", // F7
  Q: "f2@2 [a3,d#4,f4,c5]!4 ~ [a3,d#4,f4,c5] ~ [a3,d#4,f4,c5] ~ [a3,d#4,f4,c5]!4 ~", // F7
  R: "~@2 [a2,a3]@3 [a#2,a#3]@3 [b2,b3]@3 [c3,c4]@2 [a#2,a#3] [a2,a3] ~", S: "[g2,g3,g4,a#4,d5,f5]@15 ~",
  T: "[c3,c4,e4,g4,c5,e5]@15 ~", // C
})).s("gm_epiano1").gain(0.3)

// bass · electric bass finger · "Basso elettrico 5- co."
const bass = note(`<
  A B A B C D E F D E G H A B A I J K J K J L A B A B C D E F D E G H A B A I J K J K J L M@3 N J K J K J O P A B A B A
  B A B A B A B A B A B
>`.pickRestart({
  A: "f1@6 ~@2 a1 c2 ~ d2 ~ c2 a1@2", B: "g1@6 a1 a#1 c2!2 ~ c2 ~ a#1 a1@2", C: "f2!2 e2!2", D: "d2!2 c2!2",
  E: "a#1!2 a1!2", F: "g1@4 g1@2 g1 g#1 a1@2 a1@2 a1@2 c2@2", G: "g1!2 a1!2", H: "b1!4",
  I: "g1@6 a1 a#1 c2 ~ c2@3 a#1@3", J: "a1@4 a1@2 c2 c#2 d2@4 d2@4", K: "g1@2 g1@2 g1 ~@5 c2@3 a#1@3",
  L: "g2@4 g1@2 a1 a#1 c2@2 c2@2 c2@2 c2@2", M: "f1 ~@7", N: "~@2 a1@3 a#1@3 b1@3 c2@2 a#1 a1 ~",
  O: "g2@4 f2@2 c2@2 g1@2 g1@2 g1@2 a1 a#1", P: "c2!8",
})).s("gm_electric_bass_finger").gain(0.3)

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

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@47 [~@5 x ~@10] ~@23>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@7 A ~@5 B ~@7 A ~@7 A ~@5 B ~@7 C ~ B ~@4 D ~@16>".pickRestart({
  A: "~@14 x!2", B: "~@10 x ~@2 x ~@2", C: "~@8 x ~@2 x ~@4", D: "x!4 ~@4",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~@3 A ~ A ~ A ~@3 A ~@2 B C ~@5 A ~@3 A ~ A ~ A ~@3 A ~@2 B C ~@3 A ~@4 B C ~@3 A ~@2 A ~@3 A ~@3 A ~@3 A ~@2
>`.pickRestart({
  A: "~@7 x", B: "x", C: "x!3 ~@5",
})).gain(0.3)

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

stack(trumpet, alto_sax, baritone_sax, epiano1, bass, kick, snare, hihat, low_tom, mid_tom, open_hat, crash)

More by Tower of Power