Strudelify
KeyF majorTempo135 bpm
0:00/0:00
// Shout — The Isley Brothers
// 135 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 74 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(135/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.

// chords · electric guitar clean · "cl guitar"
const electric_guitar_clean = note(`<
  ~@3 A B C D E F G H A B C D E F G H A B C D E F G I A@2 B@2 A@2 B@2 A@2 B@2 A@2 B J ~@16 A B C D E F G H A B C D E F J
>`.pickRestart({
  A: "[f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~", // F
  B: "[f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~", // Dm D5 Dm D5 Dm
  C: "[a3,c4] ~ [a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [a3,c4] ~ [a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~", // Am F Am F Am F Am F
  D: "[f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ a3 ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~", // Dm D5 Dm D5 Dm
  E: "[a3,c4] ~ [a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [a3,c4] ~ [a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~", // Am F Am F Am F Am F
  F: "[a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ a3 ~ [a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ a3 ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~", // D5 Dm D5 Dm
  G: "[f3,a3,c4] ~ [a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [a3,c4] ~ [a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~", // F Am F Am F Am F Am …
  H: "[f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ a3 ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ a3 ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3] ~ [f3,a3,d4] ~ [f3,a3,d4] ~", // Dm F Dm
  I: "[f3,a3,d4] ~@7", J: "[f3,a3,c4]@5 ~@27",
})).s("gm_electric_guitar_clean").gain(0.27).pan(0.3)

// chords · electric guitar clean · "cl guitar" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@4 A B C D E F G ~ A B C D E F G ~ A B C D E F ~@3 A@2 ~@2 A@2 ~@2 A@2 ~@2 A ~@18 A B C D E F G ~ A B C D E ~
>`.pickRestart({
  A: "~@18 f3 ~@7 f3 ~@5", B: "f3 ~ f3 ~@5 f3 ~ f3 ~@7 f3 ~@5 f3 ~@7", C: "~@8 f3 ~@7 [f3,d4] ~@9 f3 ~@5",
  D: "f3 ~ f3 ~@7 f3 ~@7 f3 ~@7 f3 ~@5", E: "f3 ~@15 f3 ~ f3 ~@13", F: "~@2 f3 ~@7 f3 ~@5 f3 ~@7 f3 ~@7",
  G: "~@8 [f3,d4] ~@17 d4 ~@5", // Dm
})).s("gm_electric_guitar_clean").gain(0.18).pan(0.3)

// chords · acoustic guitar steel · "st guitar"
const acoustic_guitar_steel = note(`<
  ~@3 A B A B A B C B A B A B A B C B A B A B A D C E A@2 B@2 A@2 B@2 A@2 B@2 A@2 B E F@2 G F@12 H A B A B A B A B A B A
  B A B I
>`.pickRestart({
  A: "~@4 [f4,a4,c5] ~@7 [f4,a4,c5] ~@7 [f4,a4,c5] ~@7 [f4,a4,c5] ~@3", // F
  B: "~@4 [f4,a4,d5] ~@7 [f4,a4,d5] ~@7 [f4,a4,d5] ~@7 [f4,a4,d5] ~@3", // Dm
  C: "~@4 [f4,a4,c5] ~@7 [f4,a4,c5] ~@7 [f4,a4,c5] ~@7 [f4,a4,c5]@2 ~@2", // F
  D: "~@4 [f4,a4,d5] ~@7 [f4,a4,d5] ~@7 [f4,a4,d5] ~@7 [f4,a4,d5]@2 ~@2", E: "[f4,a4,d5]@3 ~@29",
  F: "[f4,a4,c5] ~@4 [f4,a4,c5] ~@2 [f4,bb4,d5] ~@4 [f4,bb4,d5] ~@2 [f4,a4,c5] ~@4 [f4,a4,c5] ~@2 [f4,bb4,d5] ~@4 [f4,bb4,d5] ~@2", // F Bb F Bb
  G: "[f4,a4,c5] ~@4 [f4,a4,c5] ~@2 [f4,g4,bb4,d5] ~@4 [f4,bb4,d5] ~@2 [f4,a4,c5] ~@4 [f4,a4,c5] ~@2 [f4,bb4,d5] ~@4 [f4,bb4,d5] ~@2", // F Gm7 Bb F Bb
  H: "[f4,a4,c5] ~@7 [f4,a4,c5] ~@7 [f4,a4,c5] ~@7 [f4,a4,c5] ~@7", I: "[f4,c5] ~@7",
})).s("gm_acoustic_guitar_steel").gain(0.48).pan(0.7)

// chords · brass section · "brass"
const brass_section = note(`<
  ~@3 A B C D C ~@3 E F G H G I G J A D C D C D K D L M N O P Q R O S T R O P M U V ~@16 W X A X A X C D C D C D A X A
