Strudelify

Out of My Head

Fastball

KeyE majorTempo80 bpm
0:00/0:00
// Out of My Head — Fastball
// 80 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 51 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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 · piano
const piano = note(`<
  ~ A B C D E F G C D F G C D A B C D A B C D E F G C D A B C D A B C D E H I B C D A B C J K L@4 ~
>`.pickRestart({
  A: "[e3,g#3,b3,e4] e2 [e3,g#3,b3,e4] e2 [b2,f#3,b3,d#4,f#4] b1 [b2,f#3,b3,d#4,f#4] b1", // E B
  B: "[c#3,e3,g#3,c#4] c#2 [c#3,e3,g#3,c#4] c#2 [g#2,g#3,b3,d#4] g#2 [g#2,g#3,b3,d#4] g#2", // C#m G#m
  C: "[a3,c#4,e4,a4] a2 [a3,c#4,e4,a4] a2 [e3,g#3,b3,e4] e2 [e3,g#3,b3,e4] e2", // A E
  D: "[f#3,a#3,c#4,f#4] f#2 [f#3,a#3,c#4,f#4] f#2 [b2,f#3,b3,d#4,f#4] b1 [b2,f#3,b3,d#4,f#4] b1", // F# B
  E: "[e3,a3,c#4,e4]@5 ~@3", F: "[e3,g#3,b3,e4] e2 [e3,g#3,b3,e4] e2 [e3,g#3,b3,e4] e2 [e3,g#3,b3,e4] e2",
  G: "[b2,b3,d#4,f#4,b4] b1 [b2,b3,d#4,f#4,b4] b1 [b2,b3,d#4,f#4,b4] b1 [b2,b3,d#4,f#4,b4] b1", // B
  H: "~ [a4,e5,g5] [e2,a4,e5,g5] [e2,e3,a4,e5,g5]!9 [b6,c7,d7,e7] [g5,a5,b5,c6,d6,e6,f6,g6,a6] [g4,a4,b4,c5,d5,e5,f5] [a3,b3,c4,d4,e4,f4,g4,a4]", // A7 Cmaj7 G7 Am7
  I: "[b2,c3,d3,f3,g3] a2 e2@2 [e3,g#3,b3,e4]@2 e2@2 [b2,f#3,b3,d#4,f#4]@2 b1@2 [b2,f#3,b3,d#4,f#4]@2 b1@2, [e3,g#3,b3,e4]@3 ~@13", // G7 E B E
  J: "[f#3,a#3,c#4,f#4] f#2 [f#3,a#3,c#4,f#4] f#2 [f#3,a#3,c#4,f#4] f#2 [f#3,a#3,c#4,f#4] f#2", // F#
  K: "[b2,f#3,b3,d#4,f#4] b1 [b2,f#3,b3,d#4,f#4] b1 [b2,f#3,b3,d#4,f#4] b1 [b2,f#3,b3,d#4,f#4] b1", // B
  L: "[[e3,a3]@16 [a3,c#4]@2 ~ c#4@3 b3@2 a3@7 ~@13 e4@14 ~@6, c#3@23 ~@9 [e2,g#3]@25 ~@7, ~@16 e3@15 e3@26 ~@7, ~@18 a3@4 a3 ~@10 b3@25 ~@6]/4", // A5 A E
})).s("gm_piano").gain(0.34).pan(0.8)

