Strudelify

Reveille Rock

Johnny & The Hurricanes

KeyB majorTempo175 bpm
0:00/0:00
// Reveille Rock — Johnny & The Hurricanes
// 175 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(175/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 · drawbar organ · "Orgel"
const drawbar_organ = note(`<
  A B@2 C@2 D B E F G@7 H I@2 J@2 K I L M N@7 O G@4 P@2 G@2 Q R S@2 G@4 P@2 G@2 Q R S T B@2 C@2 D B E F G@7 H I@2 J@2 K
  I L M N@7 U B@2 C@2 D B E F
>`.pickRestart({
  A: "~@7 f#4", B: "b4@4 d#5@2 b4@2 f#4 ~ f#4 ~ f#4 ~ f#4@2",
  C: "[b4@4 d#5@2 b4@2 f#4 ~ f#4 ~ b4@2 d#5@4 b4@2 ~@2 b4@4 f#4@2 f#4@2 f#4@2]/2",
  D: "b4@4 d#5@2 b4@2 f#4 ~ f#4 ~ f#4@2 f#4@2", E: "b4@4 d#5@2 b4@2 f#4 ~ f#4 ~ f#4@2 b4@2", F: "~@2 b4@3 ~ b4@3 ~@7",
  G: "[f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~", // B
  H: "[f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ d#4@2", // B
  I: "g#4@4 c5@2 g#4@2 d#4 ~ d#4 ~ d#4 ~ d#4@2",
  J: "[g#4@4 c5@2 g#4@2 d#4 ~ d#4 ~ g#4@2 c5@4 g#4@2 ~@2 g#4@4 d#4@2 d#4@2 d#4@2]/2",
  K: "g#4@4 c5@2 g#4@2 d#4 ~ d#4 ~ d#4@2 d#4@2", L: "g#4@4 c5@2 g#4@2 d#4 ~ d#4 ~ d#4@2 g#4@2",
  M: "~@2 g#4@3 ~ g#4@3 ~@7",
  N: "[d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~", // G#
  O: "[d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~@3", // G#
  P: "[g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~", // E
  Q: "[f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~", // F#
  R: "[e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~", // E
  S: "[d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~", // B
  T: "[e4,g#4,b4] ~@13 f#4@2", // E
  U: "[d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ f#4@2", // G#
})).s("gm_drawbar_organ").gain(0.48)

