Strudelify
Hello Mary Lou cover art

22 piraten favorieten, 7

Hello Mary Lou

Bobby Prins

KeyB♭ majorTempo192 bpm
0:00/0:00
// Hello Mary Lou — Bobby Prins
// 192 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 synth strings 1 (copy of ch 1 string ensemble 1)
// note: Full arrangement: all 132 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(192/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 · piano
const bass = note("<db-1 ~@131>").s("gm_piano").gain(0.05)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@7 A B C@2 D@4 A B E F@2 G H I@2 J K@6 B J L@4 H M A B N@6 A B E O@2 G H B A B C@2 P@2 Q@2 A B E R S T H U@2 ~@3 B J
  V@2 W@4 B J X@2 Y@2 H Z A B AA@4 AB@2 A B E R S AC H B A B C@2 AD@4 A B E AE@3 AF B S T H B S T H B ~
>`.pickRestart({
  A: "[bb3,d4,f4]@5 ~ [bb3,eb4,g4] ~", B: "[bb3,d4,f4]@7 ~", C: "[[bb3,eb4,g4]@31 ~]/2",
  D: "[[bb3,d4]@29 ~@3 c4@28 ~@4, f4@61 ~@3, ~@31 eb4@30 ~@3, ~@8 a3@3 ~@5]/4", E: "[d4,gb4]@15 ~, c4@13 ~@3",
  F: "[d4@8 bb3@7 ~, g4@31 ~, bb3@7 ~ e4@6 ~@2]/2", G: "[a3,eb4,f4]@7 ~", H: "[bb3,d4,f4]@3 ~ [bb3,eb4,g4]@3 ~",
  I: "[[bb3,d4,f4]@15 ~]/2", J: "[bb3,eb4,g4]@3 ~ [bb3,d4,f4]@3 ~",
  K: "[eb4@16 db4@15 ~ d4@28 ~@4 [c4,eb4]@29 ~@3, bb3@61 ~@3 a3@18 ~@14, g4@32 f4@61 ~@3]/6", // Cm
  L: "[eb4@15 ~ db4@15 ~ d4@12 ~@4 [a3,eb4]@13 ~@3, bb3@45 ~@19, g4@31 ~ f4@29 ~@3]/4", M: "[bb3,d4,f4]@13 ~@3",
  N: "[[eb4,g4]@31 ~ d4@31 ~ [c4,eb4]@28 ~@4, bb3@61 ~@35, ~@31 f4@60 ~@5]/6", O: "[d4@16 e4@13 ~@3, [bb3,g4]@31 ~]/2",
  P: "[[bb3,f4]@15 ~, d4@7 ~]/2", Q: "[~@19 c4@10 ~@3, [eb4,f4]@15 ~, a3@21 ~@11]/2", R: "[bb3,d4,g4]@7 ~",
  S: "[bb3,g4]@7 ~, e4@3 ~", T: "[a3,eb4,f4]@3 ~", U: "[[bb3,d4,f4]@9 ~@7]/2",
  V: "[eb4@15 db4@14 ~@3, [bb3,g4]@31 ~]/2", W: "[d4@31 ~ c4@27 ~@5, f4@59 ~@5, bb3@29 ~@2 eb4@28 ~@5]/4",
  X: "[bb3@15 db4@12 ~@5, [eb4,g4]@15 ~]/2", Y: "[d4@16 [a3,eb4]@13 ~@3, f4@29 ~@3, bb3@13 ~@19]/2",
  Z: "[bb3,d4,f4]@5 ~@3", AA: "[[eb4,g4]@32 [d4,f4]@29 ~@3, bb3@61 ~@3]/4", AB: "[[c4,eb4,f4]@29 ~@3]/2",
  AC: "a3@8 c4@5 ~@3, [eb4,f4]@7 ~", AD: "[[bb3,d4,f4]@15 ~ [c4,eb4]@15 ~, ~@31 f4@29 ~@4]/4",
  AE: "[d4@8 e4@7 ~ eb4@7 ~, [bb3,g4]@31 f4@14 ~@3, ~@8 c4@3 ~]/3", // Eb
  AF: "[bb3,d4,f4]@5 ~@3 [eb4,g4]@5 ~@3, ~@8 bb3@3 ~@5", // Bb Eb
})).s("gm_string_ensemble_1").gain(0.19).pan(0.3)

// bass · electric bass finger
const bass_2 = note(`<
  ~@3 A B A B C D E F G D H I C J K L M N O P Q R S T Q D H I Q U S F D V O P W D E F C D X I C D K Y M Z O P C D AA T
  C@2 AB I C D K AC M Z AD P AE ~@2 AF AG D S F Q D H AH Q AI S F D AJ O AK AL D E F C AM AN I C D K AC M Z AD P AL D
  T@2 C AO AP I C D K AC AQ AB AD C M Z C@2 M Z AD AR@2
