Strudelify
Paninaro '95 cover art

Paninaro '95

Pet Shop Boys

KeyC minorTempo124 bpm
0:00/0:00
// Paninaro '95 — Pet Shop Boys
// 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 130 bars on a 16-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 · synth bass 1
const bass = note(`<
  ~@2 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D E F G@2 E
  F G@2 E F G@2 E F G@2 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D
  A H ~ A B C D A B C D ~
>`.pickRestart({
  A: "c2 ~ c2 ~ c2 ~ c2 ~ c2@3 ~ c2@2 g1@2", B: "f1 ~ f1 ~ f1 ~ f1 ~ f1@3 ~ f1 ~ f1@2",
  C: "g1 ~ g1 ~ g1 ~ g1 ~ bb1@4 bb1 ~ bb1 ~", D: "bb1@2 c2 ~ c2 ~ c2 ~ c2@3 ~ c2@2 g1@2",
  E: "~ g2 ~@2 c3 ~ c3 ~ c2@2 ~ c2@2 ~ eb2 ~", F: "~ g2 ~@2 c3 ~ c3 ~ c2@2 ~ c2 ~@2 eb2 ~",
  G: "~ g2 ~@2 c3 ~ c3 ~ c2@2 ~ c2 ~@2 eb2@2", H: "f1 ~ f1 ~ f1 ~ f1 ~ f1@3 ~@5",
})).s("gm_synth_bass_1").gain(0.45)

// chords · lead 1 square
const lead_1_square = note(`<
  ~@2 A B C D A B C D A B C D ~@16 A B C D A B C D ~@16 E F G F E F G F ~@4 A B C D ~@51 A B C D A B C D ~
>`.pickRestart({
  A: "c5!2 [c5,g5] g5 [f5,g5]!3 [c5,g5] c5 [c5,g5] g5 [f5,g5] f5!2 [f5,g5]!2", // C5 Fsus2 C5 Fsus2
  B: "[f4,g5] f4 [f4,f5] f5 [eb5,f5]!3 [f4,f5] f4 [f4,f5] f5 [eb5,f5] eb5!2 [eb5,f5]!2", // Fsus2 F Ebsus2 F Ebsus2
  C: "[bb4,f5] bb4 [bb4,f5] f5 [eb5,f5]!3 [bb4,f5] bb4 [bb4,f5] f5 [eb5,f5] eb5!2 [eb5,f5]!2", // Bb5 Ebsus2 Bb5 Ebsus2
  D: "[c5,f5] c5 [c5,g5] g5 [f5,g5]!3 [c5,g5] c5 [c5,g5] g5 [f5,g5] f5!2 [f5,g5]!2", // F5 C5 Fsus2 C5 Fsus2
  E: "c5!3 ~ eb5!3 d5!3 ~ g5!3 bb4!2", F: "[bb4,c5] c5!2 ~ eb5!3 ~ f5!3 ~@3 bb4!2",
  G: "[bb4,c5] c5!2 ~ eb5!3 d5!3 ~ g5!3 bb4!2", // Bbsus2
})).s("gm_lead_1_square").gain(0.29).pan(0.4)

