Strudelify
Papa Don't Preach cover art

1986 · True Blue

Papa Don't Preach

Madonna

KeyF minorTempo127 bpm
0:00/0:00
// Papa Don't Preach — Madonna
// 127 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(127/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 2 · "SYNBASS 2"
const bass = note(`<
  ~@8 A B C B C B C D E B C B C B C D E B C B C B C D F G H G H G I J K L M N O P Q R S T U B C B C B C D F G H G H G I
  J K L V R O P W L S R U B C B C B C D F X Y X Y Z AA AB@2 AC AD L M R O P Q R S R V L S N V L S R V R V R V L AE AF AG
  ~@8
>`.pickRestart({
  A: "~@8 f3 ~ f3 ~ c4 ~ f3 ~", B: "bb3 ~ f3 ~ ab3 ~ c4 ~ f3 ~ f3 ~ c4 ~ f3 ~",
  C: "bb3 ~ f3 ~ ab3 ~ f3 ~ f3 ~ f3 ~ c4 ~ f3 ~", D: "bb3 ~ f3 ~ ab3 ~ c4 ~ f3 ~ f3 ~ bb3 ~ f3 ~",
  E: "c4 ~ f3 ~ eb3 ~ c3 ~ f3 ~ f3 ~ c4 ~ f3 ~", F: "c4 ~ f3 ~ eb3 ~ c3 ~ db3 ~ db3 ~ ab3 ~ db3 ~",
  G: "f3 ~@3 ab3 ~@3 eb3 ~ eb3 ~ bb3 ~ eb3 ~", H: "g3 ~@3 bb3 ~@3 db3 ~ db3 ~ ab3 ~ db3 ~",
  I: "g3 ~@3 bb3 ~@3 f2 ~ f2 ~ f2 ~ f2 ~", J: "f2 ~ ab2 ~ c3 ~ f3 ~ f2 ~ f2 ~ f2 ~ f2 ~",
  K: "f2 ~ bb2 ~ f2 ~ eb2 ~ f2@2 f3@2 eb3@2 ~@2", L: "db3@2 ~@4 db3 ~ db2 ~ db3 ~ db2 ~@3",
  M: "eb2@2 eb3 ~ eb2 ~@3 f2@2 f3@2 eb3 ~@3", N: "db3@2 ~@4 db3 ~ db2@2 db3@2 db2 ~@3",
  O: "eb2@2 eb3 ~ eb2 ~@3 bb2 ~ bb2 ~ bb2 ~ bb2 ~", P: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~",
  Q: "bb2 ~ bb2 ~ bb2 ~ f3 ~ f2@2 f3@2 eb3@2 ~@2", R: "db3@2 ~@4 db3 ~ db2@2 db3 ~ db2 ~@3",
  S: "eb2@2 eb3@2 eb2 ~@3 f2@2 f3@2 eb3@2 ~@2", T: "db3 ~@5 db3 ~ db2@2 db3 ~ db2 ~@3",
  U: "eb2@2 eb3 ~ eb2 ~@3 f3 ~ f3 ~ c4 ~ f3 ~", V: "eb2@2 eb3 ~ eb2 ~@3 f2@2 f3@2 eb3@2 ~@2",
  W: "bb2 ~ bb2 ~ bb2@2 f3 ~ f2@2 f3@2 eb3@2 ~@2", X: "f3 ~ db3 ~ ab3@2 ~@2 eb3 ~ eb3 ~ bb3 ~ eb3 ~",
  Y: "g3 ~ eb3 ~ bb3@2 ~@2 db3 ~ db3 ~ ab3 ~ db3 ~", Z: "f3 ~ db3 ~ ab3@3 ~ eb3 ~ eb3 ~ bb3 ~ eb3 ~",
  AA: "g3 ~ eb3 ~ bb3@2 ~@2 f3 ~ f3 ~ ab3 ~ f3 ~", AB: "c4 ~ db4 ~ c4 ~ ab3 ~ f3 ~ f3 ~ ab3 ~ f3 ~",
  AC: "bb3 ~ c4 ~ bb3 ~ ab3 ~ f3 ~ f3 ~@3 f3 ~", AD: "eb3 ~ eb3 ~@3 eb3 ~ f2@2 f3@2 eb3@2 ~@2",
  AE: "eb2@2 eb3@2 eb2 ~@3 f2@2 f3@2 eb3 ~@3", AF: "db3 ~@5 db3 ~ db2@2 db3@2 db2 ~@3", AG: "eb2@2 eb3 ~ eb2 ~@11",
})).s("gm_synth_bass_2").gain(0.35)

