Strudelify

Palladium

Weather Report

KeyA minorTempo117 bpm
0:00/0:00
// Palladium — Weather Report
// 117 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 7 "sax echo1" alto sax (copy of ch 6 "Alto Sax" alto sax, 0.25 beats late); ch 8 "sax echo2" alto sax (copy of ch 6 "Alto Sax" alto sax, 0.5 beats late)
// note: Full arrangement: all 132 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(117/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 B A B A C A C A ~ D@14 E D F G D@2 E D@2 H@10 I@2 D@19 E D F G D@2 E D@2 H@10 I@2 D@4 J K L M N K O P Q K L M N
  K O P Q K L M N K O P Q K L M N K O P R S T S T U V U V
>`.pickRestart({
  A: "f2@3 f2 ~@3 f1 ~@8", B: "~ f#1 c#2 a#1", C: "~ e2 c#2 c2", D: "d2@2 d2!2 ~ a2 ~ e3@2 e3 a2 a1@2 a1 e2 a1",
  E: "d2@2 d2!2 ~ a2 ~ [e3,g3]@2 e3 a2 a1@2 a1 e2 a1, ~@7 [d#3,f#3] ~@8", // Em D#m
  F: "d2@2 d2!2 ~ a#2 ~ g3@4 a1@2 a1 e2 a1, ~@7 f#3 ~@8", G: "d2@2 d2!2 ~ a2 ~ f#3@4 a1@2 a1 e2 a1",
  H: "[f1@3 f1 c2!2 ~ f2@2 f2!2 c2@2 c2 f1@5 f1 c2!2 ~ f2@2 f2!2 c2@2 c2 f1@2]/2",
  I: "[f1@3 f1 c2!2 ~ f2@2 f2!2 c2@2 c2 f1@5 f1 c2!2 a1@2 a#1@7 a1]/2", J: "d2@3 a2@2 a2 d2 b1 ~@3 b1 f#2 b1 d2@2",
  K: "e2@3 e2@2 b1!2 a1@4 b1@2 b1 c#2@2", L: "d2@3 c#2@2 c#2 b1@2 b1@3 b1 f#2 b1 d2@2",
  M: "e2@3 e2@2 b1!2 a1@4 b1@2 b1 c2@2", N: "d2@3 c2@2 c2 b1@2 b1@3 b1 f#2 b1 d2@2",
  O: "d2@3 c#2@2 c#2 b1@2 d#2@3 d#2 a#2 d#2 g2@2", P: "g#2@3 g#2@2 d#2!2 c2 c#2@3 c#2@2 g#2 f#2@2",
  Q: "f#2@3 c#2@2 c#2 a#1@2 ~@3 b1 f#2 b1 d2@2", R: "f#2@3 c#2@2 c#2 a#1@2 f2@3 f2 ~@3 f1", S: "~@3 f#1",
  T: "c#2@4 a#1@4 f2@3 f2 ~@3 f1", U: "~@3 e2", V: "c#2@4 c2@4 f2@3 f2 ~@3 f1",
})).s("gm_fretless_bass").gain(0.36)

// chords · epiano2 · "Electric Piano2"
const epiano2 = note(`<
  ~@2 A B A B C D C D A ~ E F E F E F E F E F E F E G@3 H F E G@3 I J K J L M N O@2 P Q M R@2 S@3 T U V T W E F E F E F
  E F E G@3 H F E G@3 I J K J L M N O@2 P Q M R@2 S@3 X Y Z AA@2 Y AB AC AD Y Z AA@2 Y AB AC AD Y Z AA@2 Y AB AC AD Y Z
  AA@2 Y AB AC AE AF AG AF AH AI AJ AI AK
