Strudelify
Hello Josephine cover art

Hello Josephine

Scorpions

KeyB majorTempo165 bpm
0:00/0:00
// Hello Josephine — Scorpions
// 165 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 5 "#E.GUITAR2" Elec Gtr 2 -> overdriven guitar
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(165/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, A@4 for four bars: edit a riff to change every repeat.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@7 A@4 B@2 A@2 C B A D A@4 B@2 A@2 C E F A G H I J B@2 K A L M A D A@4 B@2 A@2 C B A D A@4 B@2 A N C B A O A@4 B@2 A
  J C B A D P Q P@2 R@2 P Q S T U V W A@3 X B A@2 C Y A Z
>`.pickRestart({
  A: "b1 ~ b1 ~ d#2 ~ d#2 ~ f#2 ~ f#2 ~ d#2 ~ f#2 ~", B: "e1 ~ e1 ~ g#1 ~ g#1 ~ b1 ~ b1 ~ g#1 ~ b1 ~",
  C: "f#1 ~ f#1 ~ a#1 ~ a#1 ~ c#2 ~ c#2 ~ a#1 ~ c#2 ~", D: "b1 ~@15",
  E: "[d#1,e1] ~ e1 ~ g#1 ~ g#1 ~ b1 ~ b1 ~ g#1 ~ b1 ~", F: "b1 ~ b1 ~ d#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~",
  G: "b1 ~ b1 ~ d#2 ~ f#2 ~ f#2 ~ f#2 ~ d#2 ~ f#2 ~", H: "b1 ~ b1 ~ d#2 ~ d#2 ~ f#2 ~@3 d#2 ~ f#2 ~",
  I: "b1 ~ b1 ~ d#2 ~ d#2 ~ f#2 ~ f#2 ~ d#2 ~ d#2 ~", J: "b1 ~ b1 ~ d#2 ~ d#2 ~ f#2 ~ f#2 ~ d#2@2 f#2 ~",
  K: "[a#1,b1] ~ b1 ~ d#2 ~ d#2 ~ f#2 ~ f#2 ~ d#2 ~ f#2 ~", L: "f#1 ~ f#1 ~ [a#1,b1] ~ a#1 ~ c#2 ~ c#2 ~ a#1 ~ c#2 ~",
  M: "e1 ~ e1 ~ g#1 ~ g#1 ~ [a#1,b1] ~ b1 ~ g#1 ~ b1 ~", N: "b1 ~ b1 ~ [d#2,e2] ~ d#2 ~ f#2 ~ f#2 ~ d#2 ~ f#2 ~",
  O: "b1 ~ b1 ~ d#2 ~ d#2 ~ f#2 ~ d#2 ~ d#2 ~ d#2 ~", P: "b1 ~@5 b1 ~ b1 ~@7", Q: "b1 ~@7 b1 ~@7",
  R: "e1 ~@5 e1 ~ e1 ~@7", S: "f#1 ~@5 f#1 ~ f#1 ~@7", T: "e1 ~@7 e1 ~@7", U: "b1 ~@3 b1@2 ~@2 b1 ~@3 b1@2 ~@2",
  V: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", W: "b1 ~ b1 ~ d#2 ~ [d#2,e2] ~ f#2 ~ f#2 ~ d#2 ~ f#2 ~",
  X: "e1 ~ [d#1,e1] ~ g#1 ~ g#1 ~ b1 ~ b1 ~ g#1 ~ b1 ~", Y: "e1 ~ e1 ~ g#1 ~ [a#1,b1] ~ b1 ~ b1 ~ g#1 ~ b1 ~",
  Z: "b1@7 ~",
})).s("gm_acoustic_bass").gain(0.64)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@7 A B C D E F G D H I B J K L B M N F L D H N B O B@2 P D I Q P D R S B J B@3 D T F B U V S B J B@2 L D W X B D H I
  Y Z B@3 D AA F B D AB I B J AC AD AC AE AF AG AC@2 AH AI AC J B@3 D T F B D V S B AJ
>`.pickRestart({
  A: "[d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,g#4,b4]@2 f#4 ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,g#4] ~ [d#4,f#4,b4] ~, ~@6 b4 ~", // B G#m B G#5 B
  B: "[d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,g#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,g#4,b4] ~ [d#4,f#4,b4] ~", // B G#m B G#m B
  C: "[d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,g#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,b4]@2 f#4 ~, ~@12 g#4 ~@3", // B G#m B G#m
  D: "[d#4,a4,b4] ~ [d#4,a4,b4] ~ [d#4,g#4,b4] ~ [d#4,g#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,g#4,b4]@2 f#4 ~", // B7 G#m B G#m
  E: "[g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,c#5,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,e5]@2 b4 ~, ~@12 c#5 ~@3", // E C#m E C#m
  F: "[g#4,d5,e5] ~ [g#4,d5,e5] ~ [g#4,c#5,e5] ~ [g#4,c#5,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,c#5,e5]@2 b4 ~", // E7 C#m E C#m
  G: "[d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,g#4]@2 f#4 ~, ~@4 g#4@2 ~@6 b4 ~@3", // B G#m B G#5
  H: "[a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,d#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,d#5,f#5]@2 c#5 ~", // F# D#m F# D#m
  I: "[g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,c#5,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,c#5,e5]@2 b4 ~", // E C#m E C#m
  J: "[d#4,f#4,b4] ~@15", // B
  K: "[d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,g#4,b4]@2 f#4 ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,g#4,b4] ~ [d#4,f#4,b4] ~", // B G#m B G#m B
  L: "[d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,g#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [g#4,b4] ~ [f#4,b4] ~, ~@6 d#4 ~", // B G#m B G#m B5
  M: "[d#4,a4,b4] ~ [d#4,a4,b4] ~ [d#4,g#4,b4] ~ [d#4,g#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,g#4]@2 f#4 ~, ~@12 b4 ~@3", // B7 G#m B G#5
  N: "[g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,c#5,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,c#5,e5] ~ [g#4,b4] ~", // E C#m E C#m G#m
  O: "[d#4,f#4] ~@15, b4 ~@7", // D#m
  P: "[d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,g#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,g#4,b4] ~ [d#4,f#4] ~", // B G#m B G#m D#m
  Q: "[g#4,d5,e5] ~ [g#4,d5,e5] ~ [g#4,c#5,e5] ~ [g#4,c#5,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,c#5] ~ [g#4,b4] ~, ~@6 e5 ~", // E7 C#m E C#5 G#m
  R: "[a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,d#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,d#5] ~ [a#4,c#5] ~, ~@6 f#5 ~", // F# D#m F# D#5 A#m
  S: "[g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,c#5,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,c#5] ~ [g#4,b4] ~, ~@6 e5 ~", // E C#m E C#5 G#m
  T: "[g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,c#5,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [c#5,e5] ~ [b4,e5] ~, ~@6 g#4 ~", // E C#m E C#m E5
  U: "[d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,g#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [g#4,b4]@2 [d#4,f#4] ~, ~@12 d#4 ~@3", // B G#m B G#m D#m
  V: "[c#5,f#5] ~ [c#5,f#5] ~ [a#4,d#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,d#5] ~ [a#4,c#5] ~, a#4 ~@5 f#5 ~", // F#5 D#m F# D#5 A#m
  W: "[g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,e5]@2 b4 ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [c#5,e5]@2 [g#4,b4] ~, ~@4 c#5 ~@7 g#4 ~@3", // E C#m E C#m G#m
  X: "[g#4,d5,e5] ~ [g#4,d5,e5] ~ [g#4,c#5,e5] ~ [g#4,c#5,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [c#5,e5]@2 [g#4,b4] ~, ~@12 g#4 ~@3", // E7 C#m E C#m G#m
  Y: "[d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [g#4,b4] ~ [f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,g#4,b4] ~ [d#4,f#4,b4] ~, ~@2 d#4 ~@5", // B G#m B5 B G#m B
  Z: "[d#4,f#4,b4] ~@7", // B
  AA: "[g#4,b4,e5] ~ [g#4,b4,e5] ~ [c#5,e5] ~ [b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,c#5,e5] ~ [g#4,b4,e5] ~, ~@2 g#4 ~@5", // E C#m E5 E C#m E
  AB: "[a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,d#5,f#5]@2 c#5 ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,f#5]@2 c#5 ~, ~@12 d#5 ~@3", // F# D#m F# D#m
  AC: "~@4 [d#4,f#4,b4] ~ [d#4,f#4,b4] ~@5 [d#4,f#4,b4] ~@3", // B
  AD: "~@4 [d#4,f#4,b4] ~ [d#4,f#4,b4] ~@5 [d#4,b4]@2 ~@2, ~@12 f#4 ~@3", // B G#m
  AE: "~@4 [d#4,a4,b4] ~ [d#4,a4,b4] ~@5 [d#4,a4,b4] ~@3", AF: "~@4 [e4,g#4,b4] ~ [e4,g#4,b4] ~@5 [e4,g#4,b4] ~@3",
  AG: "~@4 [e4,g#4,d5] ~ [e4,g#4,d5] ~@5 [e4,g#4]@2 ~@2, ~@12 d5 ~@3", // E7 E
  AH: "~@4 [f#4,a#4,c#5] ~ [a#4,c#5] ~@5 [a#4,c#5] ~@3, ~@3 f#4 ~@2 f#4 ~", // F# A#m
  AI: "~@4 [e4,g#4,b4] ~ [e4,g#4,b4] ~@5 [g#4,b4] ~@3, ~@6 e4 ~", AJ: "[d#4,f#4,b4]@7 ~@9",
})).s("gm_piano").gain(0.4).pan(0.6)