// chords · acoustic guitar steel · "Gitarre"
const acoustic_guitar_steel = note(`<
  A B C D@2 E F@2 G B C D@2 E F@2 G H I J@2 K L@2 M H I J@2 K L@2 M N O P Q R S O N T U V W X Y@2 Z AA AB Y Z AC AD AE
  AF B C D@2 E F@2 G B C D@2 E F@2 G H I J@2 K L@2 M H I J@2 K L@2 M B C D@2 E F@2 AG
>`.pickRestart({
  A: "[b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~@3", // B5
  B: "[b2,f#3] ~ [b2,f#3] ~ g#3 ~ [b2,f#3] ~ [b2,f#3] ~ f#3 ~ [b2,g#3] ~ f#3 ~", // B5 E
  C: "[b2,f#3] ~ [b2,f#3] ~ [b2,g#3] ~ f#3 ~ [b2,f#3] ~ [b2,f#3] ~ [b2,g#3] ~ [b2,f#3] ~", // B5 E B5 E B5
  D: "[b2,f#3] ~ [b2,f#3] ~ [b2,g#3] ~ f#3 ~ [b2,f#3] ~ [b2,f#3] ~ [b2,g#3] ~ f#3 ~", // B5 E B5 E
  E: "[b2,f#3] ~ f#3 ~ [b2,g#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,g#3] ~ [b2,f#3] ~", // B5 E B5 E B5
  F: "[b2,f#3] ~ [b2,f#3] ~ [b2,g#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,g#3] ~ [b2,f#3] ~", // B5 E B5 E B5
  G: "[b2,f#3] ~ [b2,f#3] ~ [b2,g#3] ~ f#3 ~ [b2,f#3] ~ f#3 ~ [b2,g#3] ~ [b2,f#3] ~", // B5 E B5 E B5
  H: "[g#2,d#3] ~ [g#2,d#3] ~ f3 ~ [g#2,d#3] ~ [g#2,d#3] ~ d#3 ~ [g#2,f3] ~ d#3 ~", // G#5 C#
  I: "[g#2,d#3] ~ [g#2,d#3] ~ [g#2,f3] ~ d#3 ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,f3] ~ [g#2,d#3] ~", // G#5 C# G#5 C# G#5
  J: "[g#2,d#3] ~ [g#2,d#3] ~ [g#2,f3] ~ d#3 ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,f3] ~ d#3 ~", // G#5 C# G#5 C#
  K: "[g#2,d#3] ~ d#3 ~ [g#2,f3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,f3] ~ [g#2,d#3] ~", // G#5 C# G#5 C# G#5
  L: "[g#2,d#3] ~ [g#2,d#3] ~ [g#2,f3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,f3] ~ [g#2,d#3] ~", // G#5 C# G#5 C# G#5
  M: "[g#2,d#3] ~ [g#2,d#3] ~ [g#2,f3] ~ d#3 ~ [g#2,d#3] ~ d#3 ~ [g#2,f3] ~ [g#2,d#3] ~", // G#5 C# G#5 C# G#5
  N: "[f5,a#5]@2 [f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~", // A#5 B5
  O: "[f5,a#5]@2 [f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~ [f#5,b5]@2", // A#5 B5
  P: "[f5,a#5]@2 [f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~ f#5 ~", // A#5 B5
  Q: "[f5,a#5]@2 [f#5,b5] ~ [f5,a#5]@2 [f#5,b5] ~ [f5,a#5]@2 [f#5,b5] ~ [f5,a#5]@2 [f#5,b5] ~", // A#5 B5 A#5 B5 A#5 B5 A#5 B5
  R: "[b4,d#5]@2 e5 ~ [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [b4,e5]@2", // B E5
  S: "[b4,d#5]@2 [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [b4,e5] ~", // B E5
  T: "[c5,f5]@2 [c#5,f#5] ~ [c#5,f#5] ~ [c#5,f#5] ~ [c#5,f#5] ~ [c#5,f#5] ~ [c#5,f#5] ~ [c#5,f#5]@2", // F5 F#5
  U: "[a#4,d#5] ~ [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ e5 ~", // D#5 E5
  V: "[f5,a#5] ~ [f#5,b5] ~ [f5,a#5]@2 [f#5,b5] ~ [f5,a#5] ~ [f#5,b5] ~ [f5,a#5]@2 [f#5,b5] ~", // A#5 B5 A#5 B5 A#5 B5 A#5 B5
  W: "[f5,a#5]@2 [f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~ [f#5,b5]@2 [f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~", // A#5 B5
  X: "[f#5,b5] ~ [f#5,b5] ~ [f#5,b5]@2 [e5,g#5]@2 [d#5,f#5] ~ [d#5,f#5] ~ [d#5,f#5]@2 [e5,g#5] ~", // B5 E D#m E
  Y: "[f#5,b5] ~ [f#5,b5] ~ [f#5,b5]@2 [e5,g#5]@2 [d#5,f#5] ~ [d#5,f#5] ~ [d#5,f#5]@2 [e5,g#5]@2", // B5 E D#m E
  Z: "[f#5,b5] ~ [f#5,b5] ~ [f#5,b5]@2 [e5,g#5]@2 [d#5,f#5] ~ [d#5,f#5] ~ [d#5,f#5] ~ [d#5,f#5] ~", // B5 E D#m
  AA: "[a#4,d#5] [b4,e5] [a#4,d#5] [b4,e5] [a#4,d#5] [b4,e5] [a#4,d#5] [b4,e5]", // D#5 E5 D#5 E5 D#5 E5 D#5 E5
  AB: "[a#4,d#5]@2 [b4,e5]@2 [a#4,d#5]@2 [b4,e5]@2 [a#4,d#5]@2 [b4,e5]@2 [a#4,d#5]@2 [b4,e5] ~", // D#5 E5 D#5 E5 D#5 E5 D#5 E5
  AC: "[f5,c6]@2 [f#5,c#6] ~ [f#5,c#6] ~ [f#5,c#6] ~ [f#5,c#6] ~ [f#5,c#6] ~ [f#5,c#6]@2 [f#5,c#6]@2", // F5 F#5
  AD: "[d#5,a#5]@2 [e5,b5] ~ [e5,b5] ~ [e5,b5] ~ [e5,b5] ~ [e5,b5] ~ [e5,b5] ~ [e5,b5] ~", // D#5 E5
  AE: "[f#5,b5] ~ [f#5,b5]@2 [e5,g#5]@2 [d#5,f#5]@2 [f#5,b5] ~ [f#5,b5]@2 [e5,g#5]@2 [d#5,f#5] ~", AF: "[f#5,b5] ~@15",
  AG: "[b2,f#3] ~ [b2,f#3] ~ [b2,g#3] ~ [b2,f#3] ~@9", // B5 E B5
})).s("gm_acoustic_guitar_steel").gain(0.43)