// chords · lead 1 square · soft notes
const lead_1_square_soft = note(`<
  ~@2 A B C D A B C D A B C D ~@16 A B C D A B C D ~@16 E F G F E F G F ~@4 A B C D ~@51 A B C D A B C D ~
>`.pickRestart({
  A: "~@3 c5 ~@3 f5 g5 ~ c5 ~ g5 ~@3", B: "f5 g5 ~ f4 ~@3 eb5 f5 ~ f4 ~ f5 ~@3",
  C: "eb5 f5 ~ bb4 ~@3 eb5 f5 ~ bb4 ~ f5 ~@3", D: "eb5 f5 ~ c5 ~@3 f5 g5 ~ c5 ~ g5 ~@3",
  E: "~@3 c5 ~@3 eb5 ~@2 d5 ~@3 g5 ~", F: "~ bb4 ~ c5 ~@3 eb5 ~@3 f5 ~@4", G: "~ bb4 ~ c5 ~@3 eb5 ~@2 d5 ~@3 g5 ~",
})).s("gm_lead_1_square").gain(0.18).pan(0.4)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@4 A@8 B@2 ~@15 C@8 D E@3 F@8 G@5 ~@7 C@8 H@5 I@4 E@3 F@8 J@5 E@3 K@5 L@8 M@8 N O@8 B@2 ~
>`.pickRestart({
  A: "[~@15 [c4,eb4,g4]@16 [c4,eb4,g4]@16 [c4,f4,ab4]@16 [bb3,d4,f4]@16 [c4,eb4,g4]@16 [c4,eb4,g4]@16 [c4,f4,ab4]@16 [bb3,d4,f4]]/8", // Cm Fm Bb Cm Fm Bb
  B: "[~@15 [c4,eb4,g4]@16 ~]/2", // Cm
  C: "[~@15 [c4,eb4,g4]@16 [c4,f4,ab4]@16 [bb3,d4,f4]@16 [c4,eb4,g4]@16 [c4,eb4,g4]@16 [c4,f4,ab4]@16 [bb3,d4,f4]@16 [c4,eb4,g4]]/8", // Cm Fm Bb Cm Fm Bb Cm
  D: "~@15 [c4,eb4,g4,bb4]", // Cm7
  E: "[~@17 c5@4 g4@10 bb4@6 g4@4 eb4@4 eb4@2 [c4,eb4,g4], ~@5 g4@10 ~@33, ~@9 eb4@6 [c4,f4,ab4]@16 [bb3,d4,f4]@16 ~, ~@13 bb4@4 ~@31]/3", // Cm Fm Bb
  F: "[~ f4@4 g4@10 [c4,eb4,g4]@16 [c4,f4,ab4]@16 [bb3,d4,f4]@16 [c4,eb4,g4]@16 [c4,eb4,g4]@16 [c4,f4,ab4]@16 [bb3,d4,f4]@16 [c4,eb4,g4]]/8", // Cm Fm Bb Cm Fm Bb Cm
  G: "[~@15 [c4,eb4,g4]@16 [c4,f4,ab4]@16 [bb3,d4,f4]@16 [c4,eb4,g4]@16 ~]/5", // Cm Fm Bb Cm
  H: "[~@15 [c4,eb4,g4]@16 [c4,f4,ab4]@16 [bb3,d4,f4]@16 [c4,eb4,g4]@16 [c4,eb4,g4,bb4]]/5", // Cm Fm Bb Cm Cm7
  I: "[~@17 c5@4 g4@10 bb4@6 g4@4 eb4@4 eb4@2 ~@2 f4@4 g4@10 [c4,eb4,g4,bb4], ~@5 g4@10 ~@32 g4@6 ~@11, ~@9 eb4@6 [c4,f4,ab4]@16 [bb3,d4,f4]@16 [c4,eb4]@16 ~, ~@13 bb4@4 ~@47]/4", // Cm7 Fm Bb Cm
  J: "[~@15 [g4,bb4]@6 ~@12 c5@4 g4@10 bb4@6 g4@4 eb4@4 eb4@2 ~@2 f4@4 g4@10 [c4,eb4,g4,bb4], ~@15 c4@16 [c4,f4,ab4]@16 [bb3,d4,f4]@16 [c4,eb4]@16 ~, ~@15 eb4@10 eb4@6 ~@49, ~@21 g4@10 ~@32 g4@6 ~@11, ~@29 bb4@4 ~@47]/5", // Gm Cm7 Fm Bb Cm
  K: "[~ f4@4 g4@10 [c4,eb4,g4]@16 [f3,c4,f4,ab4]@16 [bb3,d4,f4]@16 [c4,eb4,g4]@16 [c4,eb4,g4,bb4]]/5", // Cm Fm Bb Cm Cm7
  L: "[~@7 bb4@7 c5 g4@10 eb4@3 f4@3 g4@8 g4@3 ab4@3 bb4@2 [c4,eb4,g4]@16 [c4,eb4,g4]@16 [c4,f4,ab4]@16 [bb3,d4,f4]@16 [c4,eb4,g4]@16 [c4,eb4,g4], ~@6 g4@9 [f3,c4,ab4]@16 [bb3,d4,f4]@16 ~@81, ~@15 f4@13 ~@100]/8", // Cm Fm Bb Cm Fm Bb
  M: "[~@15 [c4,f4,ab4]@16 [bb3,d4,f4]@16 [c4,eb4,g4]@16 [g4,bb4]@6 ~@12 c5@4 g4@10 bb4@6 g4@4 eb4@4 eb4@2 ~@2 f4@4 g4@10 [c4,eb4,g4,bb4], ~@63 c4@16 [c4,f4,ab4]@16 [bb3,d4,f4]@16 [c4,eb4]@16 ~, ~@63 eb4@10 eb4@6 ~@49, ~@69 g4@10 ~@32 g4@6 ~@11, ~@77 bb4@4 ~@47]/8", // Fm Bb Cm Gm Cm7 Fm Bb Cm
  N: "~@13 bb4@2 [c4,f4,ab4], ~@5 g4@10 ~, ~@9 eb4@6 ~", // Fm
  O: "[~ c5@4 g4@6 ~@20 [c4,eb4,g4]@16 [c4,f4,ab4]@16 [bb3,d4,f4]@16 [c4,eb4,g4]@16 [c4,eb4,g4]@16 [c4,f4,ab4]@16 [bb3,d4,f4], ~@15 c7@113]/8", // Cm Fm Bb Cm Fm Bb
})).s("gm_synth_strings_1").gain(0.19)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@6 A B C A@2 B C A ~@20 A B C A ~@16 D E F E D E F G A B C A@2 B C A ~@12 A H C A@2 H C A ~@40
>`.pickRestart({
  A: "[eb4,g4,c5] ~ [eb4,g4,c5]!2 ~ [eb4,g4,c5]!2 ~ [eb4,g4,c5] ~ [eb4,g4,c5]!2 ~ [eb4,g4,c5]!2 ~", // Cm
  B: "[eb4,f4,ab4,c5] ~ [eb4,f4,ab4,c5]!2 ~ [eb4,f4,ab4,c5]!2 ~ [eb4,f4,ab4,c5] ~ [eb4,f4,ab4,c5]!2 ~ [eb4,f4,ab4,c5]!2 ~", // Fm7
  C: "[d4,f4,bb4,c5] ~ [d4,f4,bb4,c5]!2 ~ [d4,f4,bb4,c5]!2 ~ [d4,f4,bb4,c5] ~ [d4,f4,bb4,c5]!2 ~ [d4,f4,bb4,c5]!2 ~", // Bb
  D: "[c3,g3,c4,d4,g4,bb4]@3 ~ [c3,g3,c4,d4,g4,bb4]@3 ~ [c3,g3,c4,d4,g4,bb4] ~ [c3,g3,c4,d4,g4,bb4]@2 ~@2 [c3,g3,c4,d4,g4,bb4]@2", // Gm
  E: "~@2 [c3,g3,c4,d4,g4,bb4] ~ [c3,g3,c4,d4,g4,bb4]@3 ~ [c3,g3,c4,d4,g4,bb4] ~ [c3,g3,c4,d4,g4,bb4]@3 ~ [c3,g3,c4,d4,g4,bb4]@2", // Gm
  F: "[c3,g3,c4,d4,g4,bb4]@2 ~@2 [c3,g3,c4,d4,g4,bb4]@3 ~ [c3,g3,c4,d4,g4,bb4] ~ [c3,g3,c4,d4,g4,bb4]@2 ~@2 [c3,g3,c4,d4,g4,bb4]@2", // Gm
  G: "[c4,g4,bb4,c5]@2 ~ [c4,g4,bb4,c5] ~@2 [c4,g4,bb4,c5]@2 ~ [c4,g4,bb4,c5] ~@6", // C7
  H: "[f4,ab4,c5] ~ [f4,ab4,c5]!2 ~ [f4,ab4,c5]!2 ~ [f4,ab4,c5] ~ [f4,ab4,c5]!2 ~ [f4,ab4,c5]!2 ~", // Fm
})).s("gm_lead_2_sawtooth").gain(0.12).pan(0.3)