// chords · overdriven guitar · "#E.GUITAR2"
const overdriven_guitar = note("<~@30 A B C D E F@2 G H I J K ~@24 L M N O P Q R S T U V K ~@25>".pickRestart({
  A: "~@10 [f#4,b4] ~ [g#4,b4] ~ f#4 ~", B: "b4@2 g#4 ~ [f#4,b4] ~ [d#4,b4]@3 ~ [d#4,b4] ~ [f#4,b4]@2 d#4 ~, a4 ~@15",
  C: "[a4,b4]@2 [g#4,b4] ~ f#4@2 d#4@3 ~ [d#4,b4] ~ [f#4,b4]@2 d#4 ~", // Asus2 G#m B5
  D: "[a4,a#4] ~ f#4@2 d#4 ~ [a4,b4]@2 f#4 ~ d#4 ~ [a4,a#4,b4]@2 f#4 ~, b4@4 ~@2 a#4 ~@9", // A#maj7 Asus2
  E: "[a4,b4]@2 f#4 ~ d#4 ~ [a4,a#4] ~ f#4 ~ d#4 ~ [e4,f#4,b4]@2 d#4 ~, ~@3 b4 ~@4", // Asus2 A#maj7 Esus2
  F: "[[b4,e5]@3 ~ [b4,e5]@3 ~ [b4,e5]@2 g#4 ~ b4 ~ [d5,e5]@4 c#5 ~ b4 ~ g#4 ~ d5@2 b4 ~ g#4 ~ b4@2, ~@24 e5@4 ~@2 g4 ~]/2", // E5 Dsus2
  G: "~@2 [g#4,b4] ~ f#4@2 d#4 ~ [f#4,b4]@2 d#4 ~ f#4 ~ [a4,b4]@2", // G#m B5 Asus2
  H: "~@2 [g#4,a#4,b4]@2 ~@2 [f#4,b4]@4 d#4 ~ [f#4,b4]@2 d#4 ~", // G#m B5
  I: "[a#4,c#5]@3 ~ [a#4,c#5]@3 ~@3 g#4@2 f#4 ~ [g#4,b4]@2, b4 ~@3 b4 ~@3 [a#4,c#5]@4 ~@2 a#4 ~", // A#m G#m A#m
  J: "~@2 [g#4,b4]@3 ~ g#4@3 ~ f#4@2 e4@3 ~, ~@3 b4@4 ~", K: "[f#4,b4]", L: "~@10 [f#4,b4] ~ g#4@2 f#4 ~",
  M: "[a4,b4] ~ g#4 ~ f#4 ~ [d#4,b4]@3 ~ [d#4,b4] ~ [f#4,b4] ~ d#4 ~", // Asus2 G#m B5
  N: "[a4,b4] ~ b4@2 f#4 ~ [d#4,b4]@3 ~ [d#4,b4] ~ [f#4,b4]@2 d#4 ~, ~@2 g#4 ~@13", // Asus2 G#m B5
  O: "a4 ~ f#4@2 d#4 ~ [a4,a#4] ~ f#4@2 d#4 ~ [a4,b4]@2 f#4 ~, b4@2 ~ b4 ~@4", // A#maj7 Asus2
  P: "[a4,b4]@2 f#4 ~ d#4 ~ [a4,b4]@2 f#4 ~ d#4 ~ [a4,b4]@2 ~@2, ~@6 a#4 ~@9", // Asus2
  Q: "[b4,e5]@3 ~ [b4,e5]@3 ~ [b4,e5]@2 g#4 ~ b4 ~ [d5,e5]@2", // E5 Dsus2
  R: "~@2 [c#5,d#5,e5]@2 ~@2 [b4,e5]@4 g#4 ~ [b4,e5]@2 g#4 ~", // C#m E5
  S: "[g#4,b4]@3 ~ [g#4,b4]@3 ~ b4@2 f#4 ~ d#4 ~ [f#4,b4]@2, [f#4,g4] ~@7 g#4 ~@7", // G#m B5 Gmaj7
  T: "~@2 [f#4,b4]@3 ~ [f#4,b4]@4 d#4 ~ [f#4,b4]@2 d#4 ~", // B5
  U: "[a#4,c#5]@3 ~ [a#4,c#5]@3 ~ b4 ~ g#4@2 f#4 ~ [g#4,a#4,b4]@2, b4 ~@3 b4 ~@3 [a#4,c#5]@4 ~@4", // A#m G#m A#m
  V: "~@2 [g#4,b4]@2 ~@2 g#4@3 ~ f#4@2 e4@2 ~@2, ~@3 b4@3 ~@2, ~@6 a#4 ~@9", // G#m
})).s("gm_overdriven_guitar").gain(0.56).pan(0.4)