>`.pickRestart({
  A: "[g#3,d#4,g4,g5]@3 [g#3,d#4,g4,g5] ~@3 [g#3,d#4,g4,g5] ~@8", B: "~ [g3,a#3,d4,d5] [g#3,b3,d#4,d#5] [f3,g#3,c4,c5]",
  C: "[f3,g#3,d#4,g4,g5]@3 [e3,g#3,d#4,g4,g5] ~@3 [f3,g#3,d#4,g4,g5] ~@8", // Fm7 Emaj7 Fm7
  D: "~ [g#3,d4,g#4] [b3,d#4,f#4,a#4] [d#4,a4,c#5]", E: "g5@2 ~@5 f#5 ~@8", F: "e5@2 ~@5 e5 ~@8",
  G: "[e5@2 ~@19 [e4,c5]!3 ~@13 [e4,c5] ~ [e4,c5] ~@8, ~@7 [c4,f4,a4,e5]@41]/3", H: "f5@2 ~@5 f#5 ~@8",
  I: "~@5 [e4,c5]!3 ~@8", J: "~@7 [c4,f4] [a#3,d#4] [f3,c4] ~@6", K: "~@4 [c4,f4]!4 ~@8", L: "~@5 [c4,f4]!3 ~@8",
  M: "[f3,d4]@7 [f3,c#4,e4]@9", N: "[f3,g3,c4,e4]@7 [f3,a#3,d4,f4]@9",
  O: "[~@20 f4 ~ f4!2 ~@8, ~@7 d#4@21 ~@4, ~@8 [g4,a#4]@21 ~@3]/2", // Gm
  P: "~ [f3,f4] [d#3,d#4] [c3,c4] [f3,f4] [d#3,d#4] [c3,c4,f4] [f3,f4] ~@8", Q: "~@4 [f3,f4] ~ [f3,f4]!2 ~@8",
  R: "[e5@2 ~@6 [a#2,g#3,c#4,d#4]@7 [d3,c4,e4]@9 [d#3,c#4,f#4,a#4]@8]/2", // A#m7 C D#m7
  S: "[e5 a4 ~ b4 ~ d5 ~ c4@25 [f3,c4,e4]@16, ~@7 [f4,a4,e5]@41]/3", T: "[f4,c5]!2 [d4,a4]!2 ~@12", U: "[f4,c5]!4 ~@12",
  V: "[f4,c5]!2 [d4,a4]!2 [f4,c5]!2 [a4,d5]!2 ~@8", W: "[f4,c5]!2 [d4,a4]!2 [f4,c5] ~@11",
  X: "e5 a4 ~ b4 ~ d5 ~ c#5 [a3,d4,f#4,c#5]@7 ~", Y: "[e3,b3,d4,a4]@7 ~ [a2,g#3,c#4,e4,b4]@7 ~",
  Z: "[g#3,c#4,e4]@7 ~ [a3,d4,f#4,c#5]@8", AA: "[[e3,b3,d4,a4]@8 [c4,g4,a4,d5]@16 [a3,d4,f#4,c#5]@7 ~]/2",
  AB: "[d3,a3,c#4,e4]@7 ~ [c#4,f#4,a#4,f5]@7 ~", AC: "[c4,f#4,a#4,d#5]@7 ~ [b3,f#4,g#4,d#5]@7 ~",
  AD: "[a#3,e4,f#4,c#5]@7 ~ [a3,d4,f#4,c#5]@7 ~", // F#7 Dmaj7
  AE: "[a#3,e4,f#4,c#5]@7 ~ [g#3,d#4,g4,g5]@3 [g#3,d#4,g4,g5] ~@3 [g#3,d#4,g4,g5]", AF: "~@3 [g3,a#3,d4,d5]",
  AG: "[g#3,b3,d#4,d#5]@4 [f3,g#3,c4,c5]@4 [g#3,d#4,g4,g5]@3 [g#3,d#4,g4,g5] ~@3 [g#3,d#4,g4,g5]", // G#m Fm G#maj7
  AH: "[g#3,b3,d#4,d#5]@4 [f3,g#3,c4,c5]@4 [f3,g#3,d#4,g4,g5]@3 [e3,g#3,d#4,g4,g5] ~@3 [f3,g#3,d#4,g4,g5]", // G#m Fm Fm7 Emaj7 Fm7
  AI: "~@3 [g#3,d4,g#4]", // G#dim
  AJ: "[b3,d#4,f#4,a#4]@4 [d#4,a4,c#5]@4 [f3,g#3,d#4,g4,g5]@3 [e3,g#3,d#4,g4,g5] ~@3 [f3,g#3,d#4,g4,g5]", // Bmaj7 D#m7b5 Fm7 Emaj7 Fm7
  AK: "[b3,d#4,f#4,a#4]@4 [d#4,a4,c#5]@4 [g#3,d#4,g4,g5]@3 [g#3,d#4,g4,g5] ~@3 [g#3,d#4,g4,g5]", // Bmaj7 D#m7b5 G#maj7
})).s("gm_epiano2").gain(0.27).pan(0.4)

// other · distortion guitar · "Distortion"
const distortion_guitar = note("<~@35 A@4 ~@36 A@4 ~@53>".pickRestart({
  A: "[f1,f2]/4", // F
})).s("gm_distortion_guitar").gain(0.18).pan(0.6)

// bass · synth bass 2
const bass_2 = note("<[e1@4 b1@3 e2@4 f#2 g#2 f#2 e2 b1] [d2 f#2@15] ~@130>").s("gm_synth_bass_2").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@2 A B A B A B A B A ~ C@4 A@19 D@56 E F@31 G H I H I H I H I>".pickRestart({
  A: "x ~@2 x ~@3 x ~@8", B: "~ x!3", C: "x ~@6 x ~@8", D: "x ~@6 x!2 ~@7", E: "x ~@6 x!2 ~@6 x", F: "x ~@7 x ~@6 x",
  G: "x ~@7 x ~@2 x ~@3 x", H: "~@3 x", I: "x ~@3 x ~@3 x ~@2 x ~@3 x",
})).gain(0.46)

// drums · snare
const snare = s("sd").struct("<A B C ~ D ~ C ~ D ~@3 E@23 F@56 G H@31 I J ~ J ~ J ~ J ~>".pickRestart({
  A: "x ~@3 x ~@2 x ~@3 x!2 ~@2 x", B: "~ x ~@14", C: "~@9 x ~@3 x ~@2", D: "~@10 x ~@2 x ~@2", E: "~@4 x ~@8 x ~@2",
  F: "~@4 x ~@4 x ~@2 x ~@3", G: "~ x ~ x", H: "~ x ~@2 x ~@7 x ~@3", I: "~ x ~@2 x ~@11", J: "~ x ~@3 x ~@10",
})).gain(0.46)

// drums · hihat
const hihat = s("hh").struct("<~@2 A ~ A ~ A ~ A ~@3 B@23 ~@88 C D C D C D C D ~>".pickRestart({
  A: "x ~ x!3 ~ x!2 ~@6 x ~", B: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", C: "~@8 x ~ x!3 ~ x!2", D: "~@3 x ~@4",
})).gain(0.39)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@7 x] x ~@130>").gain(0.39)

// drums · open hat
const open_hat = s("oh").struct("<~@2 A B A B A B A B C ~@112 D E F E F E F E F>".pickRestart({
  A: "x ~@2 x ~@3 x ~@7 x", B: "~ x!3", C: "x ~@2 x ~@3 x ~@8", D: "~@8 x ~@2 x ~@3 x", E: "~@7 x ~@4 x ~@3",
  F: "x ~@3 x ~@3 x ~@2 x ~@3 x",
})).gain(0.39)

// drums · high tom
const high_tom = s("ht").struct("<[~@13 x ~@2] ~@131>").gain(0.39)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@35
  [x ~ x ~ x ~ x!2 ~@2 x!3 ~ x ~]!56
  [x ~ x ~ x ~ x!3 ~ x ~ x ~ x!2]
  [~@2 x!3 ~ x ~ x ~ x ~ x ~ x!2]!31
  [~@2 x!3 ~ x ~@9]
  ~@8
>`).gain(0.39)

