Strudelify

Big Spender

Shirley Bassey

KeyC minorTempo124 bpm
0:00/0:00
// Big Spender — Shirley Bassey
// 124 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 57 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/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.

// bass · acoustic bass
const bass = note(`<
  ~@4 A B C D E F G H I J K L M N O ~@5 P Q R S T U T V A B C D E F G H I J K L M N W X M N O ~ Y Z AA AB ~
>`.pickRestart({
  A: "c2@7 ~@5 g2@3 ~@3 g2@5 ~", B: "c2@5 ~@19", C: "ab2@3 ~ ab2@3 ~", D: "d2@3 ~ d2@3 ~", E: "g2@9 ~@3 g2@5 ~ b1@5 ~",
  F: "c2@9 ~@3 c2@7 ~@3 c2 ~", G: "ab1@11 ~ ab1@11 ~", H: "ab1@9 ~ g1 ~@13", I: "c2@9 ~@3 g2@3 ~@3 g2@5 ~",
  J: "c2@3 ~@5", K: "ab2@11 ~ ab2@11 ~", L: "d2@11 ~ d2@5 ~ d2@5 ~", M: "g2@5 ~ g2@5 ~ g2@3 ~@3 g2@5 ~",
  N: "g2@5 ~ c3@5 ~ g2@3 ~ c3@7 ~", O: "~@12 ab2@9 ~ g2 ~", P: "c2@5 ~@7 g1@5 ~@5 g1 ~", Q: "c2@7 ~@5 g1@5 ~@7",
  R: "d2@5 ~@7 a1@5 ~@7", S: "d2 ~@7", T: "ab2 ~ ab2 ~@5", U: "g2 ~@7", V: "g2@3 ~@7 g1@13 ~",
  W: "ab2@5 ~ ab2@5 ~ ab2@3 ~@3 ab2@5 ~", X: "ab2@5 ~ db3@5 ~ ab2@3 ~ db3@7 ~", Y: "c3@7 ~@3 c3 ~ bb2@7 ~@3 bb2 ~",
  Z: "a2@7 ~@3 a2 ~ ab2@7 ~@3 ab2 ~", AA: "g2@5 ~ g2@3 ~ eb2 ~ d2@5 ~ db2@5 ~", AB: "c2@5 ~@14 c2@4 ~",
})).s("gm_acoustic_bass").gain(0.3).pan(0.7)

// chords · piano
const piano = note("<A ~ A ~@17 A ~ A ~ B@2 C D E F E G ~@20 H I J K ~>".pickRestart({
  A: "[c2,c3] ~@5 [c2,c3] ~@3 [c2,c3] ~ [c2,c3]@5 ~ [bb1,bb2]@3 ~ [c2,c3] ~", // C Bb C
  B: "~@4 g5 ~ [c6,e6] ~@9 g5 ~ [c6,e6] ~@5", C: "[a3,c4,d4,f4] ~@11 [a3,c4,d4,f4] ~@11", D: "[a3,c4,d4] ~@23, f4 ~@11",
  E: "[bb3,c4,eb4,gb4] ~@5 [bb3,c4,eb4,gb4] ~@17", F: "[g3,b3,d4,f4] ~@7", G: "[g3,b3,d4,f4] ~@9 [g1,g2]@13 ~",
  H: "[c4,eb4,g4]@3 ~ [bb3,g4]@3 ~, ~@12 eb4@11 ~", I: "[c4,eb4]@11 ~ [ab3,c4,eb4]@11 ~, a3@3 ~@5",
  J: "[g3,c4,eb4]@11 ~ [a3,d4,f4]@5 ~ [ab3,db4,e4]@5 ~", K: "[g3,c4,e4] ~@18 [c3,g3,c4]@2 ~@3",
})).s("gm_piano").gain(0.35).pan(0.3)

// other · alto sax
const alto_sax = note(`<
  A ~ A ~ B C D E F G H@2 B C D E I J K ~ A ~ A ~@9 B C D E F G H@2 B C D E I J ~ L ~ J K ~ M N O P ~
>`.pickRestart({
  A: "c4 ~@2 c4 ~ c4 c4@3 bb3@2 c4", B: "~@3 g3", C: "c4 ~@11", D: "ab3", E: "a3", F: "b3@2 ~@7 b3 ~@2",
  G: "c4 ~@7 c4 bb3 ~ ab3", H: "[ab3@16 ~ g3 ~@6]/2", I: "b3 ~@5", J: "g3 ~@2 c4@2 ~ g3@2 c4@4", K: "~@6 ab3@5 g3",
  L: "ab3 ~@2 db4@2 ~ ab3@2 db4@4", M: "eb4@4 ~ eb4 eb4@4 ~ eb4", N: "eb4@5 eb4 eb4@4 ~ eb4", O: "eb4@2 d4 db4",
  P: "e4@2 ~@17 e4@4 ~",
})).s("gm_alto_sax").gain(0.3).pan(0.2)