// other · lead 8 bass lead
const lead_8_bass_lead = note("<~@6 A@8 ~@48 A@8 ~@20 A@8 ~@8 A@13 B ~@10>".pickRestart({
  A: "c3!16", B: "c3!13 ~@3",
})).s("gm_lead_8_bass_lead").gain(0.39).pan(0.6)

// other · bandoneon
const bandoneon = note(`<
  ~@9 A B@2 C A ~@12 A@2 C A ~@6 D ~@25 B@2 C A B@2 C A ~@36 B@2 C A B@2 C A B@2 C A B@2 ~@10
>`.pickRestart({
  A: "c4", B: "c4/2", C: "bb3", D: "~@10 c4 ~ eb4 ~@3",
})).s("gm_bandoneon").gain(0.18).pan(0.3)

// chords · piano
const piano = note(`<
  ~@14 A B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C D A B C D ~@16 A B C D A B C D A B C D A B C D A B C D
  A B C D A B C D ~@8 A B C D A B C D A B C D A E ~@10
>`.pickRestart({
  A: "~@2 [g3,c4,eb4,g4] c4 ~@2 [g3,c4,eb4,g4] c4 ~@2 [g3,c4,eb4,g4] c4 ~@2 [g3,c4,eb4,g4] ~", // Cm
  B: "~@2 [f3,ab3,c4,f4] f3 ~@2 [f3,ab3,c4,f4] f3 ~@2 [f3,ab3,c4,f4] f3 ~@2 [f3,ab3,c4,f4] ~", // Fm
  C: "~@2 [d3,g3,bb3,d4] d3 ~@2 [d3,g3,bb3,d4] d3 ~@2 [f3,bb3,d4,f4] f3 ~@2 [f3,bb3,d4,f4]@2", // Gm Bb
  D: "~@2 [g3,c4,eb4,g4] c4 ~@2 [g3,c4,eb4,g4] c4 ~@2 [g3,c4,eb4,g4] c4 ~@2 [c4,eb4,g4] ~, ~@7 g3", // Cm
  E: "~@2 [f3,ab3,c4,f4] f3 ~@2 [f3,ab3,c4,f4] f3 ~@2 [f3,ab3,c4,f4] f3 ~@4", // Fm
})).s("gm_piano").gain(0.37).pan(0.3)

