Strudelify
It's a Sin cover art

Actually

It's a Sin

Pet Shop Boys

KeyC minorTempo128 bpm
0:00/0:00
// It's a Sin — Pet Shop Boys
// 128 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 151 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(128/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.

// other · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@3 A B@2 C D E@3 F G H@2 I@2 J@4 ~@6 K@3 ~@6 K@3 ~@15 L@2 ~@6 K@3 M N M O ~@11 P Q@3 R@4 S T U@2 ~@6 K@3 ~@6 K@3 M N
  M O ~@5 G H@2 V@2 W@4 G H@2 I@2 W@4 M O M O ~@10
>`.pickRestart({
  A: "eb5", B: "[~@8 c5@4 [bb4,d5,d6]@3 [ab4,c5,eb6], [eb5,eb6]@3 ~]/2", C: "[bb4,d5,d6]@11 ~ [c5,c6]@4",
  D: "[bb4,bb5]@15 ~", E: "[c5,c6]/3", F: "[b4,b5]@13 ~@3", G: "~@5 [c5,c6] [d5,d6] [eb5,eb6]",
  H: "[[f5,f6]@2 [eb5,eb6] [d5,d6]@2 [eb5,eb6]@2 [d5,d6]@3 ~@3 [bb4,bb5] [c5,c6] [d5,d6]]/2", // F Eb D Eb D Bb C D
  I: "[[eb5,eb6]@4 [d5,d6]@2 [c5,c6]@4 [d5,d6]@4 [c5,c6]@5 ~@7 [c5,c6]@2 [c5,c6]@2 [c5,c6]@2]/2", // Eb D C D C
  J: "[[c5,c6]@3 ~ [c5,c6]@2 [d5,d6]@4 [c5,c6]@3 ~ [b4,b5]@5 ~@7 g4@2 b4@2 c5 b4@3 g4@2 b4@2 c5 b4@3 g4@2 b4@2 c5 b4@14 ~@3]/4", // C D C B
  K: "[~@10 g4@2 b4@2 c5 b4@3 g4@2 b4@2 c5 b4@3 g4@2 b4@2 c5 b4@14 ~@3]/3",
  L: "[~@10 g4@2 b4@2 c5 b4@3 g4@2 b4@2 c5 b4@4 ~@5]/2",
  M: "[c5,eb5,g5]@2 ~@2 [c5,eb5,g5]@2 ~@2 [c5,eb5,g5] [c5,eb5,g5]@2 ~ [c5,eb5,g5]@2 ~@2", // Cm
  N: "[c5,eb5,ab5]@10 ~@2 [bb4,d5,f5]@3 ~", O: "[c5,eb5,ab5]@13 ~@3", P: "~ c4 d4 eb4", Q: "[g4@8 d5@4 c5@35 ~]/3",
  R: "[bb4@31 ~]/2", S: "c5@15 ~", T: "d5@15 ~", U: "[g5@29 ~@3]/2",
  V: "[[eb5,eb6]@2 [d5,d6] [c5,c6]@2 [d5,d6]@2 [c5,c6]@3 ~@3 [c5,c6]!3]/2", // Eb D C D C
  W: "[[c5,c6]@4 [c5,c6]@2 [d5,d6]@4 [c5,c6]@4 [b4,b5]@6 ~@6 g4@2 b4@2 c5 b4@3 g4@2 b4@2 c5 b4@3 g4@2 b4@2 c5 b4@14 ~@3]/4", // C D C B
})).s("gm_synth_strings_1").gain(0.42)

// bass · electric bass pick · "PICK BASS"
const bass = note(`<
  A ~@11 B C D E F C G@2 H B C D E F C G@2 H B C D E F C G@2 H B I B F C G C G@2 B C D E F C G H B C D E F C G@2 H B I B
  F C G C G@2 ~@18 B C D E F C G@2 H B C D E F C G@2 H B I B F C G C G@2 B C D E F C G@2 H B C D E F C G@2 H B@4 J ~@5
  B@3 K