// other · tenor sax
const tenor_sax = note(`<
  A ~ A ~ B C D@2 E F G@2 B H I@2 J K L ~ A ~ A ~@9 B C D@2 E F G@2 B H I@2 J K ~ M ~ K L ~ N@2 O P ~
>`.pickRestart({
  A: "c3@2 ~@4 c3@2 ~@2 c3 ~ c3@6 bb2@4 c3@2", B: "~@3 g3", C: "c3 ~@7", D: "[gb3@39 ~ d3 ~ d3@2 e3@2 gb3@2]/2",
  E: "g3 ~@5 f3 ~", F: "eb3@3 ~@13 c4@2 bb3@2 ~@2 ab3@2", G: "[ab3@33 ~ eb3@2 ~@12]/2", H: "c3 ~@5", I: "gb3/2",
  J: "g3@5 ~@19", K: "g3@3 ~@3 c4@3 ~@3 g3@4 c4@7 ~", L: "~@12 eb3@9 ~ eb3@2", M: "ab3@3 ~@3 db4@3 ~@3 ab3@4 db4@7 ~",
  N: "g3@9 ~ g3@2 g3@9 ~ g3@2", O: "g3@12 f3@6 e3@5 ~", P: "g3@4 ~@15 g3@3 ~@2",
})).s("gm_tenor_sax").gain(0.3).pan(0.8)

// other · trumpet
const trumpet = note(`<
  A ~ A ~@5 B ~ C D E F ~ G H I ~@2 A ~ A ~@3 J K L B L M ~@4 B ~ C D E F ~ N H O ~ P ~ O ~@2 Q@3 R ~
>`.pickRestart({
  A: "c4 ~@2 c4 ~ c4 c4@3 bb3@2 c4", B: "[b4,d5,g5] ~@11", C: "~@2 [gb4,bb4,d5] ~@3 [gb4,bb4,d5] ~@5",
  D: "[gb4,bb4,d5]@3 ~@2 [g4,b4,eb5] ~@6", E: "~@3 g3", F: "c5 ~@11",
  G: "~@4 ab4@2 db5@2 d5@2 ab4@2 db5@2 d5@2 ab4 ~ d5 ~ e5 ~ gb5 ~", H: "[g4,g5] ~@11",
  I: "[g4,g5]@2 ~ [c5,c6] ~@2 [g4,g5]@2 [c5,c6]@4", J: "[a4,d5,f5] ~@5 [a4,d5,f5] ~@5", K: "[a4,d5,f5] ~@11",
  L: "[c5,eb5,gb5] ~@2 [c5,eb5,gb5] ~@8", M: "[d5,f5,bb5] ~@11",
  N: "~@4 ab4@2 db5@2 d5@2 ab4@2 db5@2 d5@2 ab4@2 d5 ~ e5 ~ gb5 ~", O: "[g4,g5]@2 ~ [c5,c6]@2 ~ [g4,g5]@2 [c5,c6]@4",
  P: "[ab4,ab5]@2 ~ [db5,db6]@2 ~ [ab4,ab5]@2 [db5,db6]@4", Q: "~ c5 eb5 f5!2 eb5 f5!2 eb5 f5 eb5 c5",
  R: "c5@2 ~@15 g5 [a5,b5] c6@2 ~@3", // Asus2
})).s("gm_trumpet").gain(0.45)

// other · trumpet · C G
const trumpet_2 = note(`<
  ~@21
  [~@5 [c4,c5] ~@6]
  ~@30
  [~ c4 eb4 f4!2 eb4 f4!2 eb4 f4 eb4 c4]!3
  [c4@2 ~@16 [g4,a4,b4] c5@2 ~@3]
  ~
>`).s("gm_trumpet").gain(0.45)

// chords · muted trumpet · Cm
const muted_trumpet = note("<~@21 [~@9 [g4,c5,eb5,c6]@13 ~@2] ~@35>").s("gm_muted_trumpet").gain(0.45)