>`.pickRestart({
  A: "[a4,c5,f5] ~@7", B: "[a4,d5,f5]@3 ~@13", C: "[a4,c5,f5]@5 ~@27", D: "[a4,d5,f5]@5 ~@27",
  E: "~@8 [a4,c5,f5]@15 ~ [a4,c5,f5]@4 d5 ~@3", // F
  F: "[a4,d5,f5]@4 g5@3 ~@5 [d5,f5,a5]@3 ~@5 [d5,f5,a5]@3 ~@5 [d5,f5,a5]@3 ~", // Dm
  G: "~@8 [a4,c5,f5]@14 ~@2 [a4,c5,f5]@4 d5 ~@3", // F
  H: "[a4,d5,f5]@4 g5@2 ~@6 [d5,f5,a5]@3 ~@5 [d5,f5,a5]@3 ~@5 [d5,f5,a5]@4", // Dm
  I: "[a4,d5,f5]@4 g5@2 ~@6 [d5,f5,a5]@3 ~@5 [d5,f5,a5]@3 ~@5 [d5,f5,a5]@3 ~", // Dm
  J: "[a4,d5,f5]@4 g5@2 ~@6 [d5,f5,a5]@3 ~@5 [d5,f5,a5]@3 ~@5 [d5,f5,a5]@2 ~@2", K: "[a4,c5,f5]@3 ~@13",
  L: "~@8 [a4,c5,f5]@2 ~@2 [a4,c5] ~@3 [a4,c5,f5] ~@3 [a4,c5,f5]@2 ~@6 [a4,c5,f5] ~@3, ~@6 f5 ~@9", // F Am F
  M: "[a4,c5,f5] ~@5 [a4,c5,f5] ~@3 [a4,c5,f5] ~@3 [a4,c5,f5] ~", // F
  N: "~@8 [a4,d5,f5]@2 ~@2 [d5,f5]@2 ~@2 [a4,d5,f5] ~@3 [a4,d5,f5]@2 ~@6 [a4,d5,f5] ~@3, ~@12 a4 ~@19", // Dm
  O: "[a4,d5,f5] ~@5 [a4,d5,f5] ~@3 [a4,d5,f5] ~@3 [a4,d5,f5] ~", // Dm
  P: "~@8 [a4,c5,f5]@2 ~@2 [c5,f5]@2 ~@2 [a4,c5,f5] ~@3 [a4,c5,f5]@2 ~@6 [a4,c5,f5] ~@3, ~@12 a4 ~@19", // F F5 F
  Q: "[a4,c5,f5]@2 ~@10 [a4,c5,f5]@3 ~@5 [a4,c5,f5]@2 ~@6 [a4,c5,f5]@2 ~@2", // F
  R: "~@8 [a4,d5,f5]@2 ~@2 [a4,d5] ~@3 [a4,d5,f5] ~@3 [a4,d5,f5]@2 ~@6 [a4,d5,f5] ~@3, ~@6 f5 ~@9", // Dm D5 Dm
  S: "~@8 [c5,f5]@2 ~@2 [a4,c5] ~@3 [a4,c5,f5] ~@3 [a4,c5,f5]@2 ~@6 [a4,c5,f5] ~@3, ~@8 a4 ~@3 f5@2 ~@18", // F5 Am F
  T: "[a4,c5,f5]@3 ~@9 [a4,c5,f5]@2 ~@6 [a4,c5,f5]@2 ~@6 [a4,c5,f5]@3 ~", // F
  U: "~@8 [a4,d5,f5]@2 ~@2 [a4,d5,f5] ~@3 [a4,d5,f5] ~@3 [a4,d5,f5]@2 ~@6 [a4,d5,f5] ~@3", V: "[a4,d5,f5] ~@15",
  W: "[a4,c5,f5]@3 ~@29", X: "[a4,d5,f5] ~@7",
})).s("gm_brass_section").gain(0.4).pan(0.6)

// chords · rock organ · "hmd organ"
const rock_organ = note("<~@43 A B C D@2 E F@5 G@4 H ~@15>".pickRestart({
  A: "~@9 a5@15 ~ [g5,bb5]@7, ~@8 c6@15 ~@9", B: "~ a5@5 [g4,c5]@16 ~@10, f5@3 ~@13",
  C: "~@8 [c7,eb7]@15 ~ [f6,bb6,d7]@7 f6, ~@8 f6 ~@23", // Cm Bb
  D: "[ab6 a6@4 [c6,f6]@31 ~@4 [a5,c6]@15 ~@2 g5@7, c7@5 ~@35 ab5 ~@15 bb5@7 ~]/2", // F5 Am
  E: "ab5 a5@15 ~ c5@4 [c5,f5,a5]@11, f5 ~", // F
  F: "[~@5 f5@2 ~ ab5 a5@12 ~@3 [g5,bb5]@7 ab5 ~ a5@4 ~ f5@7 [c5,f5]@7 ~@2 [c5,f5]@7 [c5,f5]@8 ~@4 eb7@8 ~@7 [f6,bb6,d7]@7 ab6 a6@4 ~ [c6,f6]@7 ~ [c6,f6]@7 ~@2 [c6,f6]@7 [c6,f6]@8 f5@3 ab5 a5@12 ~@3 [g5,bb5]@7 [f5,ab5], ~@8 c6@12 ~@11 f5@6 c5@7 ~@28 [f6,bb6,c7]@8 ~@15 [f6,c7]@5 ~@36 c6@12 ~@12]/5", // Gm F5 Bb F5 Gm Fm Fsus4 F5
  G: "[~ a5@4 ~ c5@8 ~@3 [c5,f5]@7 ~@6 f5@7 f5@3 ab5 a5@12 ~@4 g5@6 ab5 ~ a5@4 ~ c5@8 ~@3 [c5,f5]@7 ~@6 [c5,f5]@7 ~@3 ab5 a5@8 ~@7 [g5,bb5]@7 ~, ~@5 f5@8 ~@16 c5@7 ~@4 c6@12 ~@4 bb5@7 f5@6 f5@8 ~@27 c6@8 ~@16]/4", // F5 Gm
  H: "[f5,a5]@8 ~@8 [c5,f5]@7 ~ [c5,f5]@8", // F F5
})).s("gm_rock_organ").gain(0.52).pan(0.3)

// other · oboe
const oboe = note("<~@59 A B@2 A C A B C ~@4 D E ~>".pickRestart({
  A: "~@6 f5@9 ~", B: "~@12 f5@19 ~", C: "~@12 f5@17 ~@3", D: "~@12 f5@11 d5@7 ~@2", E: "~@6 f5@6 c5@3 ~",
})).s("gm_oboe").gain(0.25).pan(0.2)

// bass · acoustic bass · "bass"
const bass = note(`<
  ~@3 A B C D E B F B G B C H E B F B A B C I E J K L M N O P M N Q R M S O P T S O L U V U V U V W X U V U V Y V U V A
  B C D E B F B G B C H E D Z