>`.pickRestart({
  A: "[c1,c2]@3 ~ [c1,c2]@3 ~ [c1,c2]@3 ~ [c1,c2]@3 ~", B: "c2!8", C: "f1!8", D: "bb1!8", E: "eb1!8", F: "ab1!8",
  G: "g1!8", H: "g1!6 eb2 d2", I: "ab1@2 ab1@2 ab1@2 ab1@2 ab1@2 ab1@2 bb1@3 ~", J: "c2@13 ~@3", K: "c2!6 ~@2",
})).s("gm_electric_bass_pick").gain(0.42)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1_2 = note(`<
  A@4 B C D E F G H@2 I J K L M J N@3 I J K L M J N@3 I J K L M J N@3 I O I P Q R Q S@2 I J K L M J T@2 I J K L M J N@3
  I O I P Q R Q S@2 U@2 V@2 W@2 X Y U@2 V@2 W@2 X Y Z@2 I J K L M J N@3 I J K L M J N@3 I O I P Q R Q S@2 I J K L M J
  N@3 I J K L M J N@3 AA AB AA AB AC@4 AD@2 AE@4
>`.pickRestart({
  A: "[[eb4,g4,c5] ~ [eb4,g4,c5] ~ [eb4,g4,c5] ~ [bb3,c4,d4,eb4,g4]@26, ~@12 c5@3 ~@49]/4", B: "[c3,eb4,g4,c5]@15 ~",
  C: "[f3,f4,ab4,c5]@15 ~", D: "[bb2,d4,f4,bb4]@15 ~", E: "[eb3,eb4,g4,bb4]@15 ~", F: "eb4 d4, [ab3,ab4,c5]@15 ~",
  G: "f4 eb4, [f3,ab4,c5]@15 ~", H: "[[d4,c5]@16 b4@15 ~, [g3,g4,d5]@31 ~]/2", I: "[g3,c4,eb4]@15 ~",
  J: "[ab3,c4,f4]@15 ~", K: "[bb3,d4,f4]@15 ~", L: "[g3,bb3,eb4]@15 ~", M: "[ab3,c4,eb4]@15 ~",
  N: "[[b3,d4,g4]@47 ~]/3", O: "[ab3,c4,eb4]@10 ~@2 [bb3,d4,f4]@3 ~", P: "[ab3,c4,eb4]@13 ~@3",
  Q: "[eb4,f4,ab4,ab5]@15 ~", R: "[d4,g4,b4,g5]@15 ~", S: "[[d4,g4,b4,d6]@31 ~]/2", T: "[[b3,d4,g4]@31 ~]/2",
  U: "[c3@31 ~]/2", V: "[eb2@31 ~]/2", W: "[g2@31 ~]/2", X: "c3@15 ~", Y: "bb2@15 ~", Z: "[g2@29 ~@3]/2",
  AA: "[c4,eb4,g4]@15 ~", AB: "[c4,eb4,ab4]@15 ~",
  AC: "[[c4,eb4,g4]@15 ~ [c4,eb4,ab4]@15 ~ [c4,eb4,g4]@15 ~ [c4,eb4,ab4]@15 ~, c3@63 ~]/4", // Cm Ab Cm Ab
  AD: "[[c3,c4,eb4,g4]@31 ~]/2", // Cm
  AE: "[[c4,eb4,g4]@15 ~ [c4,eb4,ab4]@15 ~ [c4,eb4,g4]@15 ~ [c4,eb4,ab4]@11 ~@5, c3@59 ~@5]/4", // Cm Ab Cm Ab
})).s("gm_synth_strings_1").gain(0.29)

// other · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~@18 A@3 ~@6 A@3 ~@6 A@3 B C B D ~@11 E@2 ~@6 A@3 B C B D ~@29 A@3 ~@6 A@3 B C B D ~@11 A@3 ~@6 A@3 F G F G ~@10
>`.pickRestart({
  A: "[~@10 [g3,g4]@2 [b3,b4]@2 [c4,c5] [b3,b4]@3 [g3,g4]@2 [b3,b4]@2 [c4,c5] [b3,b4]@3 [g3,g4]@2 [b3,b4]@2 [c4,c5] [b3,b4]@14 ~@3]/3", // G B C B G B C B …
  B: "[c4,eb4,g4]@2 ~@2 [c4,eb4,g4]@2 ~@2 [c4,eb4,g4] [c4,eb4,g4]@2 ~ [c4,eb4,g4]@2 ~@2", // Cm
  C: "[c4,eb4,ab4]@10 ~@2 [bb3,d4,f4]@3 ~", D: "[c4,eb4,ab4]@13 ~@3",
  E: "[~@10 [g3,g4]@2 [b3,b4]@2 [c4,c5] [b3,b4]@3 [g3,g4]@2 [b3,b4]@2 [c4,c5] [b3,b4]@4 ~@5]/2", // G B C B G B C B
  F: "[c4,eb4,g4,c5]@2 ~@2 [c4,eb4,g4,c5]@2 ~@2 [c4,eb4,g4,c5] [c4,eb4,g4,c5]@2 ~ [c4,eb4,g4,c5]@2 ~@2", // Cm
  G: "[c4,eb4,ab4,c5]@13 ~@3", // Ab
})).s("gm_synth_brass_1").gain(0.42)