// drums · cowbell
const cowbell = s("cb").struct("<~@50 A B A B A C ~@33 D@2 ~@41>".pickRestart({
  A: "~@4 x ~@4 x ~ x!2 ~@3", B: "~@4 x ~@4 x ~@2 x ~@3", C: "~@4 x ~@4 x!4 ~@3", D: "~@4 x!2 ~ x ~@8",
})).gain(0.39)

// drums · congas
const congas = s("conga:18").struct(`<
  ~@12 A B C D C D E F E F A B C D C D E F E F A B C D C D E F E F A B C D C D E F E F A B C D C D E F E F A B C D C D E
  F E F A@2 B C D C D E F E F A B C D C D E F E F A@2 B C D C D E F E F A F E F A F E F A F E F A F E F A@3 ~@9
>`.pickRestart({
  A: "x!4 ~ x!3 ~@4 x ~ x!2", B: "~ x!2 ~@2 x!4 ~ x!2 ~@2 x!2", C: "x!2 ~ x!2 ~ x!3 ~@4 x!2 ~",
  D: "~ x ~@2 x!2 ~@2 x ~ x ~ x!2 ~ x", E: "x!11 ~ x ~ x!2", F: "x ~ x!2 ~@2 x!3 ~@3 x ~@2 x",
})).gain(1.05)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@12 A B C D C D ~ E ~ E A B C D C D ~ E ~ E A B C D C D ~ E ~ E A B C D C D ~ E ~ E A B C D C D ~ E ~ E A B C D C D ~
  E ~ E A@2 B C D C D ~ E ~ E A B C D C D ~ E ~ E A@2 B C D C D ~ E ~ E A E ~ E A E ~ E A E ~ E A E ~ E A@3 ~@9
>`.pickRestart({
  A: "~@4 x ~@3 x!3 ~@2 x ~@2", B: "x ~@2 x!2 ~@4 x ~@2 x ~@3", C: "~@2 x ~@2 x ~@3 x!2 ~ x ~@2 x",
  D: "x ~ x!2 ~@2 x!2 ~ x ~@4 x ~", E: "~ x ~@2 x!2 ~@3 x!2 ~@3 x ~",
})).gain(1.05)

stack(
  bass, epiano2, distortion_guitar, bass_2, kick, snare, hihat, mid_tom, open_hat, high_tom, crash, ride, cowbell,
  congas, congas_2
)

More by Weather Report