>`.pickRestart({
  A: "bb1@5 ~@3 f2@6 ~@2", B: "bb1@5 ~ db2@2 d2@4 f2@4", C: "bb1@2 ~ bb1 f1@2 g1@2", D: "bb1@2 ~ bb1 f1@2 bb1@2",
  E: "eb2@5 ~@3 bb1@8", F: "eb2@2 ~ eb2 bb1@2 eb2@2", G: "bb1@7 ~ f1@7 ~", H: "f1@5 ~@3 c2@7 ~", I: "f2 f1 g1 a1",
  J: "bb1@7 ~ f1@4 bb1@4", K: "d2@5 ~ d2@2 a1@4 d2@4", L: "g1@2 ~ g1 d1@2 g1@2", M: "c2@2 ~ c2 g1@2 c2@2",
  N: "f2@3 ~@3 f2@2 c2@4 f2@2 ~@2", O: "bb1@3 ~ eb2@3 ~", P: "bb1 ~ f1@2 g1@2 a1@2", Q: "bb1@2 ~@2 f1@3 ~",
  R: "bb1@4 ~@2 bb1@2 f1@4 g1@3 ~", S: "eb2@6 ~@2 bb1@5 ~@3", T: "eb2@2 ~ eb2 bb1@2 c2@2", U: "bb1@2 ~ bb1 f1@2 g1 ~",
  V: "f2@2 ~ f2 c2@3 ~", W: "bb1@6 ~@2 f1@3 ~ g1@4", X: "f2@5 ~@3 c2@8", Y: "g1@4 ~@2 g1 ~ g1@4 d2@4",
  Z: "f2@2 ~ f2 c2@2 f2@2", AA: "eb2@5 ~ eb2@2 g1@4 bb1@4", AB: "f2@2 ~ f2 c2@2 d2@2", AC: "g1@2 ~ g1 d2@2 g1@2",
  AD: "bb1@7 ~ eb2@7 ~", AE: "bb1 ~@3", AF: "~ f1 g1 a1", AG: "bb1@5 ~@3 f1@6 ~@2", AH: "f2 ~ f1@2 g1@2 a1@2",
  AI: "bb1@5 ~@3 f1@5 ~@3", AJ: "f2@8 f1@7 ~", AK: "bb1@2 ~@2 f1@3 ~ g1@3 ~ a1@2 ~@2", AL: "bb1@5 ~@3 f1@4 g1@4",
  AM: "bb1@2 ~ bb1 g1@2 bb1@2", AN: "f1@2 ~ f1 a1@2 c2@2", AO: "bb1 ~@3 bb1@4 a1@4 g1@4", AP: "f1@5 ~ f1@2 a1@4 c2@4",
  AQ: "c2@2 ~ c2 g1@2 a1@2", AR: "[bb1 ~@3 bb1@2 ~@2 bb1@14 ~@10]/2",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@3 A B A B C A D@2 A@2 E F C A G H I J K L A M D N A@2 E O A M D P Q J R S C A D T U Q E V C A G W X J Y Z AA AB AC
  AD Q U AE AF AG A AH W I AI R Z AJ ~@3 AK M D P U AL AE AM AN AO AP P U AQ R S C A D T U@2 E AM C A G W I J AR AS C A
  D T U@2 E AM C A G W I J K AT X AU AV AW X J AV AX ~
>`.pickRestart({
  A: "~@4 [f3,bb3,d4] ~ [f3,bb3,d4] ~@5 [f3,bb3,d4] ~@3", B: "~@4 [f3,bb3,d4] ~@7 [f3,bb3,d4]@2 ~@2",
  C: "~@4 [f3,bb3,d4] ~ [f3,bb3,d4] ~@5 [g3,bb3,eb4]@2 ~@2", D: "~@4 [g3,bb3,eb4] ~ [g3,bb3,eb4] ~@5 [g3,bb3,eb4] ~@3",
  E: "~@2 [f4,a4,f5,a5] [c4,c5] [eb4,g4,eb5,g5] [f4,a4,f5,a5] ~ [c4,c5]", // F C Eb F C
  F: "[f4,a4,f5,a5] [c4,c5] [eb4,g4,eb5,g5] [f4,a4,f5,a5] ~@4", // F C Eb F
  G: "~@4 [a3,c4,d4,gb4] ~ [a3,c4,d4,gb4] ~@5 [a3,c4,d4,gb4]@2 ~@2", // D7
  H: "~@4 [bb3,d4,g4] ~ [bb3,d4,g4] ~@5 [bb3,d4,g4]@2 ~@2", // Gm
  I: "~@4 [bb3,c4,e4,g4] ~ [bb3,c4,e4,g4] ~@5 [bb3,c4,e4,g4]@2 ~@2", // C7
  J: "~@4 [a3,c4,eb4,f4] ~ [a3,c4,eb4,f4] ~@5 [a3,c4,eb4,f4] ~@3", // F7
  K: "~@4 [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4]@2 ~@2 [bb3,eb4,g4] ~", L: "[bb3,d4,f4]@3 ~",
  M: "~@4 [g3,bb3,eb4] ~ [g3,bb3,eb4] ~@5 [f3,bb3,d4] ~@3", N: "~@4 [g3,db4,eb4] ~ [g3,db4,eb4] ~@5 [g3,bb3,eb4]@2 ~@2",
  O: "[f4,a4,f5,a5] [c4,c5] [eb4,g4,eb5,g5] [c4,f4,a4,f5,a5]@3 ~@2", // F C Eb F
  P: "~@4 [g3,bb3,db4,eb4] ~ [g3,bb3,db4,eb4]@2 ~@4 [g3,bb3,db4,eb4]@2 ~@2", // Eb7
  Q: "~@4 [bb3,d4,f4] ~ [bb3,d4,f4] ~@5 [bb3,d4,f4]@2 ~@2", // Bb
  R: "~@4 [bb3,d4,f4,bb4]@2 ~@2 [bb3,eb4,g4,bb4] ~ [bb3,eb4,g4,bb4]@2 ~@2 [bb3,eb4,g4,bb4] ~", S: "[bb3,d4,f4,bb4] ~",
  T: "~@4 [g3,bb3,eb4] ~ [g3,bb3,eb4] ~@5 [g3,bb3,eb4]@2 ~@2", // Eb
  U: "~@4 [bb3,d4,f4] ~ [bb3,d4,f4]@2 ~@4 [bb3,d4,f4]@2 ~@2", // Bb
  V: "[f4,a4,f5,a5]@2 c5 ~ [eb4,g4,eb5,g5]@2 [f4,a4,f5,a5]@7 ~@3, ~@2 c4@11 ~@3", // F Eb F
  W: "~@4 [bb3,d4,g4] ~ [bb3,d4,g4]@2 ~@4 [bb3,d4,g4]@2 ~@2", // Gm
  X: "~@4 [bb3,e4,g4] ~ [bb3,e4,g4]@2 ~@4 [bb3,e4,g4]@2 ~@2", // Edim
  Y: "~@4 bb3 ~ bb3 ~ [bb3,eb4,g4,bb4] ~ [bb3,eb4,g4,bb4]@2 ~@2 [bb3,eb4,g4,bb4] ~, ~ [d4,f4,bb4] ~@2", // Eb Bb
  Z: "[bb3,d4,f4,bb4]@15 ~", AA: "~@4 [bb3,d4,f4] ~ [bb3,d4,f4] ~@5 [bb3,eb4,g4] ~@3",
  AB: "~@4 [bb3,d4,f4] ~ [bb3,d4,f4] ~@5 [bb3,d4,f4] ~@3", AC: "~@4 [bb3,eb4,g4] ~ [bb3,eb4,g4] ~@5 [g3,bb3,eb4] ~@3",
  AD: "~@4 [bb3,eb4,g4] ~ [bb3,eb4,g4] ~@5 [bb3,eb4,g4] ~@3", // Eb
  AE: "~@4 [f4,a4,f5,a5]@2 [c4,c5]@2 [eb4,g4,eb5,g5] ~ [f4,a4,f5,a5]@2 ~@2 [c4,c5]@2", // F C Eb F C
  AF: "[f4,a4,f5,a5]@2 [c4,c5]@2 [eb4,g4,eb5,g5]@2 [f4,a4,f5,a5]@7 ~@3", // F C Eb F
  AG: "~@4 [f3,bb3,d4] ~ [f3,bb3,d4]@2 ~@4 [g3,bb3,eb4]@2 ~@2", // Bb Eb
  AH: "~@4 [a3,c4,d4,gb4] ~ [a3,c4,d4,gb4]@2 ~@4 [a3,c4,d4,gb4]@2 ~@2", // D7
  AI: "~@4 [a3,c4,eb4,f4] ~ [a3,c4,eb4,f4]@2 ~@4 [a3,c4,eb4,f4]@2 ~@2", AJ: "[bb3,d4,f4,bb4] ~@15",
  AK: "~@4 [f3,bb3,d4] ~ [f3,bb3,d4] ~@5 [f3,bb3,d4]@2 ~@2", AL: "~@4 [bb3,d4,f4] ~ [bb3,d4,f4]@2 ~@4 [bb3,d4,f4] ~@3",
  AM: "[f4,a4,f5,a5]@2 c4@2 [eb4,g4,eb5,g5] ~ [c4,f4,a4,f5,a5]@7 ~@3, ~@2 c5 ~@13", // F Eb F
  AN: "~@2 db4 ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~@5 [f3,bb3,d4] ~@3", // Bb
  AO: "~@4 [g3,bb3,eb4] ~ [g3,bb3,eb4] ~@5 [f3,bb3,d4]@2 ~@2", // Eb Bb
  AP: "~@4 [g3,bb3,eb4] ~ [g3,bb3,eb4] ~@5 [g3,bb3,db4,eb4]@2 ~@2", // Eb Eb7
  AQ: "~@4 [a3,c4,eb4,f4] ~ [a3,c4,eb4,f4]@2 ~@4 [a3,c4,db4,eb4,f4] ~@3", // F7
  AR: "~@4 [f3,bb3,d4]@2 ~@2 [g3,bb3,eb4] ~ [g3,bb3,eb4]@2 ~@2 [g3,bb3,eb4] ~", AS: "[f3,bb3,d4]@5 ~ [f3,bb3,d4] ~",
  AT: "[bb3,d4,f4]@9 ~@3 [bb3,d4,f4]@2 ~@2", AU: "~@4 [a3,c4,eb4,f4] ~ [a3,c4,eb4,f4] ~@5 [a3,c4,eb4,f4]@2 ~@2",
  AV: "~@4 [bb3,d4,f4,bb4]@2 ~@2 [bb3,eb4,g4,bb4] ~ [bb3,eb4,g4,bb4] ~@3 [bb3,eb4,g4,bb4] ~", // Bb Eb
  AW: "[bb3,d4,f4,bb4]@10 ~@2 [bb3,d4,f4,bb4] ~@3", // Bb
  AX: "[bb3,d4,f4,bb4] ~@3 [bb3,d4,f4,bb4] ~ [bb3,d4,f4,bb4] ~ [bb3,d4,f4,bb4]@2 ~@6", // Bb
})).s("gm_electric_guitar_clean").gain(0.28).pan(0.7)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@21 A B ~@14 A C ~@14 A D E F G H I J K L M N@3 O P Q R ~@18 A S ~@14 A B ~@14 A D ~@2 A D ~@2 A T ~
>`.pickRestart({
  A: "d4@2 bb4 d4 eb4 bb4 eb4@2", B: "d4@5 ~@3", C: "d4 ~@3", D: "d4 ~", E: "~@4 bb4@4 ~@2 [ab4,bb4] ~ g4@4",
  F: "f4@4 ~@2 eb4 ~ d4@2 bb3@5 ~", G: "~@4 eb5@5 ~ db5@2 c5@3 ~", H: "bb4@6 ab4 ~ g4@2 eb4@6",
  I: "~@4 bb4@4 ~@2 ab4 ~ g4@4", J: "f4 ~@3 d4@4 eb4 ~@3 e4 ~@3", K: "a4@2 f5@2 ~@2 g4@2 eb5@3 ~ f4@2 d5@2",
  L: "~ eb4 c5 ~ [d4,bb4] [c4,a4] ~@2", M: "~@4 bb4@4 ~@2 [ab4,bb4] ~ g4@3 ~",
  N: "[f4@4 ~@2 eb4 ~ d4@2 c4@2 ~@2 d4@6 d5@2 ~@4 c5@2 ~@2 bb4@12 ~@6, ~@14 eb4 ~@33]/3", O: "d4 e4 g4 ~ e4 d4 c4 ~",
  P: "g4@2 a4@2 c5@3 ~ a4@2 g4@2 f4@4", Q: "bb4@2 ~@2 bb4@4 [g4,bb4]@2 f4@2 d4@3 ~", R: "bb3@3 ~", S: "d4@13 ~@3",
  T: "d4@2 ~@2 [d4,bb4] ~ [d4,bb4] ~ [d4,bb4]@2 ~@6", // Gm
})).s("gm_overdriven_guitar").gain(0.32).pan(0.2)

// drums · kick
const kick = s("bd").struct("<~@3 [x!2]!128 ~>").gain(0.37)

// drums · clap
const clap = s("cp").struct("<~@7 [~ x ~ x]!16 ~@16 [~ x ~ x]!36 ~@16 [~ x ~ x]!39 [~ x!2 ~] ~>").gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<~@3 [x!8]!127 [x!5 ~@3] ~>").gain(0.26)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@19 A ~@15 A ~@7 A ~@7 A ~@15 A ~@3 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~@6 B ~
>`.pickRestart({
  A: "x", B: "~ x",
})).gain(0.26)