// other · trombone
const trombone = note(`<
  A ~ A ~ B C D E F G H@2 B I D J K L M ~ A ~ A ~@3 N O P Q P R B C D E F G H@2 B I D J K L ~ S ~ L M ~ T U V@2 ~
>`.pickRestart({
  A: "c2 ~@2 c2 ~ c2 c2@3 bb1@2 c2", B: "~@3 g2", C: "c3 ~@11", D: "ab2", E: "d2@7 ~ d2!2 e2 gb2", F: "g2 ~@11",
  G: "~@8 c3 bb2 ~ a2", H: "[ab2@17 g2 ~@6]/2", I: "c3 ~@5", J: "d2", K: "g2 ~@5", L: "g2@2 ~ c3 ~@2 g2@2 c3@4",
  M: "~@6 ab2@5 g2", N: "d2 ~@5 d2 ~@5", O: "d2 ~@11", P: "ab2 ~@2 ab2 ~@8", Q: "[g2,a2] ~@11", R: "g2 ~@4 g1@7",
  S: "ab2@2 ~ db3 ~@2 ab2@2 db3@4", T: "c3@4 ~ c3 bb2@4 ~ bb2", U: "a2@4 ~ a2 ab2@4 ~ ab2",
  V: "[g2@28 ~@2 g2@6 c3@4 ~@3 c2@2 ~@3]/2",
})).s("gm_trombone").gain(0.5).pan(0.3)

// other · trombone
const trombone_2 = note(`<
  A ~ A ~ B C D@2 E F G@2 B C H@2 I J K ~ A ~ A ~@3 L M N O N P B C D@2 E Q G@2 B C H@2 I J ~ R ~ J S ~ T U V@2 ~
>`.pickRestart({
  A: "c3 ~@2 c3 ~ c3 c3@3 bb2@2 c3", B: "~@3 g3", C: "c4 ~@11",
  D: "[[eb3,ab3]@12 [d3,a3]@8 d3!2 e3 gb3, [gb3,c4]@5 ~]/2", E: "g3 ~@8 [b2,d3,f3] ~@2",
  F: "[c3,eb3]@2 ~@14 c4@2 bb3@3 ~ a3@2", G: "[ab3@17 g3 ~@6]/2", H: "[[eb3,ab3] a3, c4, gb3@23 ~]/2",
  I: "[g3,b3] ~@11", J: "g3@2 ~ c4 ~@2 g3@2 c4@4", K: "~@6 [eb3,gb3,ab3,c4]@5 [eb3,g3,b3]", L: "d4 ~@5 a3 ~@5",
  M: "d3 ~@11", N: "[c4,eb4] ~@2 [c4,eb4] ~@8", O: "[d4,f4] ~@11", P: "[d4,f4] ~@4 g2@7", Q: "[c3,eb3] ~@7 c4 bb3@2 a3",
  R: "ab3@2 ~ db4 ~@2 ab3@2 db4@4", S: "~@6 [eb3,gb3,ab3]@4 ~ [eb3,g3,b3], ~@6 c4@5 ~",
  T: "[c3,c4]@4 ~ [c3,c4] [bb2,bb3]@4 ~ [bb2,bb3]", U: "[a2,a3]@4 ~ [a2,a3] [ab2,ab3]@4 ~ [ab2,ab3]",
  V: "[[g2,g3]@28 ~@2 [g2,g3]@6 [c3,c4]@2 ~@5 [c2,c3]@4 ~]/2", // G C
})).s("gm_trombone").gain(0.3).pan(0.7)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@24 A@2 B@2 C D C E ~@25>".pickRestart({
  A: "[c4@12 b3@11 ~ a3@12 g3 ~@9 a3 [b3,c4], e4@47 ~, g3@3 ~]/2", // Cmaj7
  B: "[d4@2 ~@8 e4 f4 a4@2 ~@8 [g4,a4,b4] d5@2 ~@23, ~@5 d4 ~@18, ~@11 g4@2 ~@10 c5 ~@24]/2", C: "gb5 ~@2 gb5 ~@8",
  D: "g5 ~@11", E: "bb5 ~@11",
})).s("gm_string_ensemble_1").gain(0.3)

// other · timpani
const timpani = note("<~@4 A B ~@2 C ~@3 D E ~@3 F ~@14 A B ~@2 C ~@3 D E ~@3 F ~ G ~ F ~@5 H ~>".pickRestart({
  A: "~@9 g2@2 ~", B: "c3 ~@7", C: "g2 ~@5", D: "~@6 g2 ~", E: "c3 ~@11", F: "g2@2 ~@4 c3 ~@5 g2 ~@3 c3 ~@7",
  G: "ab2@2 ~@4 db3 ~@5 ab2 ~@3 db3 ~@7", H: "~@19 c3@2 ~@3",
})).s("gm_timpani").gain(0.5)