// other · accordion
const accordion = note(`<
  ~@40 A B A B ~@2 A B A B ~@16 A B A B ~@2 A B A B ~@18 A B A B ~@2 A B A B A B A B A B A B A B A B A B A B ~@9
>`.pickRestart({
  A: "~@8 f4 ~ f4 ~ eb4@2 ~@2", B: "db4@5 ~@11",
})).s("gm_accordion").gain(0.64)

// chords · pad sweep · "SWEEP PAD"
const pad_sweep = note(`<
  ~@8 A@6 B@8 C@4 D@6 E@8 F@2 G@2 H@4 I@2 J@8 K@8 L@2 M@2 N@4 O@2 P@6 Q@2 R@6 S@6 M@2 T@4 U@2 V@2 W@2 V@2 X@2 Y@2 Z@2
  AA@2 AB@2 ~@9
>`.pickRestart({
  A: "[f6 ~ ab6 ~ c7 ~ f7@2 [f3,ab3,c4,f4]@29 ~@3 [eb3,g3,bb3,c4]@30 ~@2 [db3,f3,ab3,db4]@24, [f3,c4] ~@15]/6", // Fm Cm7 Db F5
  B: "[~@8 [eb3,g3,bb3,c4]@28 ~@4 [f3,ab3,c4,f4]@29 ~@3 [eb3,g3,bb3,c4]@30 ~@2 [db3,f3,ab3,db4]@24]/8", // Cm7 Fm Cm7 Db
  C: "[~@8 [eb3,g3,bb3,c4]@29 ~@3 [f3,ab3,c4,f4]@24]/4", // Cm7 Fm
  D: "[~@8 [eb3,g3,bb3,c4]@29 ~@3 [db3,f3,ab3,db4]@29 ~@3 [eb3,g3,bb3,c4]@24]/6", // Cm7 Db Cm7
  E: "[~@8 [db4,f4,ab4]@16 [eb3,g3,bb3,eb4,g4,bb4]@15 ~ [db3,f3,ab3,db4,f4,ab4]@15 ~ [eb3,g3,bb3,eb4,g4,bb4]@15 ~ [db3,f3,ab3,db4,f4,ab4]@16 [bb3,eb4,g4,bb4]@13 ~@3 [f3,ab3,c4,f4,ab4,c5]@24, ~@8 [db3,f3,ab3]@14 ~@66 [eb3,g3]@11 ~@29]/8", // Db Eb Db Eb Db Eb Fm Db …
  F: "[~@8 [f3,f4]@4 [eb3,eb4]@3 ~ [ab3,db4,f4]@15 ~, ~@8 ab4@23 ~, ~@4 c4@3 ~ [db3,f3]@6 ~@2]/2", // F Eb Db
  G: "[[eb4,g4,bb4]@7 ~ [f3,f4]@4 [eb3,eb4]@3 ~ [ab3,db4,f4]@15 ~, [eb3,g3,bb3]@5 ~@3 ab4@23 ~, ~@8 c4@6 ~@2 [db3,f3]@13 ~@3]/2", // Eb F Eb Db Eb Db
  H: "[[eb3,g3,bb3,eb4,g4,bb4]@7 ~ [db3,f3,ab3,db4,f4,ab4]@27 ~@5 [f3,f4]@4 eb3@4 [db3,f3,ab3]@14 ~@2, ~@40 ab4@23 ~, ~@20 c4@3 ~ [db4,f4]@8, ~@22 eb4 ~@9]/4", // Eb Db F Db
  I: "[[eb3,g3,bb3,eb4,g4,bb4]@7 ~ [f3,f4]@4 [eb3,eb4]@3 ~ [ab3,db4,f4]@15 ~, ~@8 ab4@23 ~, ~@4 c4@3 ~ [db3,f3]@6 ~@2]/2", // Eb F Eb Db
  J: "[[eb3,g3,bb3,eb4,g4,bb4]@5 ~@3 [f3,ab3,c4,f4]@30 ~@2 [eb3,g3,c4]@29 ~@3 [db3,f3,ab3,db4]@29 ~@3 [eb3,g3,bb3,c4]@24, ~@40 bb3@27 ~@61]/8", // Eb Fm Cm Db Cm7
  K: "[~@8 [ab3,db4,f4,ab4]@15 ~ [eb3,g3,bb3,eb4,g4,bb4]@15 ~ [db3,f3,ab3,db4,f4,ab4]@15 ~ [eb3,g3,bb3,eb4,g4,bb4]@15 ~ [db3,f3,ab3,db4,f4,ab4]@15 ~ [eb3,g3,bb3,eb4,g4,bb4]@13 ~@3 [f3,ab3,c4,f4,ab4,c5]@24, ~@8 [db3,f3]@13 ~@107]/8", // Db Eb Db Eb Db Eb Fm Db
  L: "[~@8 [f3,f4]@4 [eb3,eb4]@3 ~ [ab3,db4,f4]@15 ~, ~@8 ab4@23 ~, ~@8 c4@6 ~@2 [db3,f3]@13 ~@3]/2", // F Eb Db
  M: "[[eb3,g3,bb3,eb4,g4,bb4]@7 ~ [f3,f4]@4 [eb3,eb4]@3 ~ [ab3,db4,f4]@15 ~, ~@8 ab4@23 ~, ~@8 c4@6 ~@2 [db3,f3]@13 ~@3]/2", // Eb F Eb Db
  N: "[[eb3,g3,bb3,eb4,g4,bb4]@7 ~ [db3,f3,ab3,db4,f4,ab4]@31 ~ [f3,f4]@4 [eb3,eb4]@4 [db3,f3,ab3,db4]@14 ~@2, ~@5 ab4@3, ~@40 c4@7 ~ f4@16]/4", // Eb Db F Eb Db
  O: "[[eb3,g3,bb3,eb4,g4,bb4]@7 ~ [f3,f4]@4 [eb3,eb4]@4 [f3,ab3,db4,f4]@15 ~, ~@8 ab4@23 ~, ~@8 c4@7 ~ db3@13 ~@3]/2", // Eb F Eb Db
  P: "[[eb3,g3,bb3,eb4,g4,bb4]@5 ~@3 [f3,ab3,c4,f4]@29 ~@3 [eb3,g3,bb3,c4]@30 ~@6 db4@20, ~@3 [db3,f3,ab3]]/6", // Eb Fm Cm7 Db
  Q: "[~ [eb3,g3,bb3,c4]@3]/2", // Cm7
  R: "[~@8 [ab3,db4,f4,ab4]@15 ~ [eb3,g3,bb3,eb4,g4,bb4]@15 ~ [db3,f3,ab3,db4,f4,ab4]@16 [eb3,g3,bb3,eb4,g4,bb4]@15 ~ [db3,f3,ab3,db4,f4,ab4]@15 ~ [eb3,g3,bb3,eb4,g4,bb4]@8, ~@2 [db3,f3]@3 ~@19]/6", // Db Eb Db Eb Db Eb Db
  S: "[~@8 [f3,ab3,c4,f4,ab4,c5]@46 ~@2 [eb3,g3,bb3,eb4,g4,bb4]@13 ~@3 [f3,f4]@4 [eb3,eb4]@3 ~ [ab3,db4,f4]@15 ~, ~@72 ab4@23 ~, ~@72 c4@6 ~@2 [db3,f3]@13 ~@3]/6", // Fm Eb F Eb Db
  T: "[[eb3,g3,bb3,eb4,g4,bb4]@7 ~ [db3,f3,ab3,db4,f4,ab4]@31 ~ [f3,f4]@4 [eb3,eb4]@3 ~ [db4,f4]@16, ~@40 ab4@23 ~, ~@20 c4@3 ~ [f3,ab3]@7 ~, ~@12 db3@3 ~]/4", // Eb Db F Eb Db Fm
  U: "[[eb3,g3,bb3,eb4,g4,bb4]@7 ~ [f3,f4]@4 eb3@4 [ab3,db4,f4]@16, ~@8 ab4@23 ~, ~@8 c4@7 ~ [db3,f3]@13 ~@3, ~@6 eb4 ~@9]/2", // Eb F Db
  V: "[[eb3,g3,bb3,eb4,g4,bb4]@7 ~ [f3,f4]@4 eb3@4 [db3,f3,ab3,db4,f4]@15 ~, ~@8 ab4@23 ~, ~@4 c4@3 ~@9, ~@6 eb4 ~@9]/2", // Eb F Db
  W: "[[eb3,g3,bb3,eb4,g4,bb4]@7 ~ [f3,f4]@4 eb3@4 [ab3,db4,f4]@16, ~@8 ab4@23 ~, ~@8 c4@6 ~@2 [db3,f3]@13 ~@3, ~@6 eb4 ~@9]/2", // Eb F Db
  X: "[[eb3,g3,bb3,eb4,g4,bb4]@7 ~ [f3,f4]@4 eb3@4 [ab3,db4,f4]@16, ~ ab4@3, ~@4 c4@3 ~ [db3,f3]@7 ~, ~@6 eb4 ~@9]/2", // Eb F Db
  Y: "[[eb3,g3,eb4,g4,bb4]@7 ~ [f3,f4]@4 eb3@4 [ab3,db4,f4]@15 ~, bb3@5 ~@3 ab4@23 ~, ~@8 c4@6 ~@2 [db3,f3]@13 ~@3, ~@6 eb4 ~@9]/2", // Eb F Db
  Z: "[[eb3,g3,bb3,eb4,g4,bb4]@3 ~ [f3,f4]@2 [eb3,eb4]@2 [ab3,db4,f4]@8, ~@8 ab4@23 ~, ~@8 c4@6 ~@2 [db3,f3]@13 ~@3]/2", // Eb F Eb Db
  AA: "[[eb3,g3,bb3,eb4,g4,bb4]@7 ~ [f3,f4]@4 [eb3,eb4]@4 [ab3,db4,f4]@16, ~@8 ab4@23 ~, ~@8 c4@7 ~ [db3,f3]@14 ~@2]/2", // Eb F Eb Db
  AB: "[[eb3,g3,bb3,eb4,g4,bb4]@7 ~ [f3,f4]@4 eb3@4 [ab3,db4,f4]@15 ~, ~@8 ab4@23 ~, ~@8 c4@6 ~@2 [db3,f3]@13 ~@3, ~@6 eb4 ~@9]/2", // Eb F Db
})).s("gm_pad_sweep").gain(0.43)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<A B C D E F G H I@2 ~@110 J K L M N O G P ~>".pickRestart({
  A: "~@8 [db4,f4] ~ db3@2 [bb3,g4] ~ db3@2, ~@4 ab3 ~ eb4 ~", // Db Eb
  B: "[eb4,ab4] ~ db3@2 [eb4,bb4] ~ db3@2 [eb4,ab4] ~ f3@2 [bb3,g4]@2 f3@2, c4@2 ~@2 c4@2 ~@2 c4@2 ~@2 eb4 ~@3", // Ab5 Eb5 Ab5 Eb
  C: "[db4,f4] ~ f3@2 [ab3,eb4] ~ f3@2 [db4,f4] ~ bb2@2 [bb3,eb4] ~ bb2@2, ab3 ~ db4 ~ ab3 ~ g4 ~", // Db Ab5 Db Eb5
  D: "[eb4,ab4] ~ bb2@2 [eb4,bb4] ~ bb2@2 [c4,eb4]@2 c3@2 [bb3,eb4] ~ c3@2, c4@2 ~@2 c4@2 ~@2 ab4 ~@3 g4@2 ~@2", // Ab5 Eb5 Cm Eb5
  E: "[db4,f4] ~ c3@2 [ab3,eb4]@2 c3@2 [db3,ab3]@2 g4 f4 eb4@2 f4@2, ab3@2 ~@2 db4 ~@3 f4 ~@7", // Db Ab5 Db5
  F: "[eb3,g4] ~ ab4 g4 f4@2 g4@2 [f3,c4] ~ bb4 ab4 g4@2 ab4@2, bb3 ~@3 ab4 ~@3", // Eb F5
  G: "f5@2 c5@2 ab4@2 f4@2 [db3,ab3] ~ g4 f4 eb4@2 f4@2, ~@4 f4 ~@3", // Db5
  H: "[eb3,bb3] ~ ab4 g4 f4@2 g4@2 [f3,c4] ~ f5@2 ab5@2 c6@2, g4 ~@3 ab4 ~@3", I: "[f6 ab6 c7 f7@7 ~@6]/2",
  J: "~@8 [ab3,db4] ~ db3@2 [eb4,g4]@2 db3@2, ~@8 f4@2 ~@2 bb3 ~@3", // Db5 Eb
  K: "[eb4,ab4] ~ db3@2 [eb4,bb4] ~ db3@2 [c4,ab4] ~ f3@2 [bb3,g4]@2 f3@2, c4@2 ~@2 c4@2 ~@2 eb4@2 ~@2 eb4 ~@3", // Ab5 Eb5 Fm Eb
  L: "[db4,f4] ~ f3@2 [ab3,db4]@2 f3@2 [db4,f4] ~ bb2@2 [bb3,eb4] ~ bb2@2, ab3@2 ~@2 eb4 ~@3 ab3@2 ~@2 g4@2 ~@2", // Db Db5 Db Eb5
  M: "[eb4,ab4] ~ bb2@2 [eb4,bb4] ~ bb2@2 [eb4,ab4] ~ c3@2 [bb3,g4]@2 c3@2, c4@2 ~@2 c4@2 ~@2 c4@2 ~@2 eb4 ~@3", // Ab5 Eb5 Ab5 Eb
  N: "[db4,f4] ~ c3@2 [ab3,db4] ~ c3@2 [ab3,f4] ~ g4 f4 eb4@2 f4@2, ab3 ~ eb4 ~ db3 ~@3", // Db Db5 Db
  O: "[eb3,bb3] ~ ab4 g4 f4@2 g4@2 [f3,c4] ~ bb4 ab4 g4@2 ab4@2, g4 ~@3 ab4 ~@3", // Eb5 F5
  P: "[eb3,bb3] ~ ab4 g4 f4@2 g4@2 [f3,ab4] ~@7, g4 ~@3 c4@4", // Eb5 Fm
})).s("gm_string_ensemble_1").gain(0.24)