// other · pad choir
const pad_choir = note("<~@22 A@3 B C B ~ A ~@23 D ~@4 E@3 F ~@68>".pickRestart({
  A: "~ c4 ~ c4 ~ c4 ~ c4", B: "~ c4 ~ c4 ~ c4 ~@2", C: "~@3 c4 ~ c4 ~ c4", D: "eb4 f4@4 ~@11",
  E: "c4@2 ~@2 c4@3 ~ c4 ~ c4@2 c4 ~ c4@2", F: "c4@2 ~@2 c4@3 ~ c4 ~ c4@2 c4 ~@3",
})).s("gm_pad_choir").gain(0.36).pan(0.2)

// other · lead 4 chiff
const lead_4_chiff = note("<~@46 A@2 B@4 C D E ~@51 A@2 B@4 C D E ~@15>".pickRestart({
  A: "bb3 c4@4 ~ eb4 f4@3 ab4 bb4@3 b4 c5", B: "bb3 c4@4 ~ eb4 f4@3 ab4 bb4@3 eb4 f4",
  C: "bb3 c4@4 ~ eb4 f4@3 ab4 bb4@3 ~@2", D: "eb4 f4@4 ~@3 eb5 f5@2 eb5 f5@2 ~ eb5", E: "f5 ~@7",
})).s("gm_lead_4_chiff").gain(0.24).pan(0.6)