// chords · overdriven guitar · "#E.GUITAR2" · soft notes
const overdriven_guitar_soft = note("<~@30 A B C ~ B ~ D@2 ~@28 E F G ~ H ~@2 I ~@2 J ~@26>".pickRestart({
  A: "~@14 b4 ~", B: "a#4 ~@15", C: "~@4 b4@5 ~@7", D: "[~@2 e5 ~ e5 ~@10 g#4@2 ~@3 b4@2 ~@10]/2", E: "~@6 b4 ~",
  F: "~@2 b4 ~ b4 ~@11", G: "~@6 g#4 ~", H: "~@10 b4 ~@3 [c#4,d#4] ~", I: "~@4 a#4 ~@3 a#4 ~@7", J: "~ a#4 ~@6",
})).s("gm_overdriven_guitar").gain(0.32).pan(0.4)

// chords · drawbar organ · "ORGAN 1"
const drawbar_organ = note(`<
  ~@7 A@4 B@2 C@2 D E F ~ G@4 H@2 C@2 I E F ~ G@4 B@2 J@2 D K L ~ G@4 M@4 D K L ~ N@4 O@2 P@2 D K L ~ G@4 O@2 Q@2 R S L
  ~@13 G@4 O@2 T@3 K U@2
>`.pickRestart({
  A: "[b5@56 a5@7 ~, [f#5,d#6]]/4", B: "[b5@15 ~ d6@15 ~, [g#5,e6]]/2", C: "[[f#5,b5,d#6]@31 ~]/2", D: "[f#5,a#5,c#6]",
  E: "[g#5,b5,e6]@15 ~", F: "[f#5,b5,d#6]", G: "[b5@48 a5@15 ~, [f#5,d#6]]/4", H: "[g#5,b5,e6]/2",
  I: "[a#5,c#6], f#6@7 ~", J: "[f#5,b5,d#6]/2", K: "[e5,g#5,b5]", L: "[d#5,f#5,b5]",
  M: "[[e5,g#5]@31 ~ [f#5,d#6]@31 ~, b5]/4", N: "[~@48 a5@15 ~, f#5@63 ~, b5@3 ~, d#5 ~, ~ d#6@7]/4",
  O: "[b5@16 d6@15 ~, [e5,g#5]]/2", P: "[d#5@4 d#6@3 [f#5,b5,d#6], [f#5,b5]@7 ~]/2",
  Q: "[~@16 d#6@15 ~, [d#5,f#5,b5]@31 ~]/2", R: "[f#5,a#5,c#6]@3 [f#5,a#5,c#6]", S: "[e5,g#5,b5]@11 ~ [e5,g#5,b5]@3 ~",
  T: "[d#5@16 d#6@15 ~ [a#5,c#6]@16, f#5@47 ~, b5@2 ~]/3", U: "[[d#5,f#5,b5]@9 ~@7]/2",
})).s("gm_drawbar_organ").gain(0.4)