>`.pickRestart({
  A: "f2@7 ~ c2@5 ~@3 f2@6 ~@2 f2@2 ~@2 e2@3 ~", B: "d2@6 ~@2 a2@6 ~@2 d2@6 ~@2 d2@2 ~@2 e2@3 ~",
  C: "f2@7 ~ c3@7 ~ f2@6 ~@2 f2@3 ~ e2@3 ~", D: "d2@6 ~@2 a2@6 ~@2 d2@5 ~ d2@2 d2 ~ d2@2 e2@3 ~",
  E: "f2@7 ~ c3@7 ~ f2@6 ~@2 f2@2 ~@2 e2@3 ~", F: "f2@5 ~ f2@2 c3@7 ~ f2@5 ~ f2@2 f2@2 ~@2 e2@3 ~",
  G: "f2@7 ~ c2@5 ~@3 f2@5 ~ f2 ~ f2@2 ~@2 e2@3 ~", H: "d2@6 ~@2 a2@6 ~@2 d2@7 ~ d2 ~ d2@2 e2@3 ~",
  I: "d2@6 ~@2 a2@6 ~@2 d2@5 ~ d2@2 d2@3 ~ e2@3 ~", J: "d2@6 ~@2 a2@6 ~@2 d2@2 ~@2 d2@2 ~@2 eb2@2 ~@2 e2@3 ~",
  K: "f2@7 ~ c3@7 ~ f2@3 ~ f2@2 ~@2 f2@2 ~@2 e2@3 ~", L: "d2 ~@15", M: "f2@7 ~ c2@7 ~ f2@7 ~ c2@7 ~",
  N: "f2@7 ~ c2@7 ~ f2@6 ~@2 f2@2 ~@2 e2@3 ~", O: "d2@7 ~ a2@7 ~ d2@7 ~ a2@7 ~",
  P: "d2@6 ~@2 a2@6 ~@2 d2@4 d2@2 d2@2 eb2@3 ~ e2@3 ~", Q: "d2@5 ~ d2@2 a2@7 ~ d2@3 ~ d2@2 d2@2 a2@7 ~",
  R: "d2@5 ~ d2@2 a2@6 ~@2 d2@4 d2@2 d2@2 eb2@3 ~ e2@3 ~", S: "f2@7 ~ c3@7 ~ f2@6 ~@2 f2@7 ~",
  T: "f2@7 ~ c3@7 ~ f2@7 ~ c3@7 ~", U: "f2@4 g2@4 a2@4 bb2 ~@2 bb2", V: "c3@8 bb2@7 ~ a2@8 g2@8",
  W: "f2@8 c2@8 a1@8 bb1@3 ~@3 bb1@2", X: "c2@8 bb1@7 ~ a1@8 c2@8", Y: "f2@6 f2@2 g2@8 a2@8 bb2@7 ~", Z: "f2 ~@15",
})).s("gm_acoustic_bass").gain(0.54)

// drums · kick
const kick = s("bd").struct("<~@3 [x!4]!23 x [x!4]!15 x [x!2]!16 [x!4]!14 x>").gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@3
  [~ x ~ x ~ x ~ x]!23
  ~
  [~ x ~ x ~ x ~ x]!15
  ~
  [~@8 x ~@4 x ~@10 x ~@7]!16
  [~ x ~ x ~ x ~ x]!14
  ~
>`).gain(0.4)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@3 [~@3 x ~@7 x ~@4]!23 ~ [~@3 x ~@7 x ~@4]!15 ~@17 [~@3 x ~@7 x ~@4]!14 ~>")
  .gain(0.25)

