Strudelify

the sims 2 apartment life

Mark Mothersbaugh

KeyE♭ majorTempo140 bpm
0:00/0:00
// the sims 2 apartment life — Mark Mothersbaugh
// 140 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5872422; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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("<~@4 A@8 B@8 C@4 D@7 E@2 F@4 G@8 H@6 I@3 A@8 B@8 C@4 D@7 E@2 F@4 G@8 H@6 I@3 ~>".pickRestart({
  A: "[~@47 g3@16 ~, g4@9 ab3 f3@7 bb3@16 eb4@10 d3@16 ~@5, ~ eb4@10 d3@16 ~@8 bb3@11 ab3@16 ~@2, ~@2 c4@6 c4@7 g3@16 ~@3 c4@6 c4@16 ~@8, ~@3 bb3@11 ab3@16 ~@2 g4@9 ab3 f3@16 ~@6]/8",
  B: "[~@49 bb3@15, g4@9 f4@8 eb4@16 eb4@10 d3@16 ~@5, ~ ab4@9 bb3 ab3@16 ~@7 c4@6 c4@7 g3@16 ~, ~@2 eb4@6 eb4@6 bb3@16 ~@2 g4@9 ab3 f3@16 ~@6, ~@3 c4@12 g3@16 ~@4 bb3@11 ab3@16 ~@2]/8",
  C: "[~@15 g3@16 ~, g4@9 ab3 f3@16 ~@6, ~ eb4@10 d3@16 ~@5, ~ c4@3 c4@8 ~@4, ~@3 bb3@11 ab3@16 ~@2]/4",
  D: "[~@6 b4, g4@9 f4@8 eb4@16 g4@16 ~@7, ~ ab4@9 bb3 ab3@16 ~@4 f4@16 ~@9, ~ eb4@3 eb4@3 bb3@8 bb3@8 d4@5, ~@3 c4@12 g3@16 ~@14 eb4@2 eb4@9]/7",
  E: "[~ bb4, ~@8 eb4@5 eb4@19, ~@11 d4@21]/2", F: "[~ c5, ~@5 eb4@2 eb4@9, ~@3 d4@5]/2",
  G: "[~@57 g5@7, ~@3 bb4@8 bb4@8 bb4@8 bb4@5, ~@7 d5@16 f5@16 d5@16 f5@9, ~@9 eb5@16 g5@16 eb5@16 ~@7]/8",
  H: "[~@41 g5@7, ~@3 bb4@8 bb4@8 bb4@5, ~@7 d5@16 f5@16 f5@9, ~@9 eb5@16 g5@16 ~@7]/6",
  I: "[~@3 f5@5, ~@3 bb4@8 ~, ~@7 g5@16 ~]/3",
})).s("gm_piano").gain(0.4)

// chords · glockenspiel
const glockenspiel = note("<~@37 A@8 B@6 C@3 ~@33 A@8 B@6 C@3 ~>".pickRestart({
  A: "[~@57 g7@7, ~@3 bb6@8 bb6@8 bb6@8 bb6@5, ~@7 d7@16 f7@16 d7@16 f7@9, ~@9 eb7@16 g7@16 eb7@16 ~@7]/8",
  B: "[~@41 g7@7, ~@3 bb6@8 bb6@8 bb6@5, ~@7 d7@16 f7@16 f7@9, ~@9 eb7@16 g7@16 ~@7]/6",
  C: "[~@3 f7@5, ~@3 bb6@8 ~, ~@7 g7@16 ~]/3",
})).s("gm_glockenspiel").gain(0.45)

// chords · vibraphone
const vibraphone = note("<~@37 A@8 B@6 C@3 ~@33 A@8 B@6 C@3 ~>".pickRestart({
  A: "[~@57 g5@7, ~@3 bb4@8 bb4@8 bb4@8 bb4@5, ~@7 d5@16 f5@16 d5@16 f5@9, ~@9 eb5@16 g5@16 eb5@16 ~@7]/8",
  B: "[~@41 g5@7, ~@3 bb4@8 bb4@8 bb4@5, ~@7 d5@16 f5@16 f5@9, ~@9 eb5@16 g5@16 ~@7]/6",
  C: "[~@3 f5@5, ~@3 bb4@8 ~, ~@7 g5@16 ~]/3",
})).s("gm_vibraphone").gain(0.45)

// bass · acoustic bass
const bass = note(`<
  A@3 B A@3 B A@3 B C D A B A@7 B C D A@2 ~@2 E@2 A@2 F@2 A B A@13 B A B A@3 B A@3 B C D A B A@7 B C D A@2 ~@2 E@2 A@2
  F@2 A B A@13 B A B ~
>`.pickRestart({
  A: "eb2@3 eb2@4 eb2", B: "eb2@3 eb2@2 eb2!3", C: "c2@3 db2@2 d2@3", D: "d2@3 eb2", E: "b1@3 b1@4 b1",
  F: "c2@3 c2@4 c2",
})).s("gm_acoustic_bass").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@5 B A@7 B A@3 B A@9 B A B A@3 B A@3 B A@3 B A@3 B A@3 B A@5 B A@7 B A@3 B A@9 B
  A B ~
>`.pickRestart({
  A: "x ~@2 x ~@3 x", B: "x ~@2 x ~ x!3",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  A@11 B A@3 B A@3 B A@3 B A@5 B A@7 C A@3 B A@9 B A C A@7 B A@3 B A@3 B A@3 B A@5 B A@7 C A@3 B A@9 B A C ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@2 x ~ x ~ x!2",
})).gain(0.3)

stack(piano, glockenspiel, vibraphone, bass, kick, snare)