// chords · synth strings 1 · "SYN STR 2"
const synth_strings_1 = note("<A B C D E F@2 G@2 ~@111 A H I J K L@2 M@2>".pickRestart({
  A: "~@8 [ab3,db4,f4] ~ db3 ~ [bb3,eb4,g4] ~ db3 ~", // Db Eb
  B: "[c4,eb4,ab4] ~ db3 ~ [eb4,bb4] ~ db3 ~ [c4,eb4,ab4] ~ f3@2 [bb3,eb4,g4] ~ f3 ~, ~@2 c4 ~@5", // Ab Eb5 Ab Eb
  C: "[ab3,db4,f4] ~ f3@2 [ab3,db4,eb4] ~ f3 ~ [ab3,db4,f4] ~ bb2 ~ [bb3,eb4,g4] ~ bb2@2", // Db Absus4 Db Eb
  D: "[c4,eb4,ab4] ~ bb2@2 [c4,eb4]@2 bb2@2 [c4,eb4,ab4] ~ c3@2 [bb3,eb4,g4] ~ c3@2, ~@4 bb4 ~@11", // Ab Cm Ab Eb
  E: "[ab3,db4,f4] ~ c3@2 [ab3,eb4] ~ c3 ~ f4@2 g4 f4 eb4 ~ f4 ~, ~@2 db4 ~ [db3,ab3]@4", // Db Ab5 Db5
  F: "[g4@2 ab4 g4 f4 ~ g4 ~ ab4 ~ bb4 ab4 g4 ~ ab4 ~ f5 ~ c5 ~ ab4 ~ f4 ~ f4 ~ g4 f4 eb4 ~ f4 ~, [eb3,bb3]@7 ~ [f3,c4]@15 ~ ab3@8, ~@12 db3@3 ~]/2", // Eb5 F5
  G: "[g4 ~ ab4 g4 f4 ~ g4 ~ ab4 ~ f4 ~ ab4 ~ c5 ~ f5 ~ ab5 ~ c6 ~ f6@2 ~@8, [eb3,bb3]@4 [f3,c4]@7 ~@5]/2", // Eb5 F5
  H: "[c4,eb4,ab4] ~ db3 ~ [c4,eb4,bb4] ~ db3 ~ [c4,eb4,ab4] ~ f3@2 [bb3,eb4,g4] ~ f3 ~", // Ab Cm7 Ab Eb
  I: "[ab3,db4,f4] ~ f3@2 [ab3,db4,eb4] ~ f3 ~ [ab3,db4,f4] ~ bb2@2 [bb3,eb4,g4] ~ bb2@2", // Db Absus4 Db Eb
  J: "[c4,eb4,ab4] ~ bb2@2 [eb4,bb4] ~ bb2@2 [c4,eb4,ab4] ~ c3@2 [bb3,eb4,g4] ~ c3@2, ~@2 c4 ~@5", // Ab Eb5 Ab Eb
  K: "[ab3,f4]@2 c3@2 [ab3,db4,eb4] ~ c3 ~ f4@2 g4 f4 eb4@2 f4 ~, db4 ~@7 [db3,ab3]@8", // Db Absus4 Db5
  L: "[g4 ~ ab4 g4 f4 ~ g4 ~ ab4@2 bb4 ab4 g4 ~ ab4 ~ f5 ~ c5 ~ ab4 ~ f4 ~ f4 ~ g4 f4 eb4 ~ f4 ~, [eb3,bb3]@7 ~ [f3,c4]@15 ~ ab3@8, ~@12 db3@3 ~]/2", // Eb5 F5
  M: "[g4 ~ ab4 g4 f4 ~ g4 ~ [c4,ab4]@14 ~@10, [eb3,bb3]@7 f3@15 ~@10]/2", // Fm Eb5
})).s("gm_synth_strings_1").gain(0.21)

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

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@33 A@7 ~@2 A ~@5 A ~@10 A@7 ~@2 A ~@5 A ~@10 A ~ A ~ A ~ A@3 ~@2 A ~@5 A ~@3 A ~@3 A ~@3 A ~@3 A ~@10
>`.pickRestart({
  A: "~ x ~ x ~@4",
})).gain(0.24)

stack(bass, accordion, pad_sweep, string_ensemble_1, synth_strings_1, kick, snare, open_hat)

More by Madonna