// drums · kick
const kick = s("bd").struct("<[x!4]!79 [x ~@2 x!2 ~@3]!10 [x!4]!13 ~>").gain(0.8)

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

// drums · clap
const clap = s("cp").struct("<A@5 ~ A@11 ~ A@11 ~ A@11 ~ A@11 ~ A@11 ~ A@11 ~ A@11 ~@2 A@10 ~@2>".pickRestart({
  A: "~@2 x!2 ~@2 x ~",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@5 A ~@11 A ~@11 A ~@11 A ~@11 A ~@11 A ~@11 A ~@11 A ~@11 A ~>".pickRestart({
  A: "~@12 x!4",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@5 A ~@11 A ~@11 A ~@11 A ~@11 A ~@11 A ~@11 A ~@11 A ~@11 A ~>".pickRestart({
  A: "~@8 x!4 ~@4",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@5 A ~@11 A ~@11 A ~@11 A ~@11 A ~@11 A ~@11 A ~@11 A ~@11 A ~>".pickRestart({
  A: "~@4 x!4 ~@8",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@6 A ~@11 A ~@11 A ~@11 A ~@11 A ~@11 A ~@11 A ~@23 A>".pickRestart({
  A: "x",
})).gain(0.8)

stack(
  bass, piano, overdriven_guitar, overdriven_guitar_soft, drawbar_organ, kick, snare, clap, low_tom, mid_tom, high_tom,
  crash
)

More by Scorpions