// chords · acoustic guitar steel · "Gitarre" · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~ A B C@2 D ~@2 E A B C@2 D ~@2 E F G H@2 I ~@2 J F G H@2 I ~@2 J ~@2 K ~ L ~@4 M ~@14 A B C@2 D ~@2 E A B C@2 D ~@2 E
  F G H@2 I ~@2 J F G H@2 I ~@2 J A B C@2 D ~@3
>`.pickRestart({
  A: "~@4 b2 ~@5 b2 ~@3 b2 ~", B: "~@6 b2 ~@9", C: "~@6 b2 ~@7 b2 ~", D: "~@2 b2 ~@13", E: "~@6 b2 ~@3 b2 ~@5",
  F: "~@4 g#2 ~@5 g#2 ~@3 g#2 ~", G: "~@6 g#2 ~@9", H: "~@6 g#2 ~@7 g#2 ~", I: "~@2 g#2 ~@13", J: "~@6 g#2 ~@3 g#2 ~@5",
  K: "~@14 b5 ~", L: "~@2 b4 ~@13", M: "~@14 b4 ~",
})).s("gm_acoustic_guitar_steel").gain(0.29)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~ A B C D A D E F A B C D A D E F G H I J G J K L G H I J G J K L A B C D M N O P Q R P S A B C D M N O P Q R P T A B
  C D A D E F A B C D A D E F G H I J G J K L G H I J G J K L A B C D A D E U
>`.pickRestart({
  A: "b1 ~ b1 ~ d#2 ~ d#2@2 f#2 ~ f#2@2 g#2@2 f#2@2", B: "b1 ~ b1 ~ d#2 ~ d#2 ~ f#2 ~ f#2@2 g#2@2 f#2 ~",
  C: "b1 ~ b1 ~ d#2 ~ d#2@2 f#2 ~ f#2@2 g#2 ~ f#2@2", D: "b1 ~ b1@2 d#2 ~ d#2@2 f#2 ~ f#2@2 g#2@2 f#2@2",
  E: "b1 ~ b1@2 d#2 ~ d#2@2 f#2 ~ f#2@2 g#2 ~ f#2@2", F: "b1 ~ b1@2 d#2 ~ d#2@2 f#2 ~ f#2@2 g#2@2 f#2 ~",
  G: "g#1 ~ g#1 ~ c2 ~ c2@2 d#2 ~ d#2@2 f2@2 d#2@2", H: "g#1 ~ g#1 ~ c2 ~ c2 ~ d#2 ~ d#2@2 f2@2 d#2 ~",
  I: "g#1 ~ g#1 ~ c2 ~ c2@2 d#2 ~ d#2@2 f2 ~ d#2@2", J: "g#1 ~ g#1@2 c2 ~ c2@2 d#2 ~ d#2@2 f2@2 d#2@2",
  K: "g#1 ~ g#1@2 c2 ~ c2@2 d#2 ~ d#2@2 f2 ~ d#2@2", L: "g#1 ~ g#1@2 c2 ~ c2@2 d#2 ~ d#2@2 f2@2 d#2 ~",
  M: "e1 ~ e1 ~ g#1 ~ g#1 ~ b1 ~ b1 ~ c#2 ~ c#2 ~", N: "e1 ~ e1 ~ g#1 ~ g#1@2 b1 ~ b1 ~ c#2 ~ c#2 ~",
  O: "b1 ~ b1 ~ d#2 ~ d#2@2 f#2 ~ f#2@2 g#2 ~ g#2 ~", P: "b1 ~ b1@2 d#2 ~ d#2@2 f#2 ~ f#2@2 g#2 ~ g#2 ~",
  Q: "f#1 ~ f#1@2 a#1 ~ a#1@2 c#2 ~ c#2@2 d#2 ~ d#2 ~", R: "e1 ~ e1@2 g#1 ~ g#1@2 b1 ~ b1@2 c#2 ~ c#2 ~",
  S: "b1 ~ b1@2 d#2 ~ d#2@2 f#2 ~ f#2@2 g#2 ~ g#2@2", T: "b1 ~@15", U: "b1 ~ b1 ~ b1 ~ b1@2 ~@8",
})).s("gm_acoustic_bass").gain(0.48).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!55 x [x!2]!39 x>").gain(0.48)

// drums · snare
const snare = s("sd").struct("<A B@15 C B@15 C B@11 C B@11 D B@15 C B@15 C B@6 C E>".pickRestart({
  A: "x!7 ~", B: "~@2 x!2 ~@2 x ~", C: "x!3 ~ x!3 ~ x!3 ~ x!3 ~", D: "x", E: "x!3 ~ x ~ x ~ x ~@7",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~ [x!8]!55 x [x!8]!39 [x!4 ~@4]>").gain(0.36)

stack(drawbar_organ, acoustic_guitar_steel, acoustic_guitar_steel_2, bass, kick, snare, hihat)

More by Johnny & The Hurricanes