// drums · clap
const clap = s("cp").struct("<~@43 [~@8 x ~@4 x ~@10 x ~@7]!16 ~@15>").gain(0.3)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@3 A B C D E F G H I J K L M N O P Q R S T U V W ~ C D E F G H I J M N O P Q R U L X Y Z AA Z@3 AB Z@7 AC C D E F G H
  I J M N O P Q R L
>`.pickRestart({
  A: "x ~ x!3 ~ x ~ x!5 ~ x ~", B: "x ~ x!3 ~ x ~ x ~ x!3 ~ x ~", C: "x ~ x!5 ~ x ~ x!3 ~ x ~",
  D: "x ~ x!7 ~ x ~ x ~ x ~", E: "x ~@3 x!5 ~@3 x!3 ~ x ~@3 x!3 ~ x ~ x ~ x ~ x ~",
  F: "x ~@3 x!5 ~ x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~", G: "x ~@3 x!5 ~@3 x ~@3 x ~@3 x!3 ~ x ~@3 x ~@3",
  H: "x ~@3 x!5 ~@3 x ~@3 x ~@3 x!3 ~ x ~ x ~ x ~@3", I: "x ~@3 x!5 ~ x ~ x ~ x ~ x ~@3 x ~@3 x ~@3 x ~@3",
  J: "x!2 ~@6", K: "~@10 x!4 ~@2", L: "x", M: "x ~ x!3 ~ x ~@13 x!3 ~ x ~ x ~ x ~ x ~",
  N: "x ~ x!3 ~ x ~@12 x!2 ~@3 x ~@3 x ~@3", O: "~@18 x!3 ~@3 x ~@3 x ~@3", P: "x ~ x!2 ~ x!4 ~ x ~ x ~ x ~",
  Q: "x ~@3 x ~@8 x!3 ~@5 x!3 ~@4 x ~@3", R: "x ~@3 x ~@8 x!3 ~@5 x!3 ~@8", S: "~@12 x ~@3 x ~@3 x!5 ~@7",
  T: "~@12 x!5 ~@3 x ~@3 x ~ x ~@5", U: "x ~@2 x ~ x ~ x ~@4 x!3 ~@3 x ~ x ~ x ~@5 x ~@3",
  V: "x ~@2 x ~ x ~@6 x ~@7 x ~@7 x ~@3", W: "x ~ x!3 ~@3 x ~@2 x!2 ~@3 x ~@2 x!2 ~@3 x ~ x ~ x ~@3",
  X: "~@8 x ~@4 x ~@2 x ~@7 x ~@2 x ~ x ~@2", Y: "x ~@4 x ~@2 x ~@2 x ~ x ~@2 x ~@4 x ~@2 x ~ x ~@2 x ~@2",
  Z: "x ~@12 x ~@2 x ~@12 x ~@2", AA: "x ~@12 x ~@2 x ~@15", AB: "x ~@12 x ~@2 x ~@4 x ~@2 x ~@4 x ~@2",
  AC: "x ~@12 x ~@2 x ~@4 x ~@2 x ~@7",
})).gain(0.25)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@5 A B ~@3 C ~@2 D E F@2 G H I@2 ~@2 J K L ~ A B ~@3 C ~@2 F@2 G H I@2 J ~@17 A B ~@3 C ~@2 F@2 G H I@2 ~
>`.pickRestart({
  A: "~@5 x ~ x ~@22 x ~", B: "~@5 x ~ x ~@24", C: "~@15 x", D: "~@14 x!2", E: "~ x ~@2", F: "~@5 x ~@26",
  G: "~@17 x ~@3 x ~@10", H: "~@3 x ~ x ~@12 x ~@13", I: "~@3 x ~ x ~@2", J: "~@2 x!2 ~@12", K: "~ x!3 ~@12",
  L: "~@9 x!2 ~@6 x!2 ~@13",
})).gain(0.1)

stack(
  electric_guitar_clean, electric_guitar_clean_2, acoustic_guitar_steel, brass_section, rock_organ, oboe, bass, kick,
  snare, snare_soft, clap, hihat, tambourine, tambourine_soft
)

More by The Isley Brothers