// other · brass section
const brass_section = note(`<
  ~@8 A ~ B C ~@3 D E F ~@8 G H I J I J ~@4 A ~ B C ~@3 D E F ~ K ~ F ~@2 L@3 M ~
>`.pickRestart({
  A: "g5 ~@5, g4 ~@11", B: "~@2 d5 ~@3 d5 ~@5", C: "d5@5 eb5 ~@6", D: "~@2 ab4 db5 d5 ab4 db5 d5 ab4 d5 e5 gb5",
  E: "g5 ~@5", F: "g4@2 ~ [c5,c6]@2 ~ [g4,g5]@2 [c5,c6]@3 ~, g5 ~@11", G: "d5 ~@5 d5 ~@5", H: "d5 ~@11",
  I: "gb5 ~@2 gb5 ~@8", J: "g5 ~@11", K: "ab4@2 ~ [db5,db6]@2 ~ [ab4,ab5]@2 [db5,db6]@3 ~, ab5 ~@11",
  L: "~ c6 eb6 f6!2 eb6 f6!2 eb6 f6 eb6 c6", M: "c6@2 ~@16 [a5,b5] c6@2 ~@3",
})).s("gm_brass_section").gain(0.45)

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

// drums · snare
const snare = s("sd").struct(`<
  A ~ A ~ B ~@2 C ~@3 D ~@3 E F G ~@2 A ~ A ~ F@2 H I J I J K L I ~ M I ~@2 K N I ~ O F@6 ~ P F@3 Q ~
>`.pickRestart({
  A: "~@11 x", B: "~@6 x ~@15 x!2", C: "~@20 x!4", D: "~@3 x ~ x ~@6", E: "~@2 x ~@5 x!4", F: "~ x ~ x",
  G: "~@3 x ~ x!2 ~ x ~@3", H: "x!2", I: "x", J: "x!2 ~@2", K: "x ~ x!2 ~ x ~@6", L: "~@3 x ~@5 x!3", M: "~@6 x!6",
  N: "~@9 x!3", O: "~@4 x!8", P: "~@12 x ~ x ~@2 x ~@6", Q: "x ~@18 x ~@4",
})).gain(0.2)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@4 A ~@2 B ~@3 C D ~@2 E ~@27 F ~@13>".pickRestart({
  A: "~@18 x!4 ~@2", B: "~@12 x!8 ~@4", C: "x!2 ~@4", D: "~@18 x!6", E: "~@3 x!5 ~@4", F: "~@2 x!2 ~@8",
})).gain(0.05)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@4 A ~ B A B@3 C A ~ B ~@3 D ~@13 A ~ B A B@3 A@2 ~ B ~@7 D ~@6>".pickRestart({
  A: "~@5 x ~@6", B: "~@5 x ~@5 x", C: "~ x ~@4", D: "~@11 x",
})).gain(0.15)

// drums · low tom
const low_tom = s("lt").struct("<~@51 [~@7 x] ~@5>").gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<A ~ A ~@15 B ~ A ~ A ~@27 B ~@6>".pickRestart({
  A: "x!2", B: "~ x",
})).gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct("<~@51 [~@19 x ~@4] ~@5>").gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@16 x ~@27 x ~@7 x ~@4>").gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@51 [~@5 x ~@2] ~@5>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@16 A B ~@26 A B A B A B ~@2 A@3 C ~>".pickRestart({
  A: "x!4", B: "x ~@2 x ~@2 x ~ x ~@3", C: "x ~@18 x ~@4",
})).gain(0.3)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@16 A ~@14 B ~@12 A ~ A ~ A ~@3 A@3 ~@2>".pickRestart({
  A: "~@5 x ~@5 x", B: "~@5 x ~@6",
})).gain(0.15)

// drums · triangle
const triangle = s("triangles:35").struct("<~ [~@5 x ~@6] ~ [~@5 x ~@6] ~@17 [~@5 x ~@6] ~@35>").gain(3.46)

stack(
  bass, piano, alto_sax, tenor_sax, trumpet, trumpet_2, muted_trumpet, trombone, trombone_2, string_ensemble_1, timpani,
  brass_section, kick, snare, snare_soft, hihat, hihat_soft, low_tom, open_hat, mid_tom, crash, high_tom, ride,
  ride_soft, triangle
)