// other · string ensemble 1
const string_ensemble_1 = note("<~@98 A B C A@2 B C A ~@24>".pickRestart({
  A: "g4 g5 c6 g5 eb6 g5 c6 g5 g4 g5 c6 g5 eb6 g5 c6 g5",
  B: "ab4 ab5 c6 ab5 f6 ab5 c6 ab5 ab4 ab5 c6 ab5 f6 ab5 c6 ab5",
  C: "f4 f5 bb5 f5 d6 f5 bb5 f5 f4 f5 bb5 f5 d6 f5 bb5 f5",
})).s("gm_string_ensemble_1").gain(0.28).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@10 A@20 ~@7 B A@24 ~@7 B A@28 C ~@3 A@18 ~@10>".pickRestart({
  A: "x!4", B: "~@7 x", C: "x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@10 A@20 ~@8 A@14 B C A@8 ~@6 D C A@28 ~@6 B C A@6 D C A@6 ~@10>".pickRestart({
  A: "~@4 x ~@4 x ~@2 x ~@3", B: "~@8 x!8", C: "x!16", D: "~@6 x!10",
})).gain(0.35)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@52 A ~@15 B ~@35 A ~@7 B ~@17>".pickRestart({
  A: "x!8 ~@8", B: "x!6 ~@10",
})).gain(0.2)

// drums · hihat
const hihat = s("hh").struct("<[x!2] [x!4] ~@128>").gain(0.3)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@10 A@20 ~@8 A@24 ~@8 A@28 B@4 A@17 C ~@5 A@4 D>".pickRestart({
  A: "x!16", B: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", C: "x!13 ~@3", D: "x!8 ~@8",
})).gain(0.3)

// drums · congas
const congas = s("conga:13").struct("<~@10 A@20 ~@8 A@24 ~@8 A@28 ~@8 A@14 ~@10>".pickRestart({
  A: "~ x ~@3 x ~@2",
})).gain(1.59)

// drums · congas
const congas_2 = s("conga:18").struct("<~@10 A@20 ~@8 A@24 ~@8 A@28 ~@8 A@13 B ~@10>".pickRestart({
  A: "x ~@5 x!2 ~@5 x ~ x", B: "x ~@5 x!2 ~@8",
})).gain(1.59)

// drums · congas
const congas_3 = s("conga:33").struct("<~@10 A@20 ~@8 A@24 ~@8 A@28 ~@8 A@13 ~@11>".pickRestart({
  A: "~@7 x",
})).gain(1.59)

// drums · ht
const ht = s("ht").struct("<~@13 A ~@23 A ~@19 B ~@23 A ~@48>".pickRestart({
  A: "~@6 x!3 ~@2 x ~@2 x ~", B: "x!4",
})).gain(0.5)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct(`<
  ~@14
  [x ~ x!2 ~ x ~@2 x ~@3 x ~ x!2]!16
  ~@8
  [x ~ x!2 ~ x ~@2 x ~@3 x ~ x!2]!24
  ~@8
  [x ~ x!2 ~ x ~@2 x ~@3 x ~ x!2]!28
  ~@32
>`).gain(2.53)

// drums · shaker
const shaker = s("sh").struct("<~@10 [x!16]!88 ~@4 [x!16]!17 [x!13 ~@3] ~@8 [~@12 x!4] ~>").gain(0.35)

stack(
  bass, lead_1_square, lead_1_square_soft, synth_strings_1, lead_2_sawtooth, lead_8_bass_lead, bandoneon, piano,
  pad_choir, lead_4_chiff, string_ensemble_1, kick, snare, snare_soft, hihat, crash, tambourine, congas, congas_2,
  congas_3, ht, agogo_bells, shaker
)

More by Pet Shop Boys