// drums · cowbell
const cowbell = s("cb").struct("<~@3 [x ~@2 x!2 ~@3]!127 [x ~ x!3 ~@3] ~>").gain(0.26)

// drums · claves
const claves = s("clave:2").struct(`<
  ~@3 A B A B A B C B A B C B A B A B A B A B C B A B D B A B A B C E A B A B A B A B A B C E C B A B A B A B A B A B A
  B A F A B A B A B A B A B A B A F A B A B A G A B A B A B A C A B A B A B A H A B A C A B A C A B G B A C D B A B A C
  A D A C A B A C A@3 I ~
>`.pickRestart({
  A: "~@2 x!2 ~ x ~ x", B: "~@3 x ~ x ~@2", C: "~@2 x!2 ~ x ~@2", D: "~@3 x ~ x ~ x", E: "~ x ~ x ~@4",
  F: "~@3 x ~@2 x!2", G: "~@2 x ~@2 x ~ x", H: "~@2 x!2 ~@2 x ~", I: "~@3 x!2 ~@3",
})).gain(1.03)

// drums · lt
const lt = s("lt").struct("<~@3 [~@2 x!2 ~@2 x ~]!127 [~@2 x!2 ~@4] ~>").gain(0.32)

stack(
  bass, string_ensemble_1, bass_2, electric_guitar_clean, overdriven_guitar, kick, clap, hihat, crash, cowbell, claves,
  lt
)