// chords · orchestra hit · "ORCH.HIT"
const orchestra_hit = note(`<
  A ~@11 B ~ C ~@6 B ~@8 B ~@17 B ~@7 B ~@35 B ~@8 B ~ C ~ D ~@13 B ~@8 B ~ C ~ D ~@18
>`.pickRestart({
  A: "[eb4,g4,c5] ~ [eb4,g4,c5] ~ [eb4,g4,c5] ~ [eb4,g4,c5] ~", B: "~@2 [eb4,g4,c5] ~@5", C: "~@2 [d4,f4,bb4] ~@5",
  D: "~@2 [eb4,ab4,c5] ~@5", // Ab
})).s("gm_orchestra_hit").gain(0.29)

// drums · kick
const kick = s("bd").struct("<A ~@11 A@73 B A@2 B@2 A@51 ~@6 A@4>".pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2",
})).gain(0.42)

// drums · snare
const snare = s("sd").struct(`<
  ~@12 A B@7 C B@8 C B@8 C B@3 D B@4 E B@16 C B@3 D B@4 E ~@3 F ~@7 F ~@2 G@2 H I B@21 J B@4 K B@8 C B@8 C B@3 J ~@6 B@4
>`.pickRestart({
  A: "x!2 ~ x", B: "~ x ~ x", C: "~@4 x ~@6 x!2 ~ x ~", D: "~@2 x ~@3 x!2", E: "~@2 x ~@2 x!3", F: "~@3 x ~@4",
  G: "~@7 x", H: "~@3 x ~@2 x ~", I: "~ x ~@2 x!4", J: "~@2 x ~@2 x!2 ~", K: "~@4 x ~@3 x ~ x ~ x!4",
})).gain(0.42)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@38 A ~@3 B ~@4 B ~@16 A ~@3 B ~@4 B ~@3 C ~@3 C ~@3 C ~@5 D ~@17 E ~@3 B ~@4 B ~@21 B ~@10
>`.pickRestart({
  A: "~@7 x", B: "~@6 x!2", C: "~@3 x ~@4", D: "~ x ~@6", E: "~@4 x ~ x!2",
})).gain(0.42)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@12 A@27 B A B A B A@21 B A B A B A@4 ~@18 A@12 C A@4 C B A B A B A@22 B A B A ~@6 A@3 D
>`.pickRestart({
  A: "x!8", B: "~ x!7", C: "x!7 ~", D: "x!6 ~@2",
})).gain(0.42)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@38 A ~@3 B ~@4 B ~@16 A ~@3 B ~@4 B ~@16 C ~@16 D ~ E ~@3 B ~@4 B ~@15 D ~@5 B ~@10
>`.pickRestart({
  A: "~@3 x", B: "~@5 x ~@2", C: "~@3 x ~@2 x ~", D: "~ x ~@2", E: "~ x ~@6",
})).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct("<~@104 [~@7 x] ~@4 [~@7 x] ~@41>").gain(0.42)

// drums · high tom
const high_tom = s("ht").struct("<~@42 A ~@4 A ~@20 A ~@4 A ~@39 A ~@4 A ~@21 A ~@10>".pickRestart({
  A: "~ x ~ x ~@4",
})).gain(0.42)

// drums · crash
const crash = s("cr").struct(`<
  A ~@11 B ~ C ~ C ~ C ~@2 B ~@8 B ~@8 D ~ D ~ D ~@4 B ~@3 C ~@3 B ~@8 D ~ D ~ D ~@4 D ~@2 E ~@10 D@2 ~ F B ~@8 B ~ C ~
  C ~@4 D ~ D ~ D ~@4 C ~@5 C ~@2 C ~ C ~ C ~ C ~@2 D ~ D ~ D ~@8 G
>`.pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "~ x ~@2", D: "x", E: "~@3 x ~@4", F: "~@7 x", G: "~@3 x",
})).gain(0.42)

// drums · tambourine
const tambourine = s("tb").struct("<~@12 [x!8]!9 ~@98 [x!8]!18 ~@10 [x!8]!3 [x!7 ~]>").gain(0.35)

stack(
  synth_strings_1, bass, synth_strings_1_2, synth_brass_1, orchestra_hit, kick, snare, low_tom, hihat, mid_tom,
  open_hat, high_tom, crash, tambourine
)

More by Pet Shop Boys