// other · rock organ · "Organo"
const rock_organ = note(`<
  ~ A B@4 C D E F C D E F G H I J K L M N ~@5 G H I J K L M N O@2 G H I J K L M P Q R@4 ~
>`.pickRestart({
  A: "e6@6 [f6,f#6] e6 g#6 b6@5 c#7 ~", // F#maj7
  B: "[[g6,g#6] f#6 e6@4 [c6,c#6] b5 ~ e6@5 f6 ~ c#6@5 ~ e6@2 [a#6,b6] g#6@2 [c#6,d#6,e6] e6 f#6@9 [g6,g#6] f#6 ~@4 c#6@16 c#6@4, ~@8 c#6@2 ~@4 f#6@2 ~@28 c6 ~@15 c6 ~@3, ~@15 e6@2 ~@23 e6@24]/4", // G#maj7 C#maj7 Bmaj7 C#m G#maj7
  C: "[e5,b5]", D: "[b5,f#6]", E: "[e5,a5] [e5,b5]", F: "[f#5,c#6] [b5,f#6]", G: "[e4,e5]@8 [b4,b5]@7 c5",
  H: "c#5!2 g#5!2, c#6 g#4", I: "[a4,a5] [e4,e5]", J: "[f#4,f#5] [b3,b5]", K: "e4@6 e4@2 [b4,b5]@6 b4 c5, e5@4 ~@3 c6",
  L: "c#5!2 g#4!2, c#6 g#5", M: "a4!2 [e4,e5]@2, a5 ~", N: "[f#4,f#5]@2 ~ b5, ~ [b3,b4]", O: "[e5@31 ~]/2",
  P: "[f#4,f#5]", Q: "[b4,b5]", R: "[~@33 e6@31, e5]/4",
})).s("gm_rock_organ").gain(0.22).pan(0.3)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~ A B C D E F G H I F G H I J K H I J K H I L F G H I J K H I J K H I L ~ J K H I J K H M N ~@2 O@2 ~
>`.pickRestart({
  A: "e2@8 b2@7 ~", B: "c#3 g#2", C: "a2 e2", D: "f#2 b2", E: "a2@15 ~", F: "e2@7 b1 e2@8", G: "b1@7 b1 c#2 b1@7",
  H: "a2@2 a2@2 e2@3 e2", I: "f#2@6 f#2@2 b1@6 c#2 b1", J: "e2@6 b1 e2 b2@6 b2@2", K: "c#3@3 c#3 g#2@3 g#2",
  L: "a2@3 ~@5", M: "f#2@3 f#2 f#2@4", N: "b2@4 b2 b2@3", O: "[e1@29 ~@3]/2",
})).s("gm_fretless_bass").gain(0.46)

// other · electric guitar jazz · "Punteo"
const electric_guitar_jazz = note("<~@22 A@2 B C D E ~@23>".pickRestart({
  A: "[~@2 c#4 d#4 e4 f#4@2 [g4,g#4]@2 b4 c#5@2 e5 f#5@2 g#5@2 e5@3 c#5 e5 f#5 g#5@2 e5@4 ~ e5 f#5]/2", // G#maj7
  B: "b4@4 b4 c#5@2 d#5@2 c#5 b4@4 b4 c#5", C: "a4@2 a4!2 b4 a4 b4 e5@2 e5 g#5@2 e5@3 ~",
  D: "~@2 f#5 b5 c#6 b5 c#6 ~ b5@2 c#6 e6 f#6 e6 f#6 ~", E: "e6@3 ~",
})).s("gm_electric_guitar_jazz").gain(0.51)

// drums · kick
const kick = s("bd").struct("<~ A@4 B A@16 B A@12 B ~ A@9 ~@5>".pickRestart({
  A: "x ~@2 x ~@3 x ~ x ~ x ~@4", B: "x",
})).gain(0.52)

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

// drums · low tom
const low_tom = s("lt").struct("<~@13 A ~@3 B ~@4 A ~@7 B ~@5 C ~@3 B ~@10>".pickRestart({
  A: "~@14 x!2", B: "~@15 x", C: "~@9 x ~@3 x!2 ~",
})).gain(0.52)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@17 A ~@12 A ~@5 B ~@3 A ~@10>".pickRestart({
  A: "~@7 x", B: "~@3 x",
})).gain(0.52)

// drums · open hat
const open_hat = s("oh").struct("<A ~@4 A ~@7 A ~@2 A B ~ A ~@9 A B ~ A ~@6 A B A@2 ~@8>".pickRestart({
  A: "~@7 x", B: "~@3 x",
})).gain(0.52)

// drums · high tom
const high_tom = s("ht").struct("<~@17 [~@13 x ~@2] ~@12 [~@13 x ~@2] ~@9 [~@13 x ~@2] ~@10>").gain(0.52)

// drums · crash
const crash = s("cr").struct("<~@5 A@2 ~@7 A ~@3 A ~@3 A@2 ~@3 A ~@3 A ~@3 A ~ A ~@3 A ~@4 A ~@4>".pickRestart({
  A: "x",
})).gain(0.52)

// drums · ride
const ride = s("rd").struct("<~@48 [x!7 ~@9] ~@2>").gain(0.33)

stack(
  piano, rock_organ, bass, electric_guitar_jazz, kick, snare, low_tom, pedal_hat, mid_tom, open_hat, high_tom, crash,
  ride
)

More by Fastball