Strudelify
Flashdance cover art

Flashdance

Irene Cara

KeyB♭ majorTempo126 bpm
0:00/0:00
// Flashdance — Irene Cara
// 126 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 7 "tk7" synth brass 2 (copy of ch 8 "tk8" piano)
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(126/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 drum · "tk2"
const synth_drum = note("<~@85 [~@4 e2 ~@7 e2 ~@3]!8 ~@19>").s("gm_synth_drum").gain(0.5)

// other · marimba · "tk3"
const marimba = note("<~ A B C D E F G H I J K L M N O P Q R S T U V W X ~@87>".pickRestart({
  A: "~@6 f4 f3 ~ bb3 c4 f4 ~ f3 bb3 c4", B: "~ f4 f3 bb3 c4 ~ f4 f3 bb3 ~ c4 f4 g3 ~ a3 c4",
  C: "f4 ~ c4 a3 f4 ~ c4 a3 g4 f4 ~ c4 a3 f4 ~ g4", D: "g3 eb4 ~ c4 g4 eb4 ~ c4 d4 c4 ~ g4 c4 d4 c4 ~",
  E: "eb4 c4 g3 ~ c4 d4 g4 ~ d4 bb3 g3 ~ bb3 d4 g4 ~", F: "d4 bb3 g3 bb3 ~ d4 g4 d4 ~ bb3 f4 f3 ~ bb3 c4 f4",
  G: "~ f3 bb3 c4 ~ f4 f3 bb3 c4 ~ f4 f3 bb3 ~ c4 f4", H: "g3 ~ a3 c4 f4 ~ c4 a3 f4 ~ c4 a3 g4 f4 ~ c4",
  I: "a3 f4 ~ g4 g3 eb4 ~ c4 g4 eb4 ~ c4 d4 c4 ~ g4", J: "c4 d4 c4 ~ eb4 c4 g3 ~ c4 d4 g4 ~ d4 bb3 g3 ~",
  K: "bb3 d4 g4 ~ d4 bb3 g3 bb3 ~ d4 g4 d4 ~ bb3 g3 bb3", L: "~ eb4 f4 bb3 ~ g3 bb3 eb4 ~ g3 bb3 eb4 f4 ~ bb3 g3",
  M: "bb3 ~ eb4 bb3 f3 ~ c4 d4 f4 ~ f3 bb3 c4 ~ f3 bb3", N: "c4 f4 ~ c4 bb3 f3 ~ bb3 ab3 eb4 ~ c4 ab4 eb4 ~ bb3",
  O: "c4 ab4 ~ eb4 bb3 c4 ab4 ~ eb4 bb3 c4 ~ bb3!2 f4 ~", P: "g4 bb3 g3 ~ bb3 f4 eb4 ~ a3 c4 g4 f4 ~ c4 a3 c4",
  Q: "~ f4!2 f3 ~ bb3 c4 f4 ~ f3 bb3 c4 ~ f4 f3 bb3", R: "c4 ~ f4 f3 bb3 ~ c4 f4 g3 ~ a3 c4 f4 ~ c4 a3",
  S: "f4 ~ c4 a3 g4 f4 ~ c4 a3 f4 ~ g4 g3 eb4 ~ c4", T: "g4 eb4 ~ c4 d4 c4 ~ g4 c4 d4 c4 ~ eb4 c4 g3 ~",
  U: "c4 d4 g4 ~ d4 bb3 g3 ~ bb3 d4 g4 ~ d4 bb3 g3 bb3", V: "~ d4 g4 d4 ~ bb3 g3 bb3 ~ eb4 f4 bb3 ~ g3 bb3 eb4",
  W: "~ g3 bb3 eb4 f4 ~ bb3 g3 bb3 ~ eb4 bb3 f3 ~ c4 d4", X: "f4 ~ f3 bb3 c4 ~ f3 bb3 c4 f4 ~ c4 bb3 f3 ~ bb3",
})).s("gm_marimba").gain(0.3)

// bass · synth bass 2 · "tk4"
const bass = note("<~ A@2 B C D@8 E@8 F G@3 ~@87>".pickRestart({
  A: "[~@6 bb1@16 d2@2 eb2@2 ~ f2@2 ~ c2@2]/2", B: "f1@10 ~ a1@2 bb1@2 ~", C: "c2",
  D: "[eb2@2 f2@2 ~ g2@2 ~ d2@2 g1@10 ~ g1@5 bb1@16 d2@2 eb2@2 ~ f2@16 f2@5 c2@16 eb2@2 f2@2 ~ g2@13 d2@2 ~ g1@5 eb2@16 eb2@2]/8",
  E: "[~@3 bb1@16 bb1@5 ab1@13 eb2@2 ~ ab2@2 eb2@2 ~ f1@13 c2@2 ~ f2@2 c2@2 ~ bb1@16 d2@2 eb2@2 ~ f2@16 f2@5 c2@16 eb2@2 f2@2]/8",
  F: "~ g2@15", G: "[~ g1@5 eb2@16 eb2@5 bb1@18 bb1@2 ~]/3",
})).s("gm_synth_bass_2").gain(0.45)

// bass · acoustic bass · "tk5"
const bass_2 = note(`<
  ~@25 A B C@2 D E F G H I B J K L K M N O P Q K R K M N S P@2 T U V W X Y B Z D E F G H I B J K L K M N O P Q K R K M N
  S P@2 AA@2 AB@2 AA@2 AB AC AD AE AD AE N S P AF AG AH AG AH AG AH AG AH AI@3
>`.pickRestart({
  A: "ab1!4", B: "ab1@2 ab1@2 ab1!2 ab1@2", C: "f1!4", D: "bb1@3 bb1 bb1@2 d1 eb1", E: "f1@3 f1 f1@2 a1 bb1",
  F: "c2@3 c2 c2@2 eb1 f1", G: "g1@3 g1 g1@2 g1 f1", H: "eb1@3 eb1 eb1@2 g1 a1", I: "bb1@3 bb1 bb1@2 bb1 f1",
  J: "f1@3 f1!3 ~ f1", K: "g1@2 g2 g1 f1@2 f2 f1", L: "eb1@2 eb2 eb1!2 eb2 ~ g1", M: "eb1@2 eb2 eb1!2 f2 ~ bb1",
  N: "bb1!2 ~ c2!3 ~ c2", O: "d2!2 ~ eb2!3 eb1@2", P: "f1@2 f2@2 f1!2 f2@2", Q: "f1@2 f2@2 f1!2 ~ g1",
  R: "eb1@2 eb2 eb1!2 f2 ~ g1", S: "d2!2 ~ eb2@2 eb2 eb1@2", T: "bb1@2 ~ bb1 bb1@2 d1 eb1", U: "f1@2 ~ f1 f1@2 a1 bb1",
  V: "c2@2 ~ c2 c2@2 eb1 f1", W: "g1@2 ~ g1 g1@2 g1 f1", X: "eb1@2 ~ eb1 eb1@2 g1 a1", Y: "bb1@2 ~ bb1 bb1@2 bb1 f1",
  Z: "f1@2 f1@2 f1!2 ~ f1", AA: "ab1!2 ~ ab2 ab1!2 ~ ab2", AB: "f1!2 ~ f2 f1!2 ~ f2", AC: "f1!2 ~ f2 f1!2 ~ g1",
  AD: "g1!2 ~@3 g1!2 ~", AE: "eb1!3 ~@2 f1!2 ~", AF: "f1!2 f2@2 f1!2 f2 g1", AG: "g1!2 g2 g1 f1!2 f2 f1",
  AH: "eb1!2 eb2 eb1 f1!2 f2 g1", AI: "[g1@2 g1@3 d1 f1 g1@2 d1 f1 bb1@9 bb1 ~@3]/3",
})).s("gm_acoustic_bass").gain(0.45)

// chords · piano · "tk8"
const piano = note(`<
  ~@17 A@3 B C D E F G H I J K L M N O K P Q R S@2 T@2 U V W@2 S@2 T@2 U X Y Z AA@6 AB K L M N O K AC Q R S@2 T@2 U AD
  W@2 S@2 T@2 U X Y ~@8 AE AF AE AF AG AH X AI@8 AJ AK AL@2
>`.pickRestart({
  A: "[~@7 bb3@2 ~ d4@2 ~ f4@2 d4@2 ~ bb3@5 ~@5 a3@2 ~ c4@2 ~ f4@2 c4@2 ~ a3@5 ~@4]/3",
  B: "~ c4@2 ~ eb4@2 ~ g4@2 eb4@2 ~ c4@4", C: "~@6 bb3@2 ~ d4@2 ~ g4@2 d4@2", D: "~ bb3@5 ~@5 bb3@2 ~ eb4@2",
  E: "~ g4@2 eb4@2 ~ bb3@5 ~@5", F: "bb3@2 ~ d4@2 ~ f4@2 d4@2 ~ bb3@2 ~@3",
  G: "~@2 [eb4,ab4,c5]@2 [eb4,ab4,c5] [eb4,g4,bb4]!3", H: "~ [eb4,ab4,c5] [eb4,ab4,c5]@6",
  I: "~@2 [eb4,g4,bb4]@2 [eb4,g4,bb4]!2 ~ [eb4,g4,bb4]", // Eb
  J: "~ [f4,a4,c5] [f4,a4,c5]@2 [eb4,g4,bb4] [f4,a4,c5] [f4,a4,c5]@2", K: "~@2 bb3 d4 f4 d4 bb3@2",
  L: "~@2 a3 c4 f4 c4 a3@2", M: "~@2 c4 eb4 g4 eb4 c4@2", N: "~@2 bb3 d4 g4 d4 bb3@2", O: "~@2 bb3 eb4 g4 eb4 bb3@2",
  P: "~@2 eb4@2 g3 ab3 eb4@2", Q: "f4!2 f4@2 f4!2 ~@2", R: "~@2 [d4,g4,bb4]@2 [d4,g4,bb4] [c4,f4,a4]!3",
  S: "[~ [bb3,eb4,g4] [bb3,eb4,g4]@2 ~ [c4,f4,a4] ~ [d4,g4,bb4]@3 [d4,g4,bb4]@2 [d4,g4,bb4] [c4,f4,a4]!3]/2", // Eb F Gm F
  T: "[~ [bb3,eb4,g4] [bb3,eb4,g4]@2 ~ [c4,f4,a4] ~ [d4,f4,bb4]@4 [eb4,g4,bb4]@5]/2", U: "[d4,f4,bb4]@3 [eb4,g4,bb4]@5",
  V: "[bb3,c4,f4] [bb3,c4,f4]@2 [bb3,c4,f4]", // Bbsus2
  W: "[[a3,c4,f4]@2 [a3,c4,f4]@2 ~ [c4,f4,a4] ~ [d4,g4,bb4]@3 [d4,g4,bb4]@2 [d4,g4,bb4] [c4,f4,a4]!3]/2", // F Gm F
  X: "[bb3,c4,f4]@2 [bb3,c4,f4]@2 ~ [bb3,c4,f4]@3", Y: "[a3,c4,f4]!4", Z: "~ [bb3,d4,f4]!2 [bb3,f4]",
  AA: "[~@2 [c4,f4]@2 [a3,c4,f4]@2 [a3,c4,g4] eb4@2 ~ [eb4,g4]@2 [c4,eb4,g4]@2 f4 d4@2 g3 [bb3,d4] g3 ~ c4 bb3 g4@2 ~ [eb4,g4]@2 [bb3,eb4,g4] f4 g4 f4@2 ~ bb3@2 [f3,bb3,d4] eb4 d4 ~@3 [eb4,ab4]@2 [bb3,eb4,g4] [c4,eb4,ab4] [c4,eb4,ab4]@2, ~ a3@3 ~@5 c4@3 ~@13 bb3@3 ~@5 f3@3 ~@3 c4@5 ~@4]/6", // F5 F Am7 Eb Cm Bb Eb Bb …
  AB: "~@2 [g3,bb3,eb4]@2 [g3,bb3,eb4] [a3,c4,f4] [a3,c4,f4]@2", AC: "~@2 eb4@2 f3 ab3 eb4@2",
  AD: "[bb3,c4,f4]@2 [bb3,c4,f4]@3 [bb3,c4,f4]@3", AE: "[d5,g5,bb5]!2 ~@3 [c5,f5,a5]!2 ~",
  AF: "[bb4,eb5,g5]!3 ~@2 [c5,f5,a5]!2 ~", AG: "[d4,f4] bb3 d4 [eb4,g4]@5", AH: "[d4,f4] bb3 [d4,f4] [eb4,g4]@5",
  AI: "[[a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4]!2 [c4,f4,a4] [d4,g4,bb4]@3 [d4,g4,bb4]!3 [c4,f4,a4]!2 [c4,f4,a4]@2 [bb3,eb4,g4] [bb3,eb4,g4]@2 ~ [c4,f4,a4] ~ [d4,g4,bb4]@3 [d4,g4,bb4]!3 [c4,f4,a4]!2 [c4,f4,a4]@2 [bb3,eb4,g4] [bb3,eb4,g4]@2 ~ [c4,f4,a4] ~ [d4,g4,bb4]@3 [d4,g4,bb4]!3 [c4,f4,a4]!2 [c4,f4,a4]@2 [bb3,eb4,g4] [bb3,eb4,g4]@2 ~ [c4,f4,a4] ~ [d4,g4,bb4]@3 [d4,g4,bb4]!3 [c4,f4,a4]!3]/8", // F Gm F Eb F Gm F Eb …
  AJ: "~ [bb3,eb4,g4] [bb3,eb4,g4]@2 ~ [c4,f4,a4] ~ [d4,g4,bb4]", AK: "[d4,g4,bb4] ~ [d4,g4,bb4]@2 ~ d4 f4 g4",
  AL: "[~ f4 g4 [d4,f4,bb4]@9 [d4,f4,bb4] ~@3]/2", // Bb
})).s("gm_piano").gain(0.45)

// chords · string ensemble 1 · "tk9"
const string_ensemble_1 = note(`<
  ~ A@4 B@5 C@7 D@8 E@2 F@2 G H@2 I@3 J K L M L M N@2 O@2 L M L M N@2 P@2 G H@2 I@3 J Q G H@2 I@3 J K L M L M N@2 O@2 L
  M L M N@2 P@2 ~ R ~ S ~ R ~ S ~@4 T@2 U V@8 W X ~@2
>`.pickRestart({
  A: "[~@6 [bb3,d4]@21 a3@21 eb4@16, ~@27 c4@37]/4", B: "[~@5 [bb3,d4]@42 a3@21 eb4@12, ~@47 c4@33]/5",
  C: "[~@9 d4@21 eb4@21 d4@21 [ab3,c4]@21 [g3,bb3]@10 ~ [a3,c4]@8, ~@9 bb3@63 ~@40]/7", // Ab Gm Am
  D: "[~@2 [bb3,d4]@21 a3@21 eb4@21 d4@21 eb4@21 d4@21, ~@23 c4@42 bb3@63]/8", E: "[ab3,c4]/2",
  F: "[f3@7 g3@2 [a3,c4] [a3,c4]@2 [g3,bb3] [a3,c4]@3, bb3@9 ~@7]/2", G: "[bb3,d4]", H: "[a3 eb4, c4]/2",
  I: "[d4 eb4 d4, bb3]/3", J: "[ab3,c4]", K: "~ [g3,bb3] [a3,c4] ~", L: "~@2 [d5,bb5]@2 [d5,bb5] [c5,a5]!3",
  M: "~ [bb4,g5] [bb4,g5]@2 ~@4", N: "bb5@3 c6@5", O: "[f5@7 ~]/2", P: "f5/2", Q: "[g3,bb3] [a3,c4]",
  R: "~@4 [eb5,ab5] ~ [eb5,ab5] ~", S: "~@4 [c5,f5] ~ [c5,f5] ~", T: "bb3/2", U: "bb3",
  V: "[a3@4 ~ [c5,a5]@2 [d5,bb5]@5 [d5,bb5] [c5,a5]!2 [c5,a5]@2 [bb4,g5] [bb4,g5]@2 ~ [c5,a5]@2 [d5,bb5]@5 [d5,bb5] [c5,a5]!2 [c5,a5]@2 [bb4,g5] [bb4,g5]@2 ~ [c5,a5]@2 [d5,bb5]@5 [d5,bb5] [c5,a5]!2 [c5,a5]@2 [bb4,g5] [bb4,g5]@2 ~ [c5,a5]@2 [d5,bb5]@5 [d5,bb5] [c5,a5]!3]/8", // F Gm F Eb F Gm F Eb …
  W: "~ [bb4,g5] [bb4,g5]@2 ~ [c5,a5]@2 [d5,bb5]", X: "[d5,bb5] ~@7",
})).s("gm_string_ensemble_1").gain(0.35)

// chords · overdriven guitar · "tk11"
const overdriven_guitar = note(`<
  ~@29 A B C D E A F G ~@16 A B C D E A F H A B C D E A F G ~@16 I J K L I J K M N O N O P@2 Q R ~@11
>`.pickRestart({
  A: "~@4 [bb3,d4,f4]@2 ~@4 [bb3,d4,f4]@3 ~@3", B: "~@4 [a3,c4,f4]@2 ~@4 [a3,c4,f4]@3 ~@3",
  C: "~@4 [c4,eb4,g4]@2 ~@4 [c4,eb4,g4]@3 ~@3", D: "~@4 [bb3,d4,g4]@2 ~@4 [bb3,d4,g4]@3 ~@3",
  E: "~@4 [bb3,eb4,g4]@2 ~@4 [bb3,eb4,g4]@3 ~@3", F: "~@4 [ab3,c4,eb4]@2 ~@4 [ab3,c4,eb4]@3 ~@3",
  G: "~@4 [g3,bb3,eb4]@2 ~@2 [a3,c4,f4]@2 [a3,c4,f4]@3 ~@3", // Eb F
  H: "~@4 [g3,bb3,eb4]@2 ~@2 [g3,bb3,eb4]@2 [a3,c4,f4]@3 ~@3", I: "~@2 [eb4,ab4]@2 ~ [eb4,ab4]!2 ~",
  J: "[eb4,ab4]@2 ~ [eb4,ab4] ~@3 [bb3,eb4]", K: "[c4,f4] c4 d4 c4 [c4,eb4] ~@3", L: "[c4,eb4] c4 d4 c4 ~ d4 c4 a3",
  M: "[c4,eb4] c4 d4 c4 ~@4", N: "[g4,bb4]!2 ~@3 [f4,a4]!2 ~", O: "[eb4,g4]!3 ~@2 [f4,a4]!2 ~",
  P: "[d4,f4]@3 [eb4,g4]@5", Q: "[bb3,c4,f4] ~ [bb3,c4,f4]@2 ~ [bb3,c4,f4]@2 ~", R: "[a3,c4,f4] ~ [a3,c4,f4]@3 ~@3",
})).s("gm_overdriven_guitar").gain(0.35).pan(0.7)

// chords · lead 5 charang · "tk12"
const lead_5_charang = note("<~@85 A B C D A B C D ~@19>".pickRestart({
  A: "[eb4,ab4]@2 ~ [eb4,ab4] ~@3 [eb4,ab4]", B: "~ [eb4,ab4] f4 eb4 [eb4,ab4] ~ [eb4,ab4] ~",
  C: "~@5 [c4,f4] ~ [c4,f4]", D: "~ f4 d4 c4 [c4,f4] ~ [c4,f4] ~",
})).s("gm_lead_5_charang").gain(0.45).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@25 [x!2]!85 ~ [~ x]>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@25 [~ x ~ x]!27 ~ [~ x ~ x]!31 [~@14 x!2] [~ x ~ x]!25 ~ [~ x]>").gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@28 A ~@7 A ~@7 A ~@7 A ~@15 B ~@7 C ~@7 D ~@7 A ~@11 E ~@3 F ~ G ~>".pickRestart({
  A: "~@6 x!2", B: "~@4 x ~@2 x", C: "~@3 x", D: "x!8", E: "~@7 x", F: "~@2 x!2", G: "~@3 x ~@4",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<A B ~@23 C@11 D C@47 D E C@19 E C@4 F ~>".pickRestart({
  A: "~ x ~@4 x ~@5 x ~@3", B: "~ x ~@14", C: "x!8", D: "x!7 ~", E: "~ x!7", F: "~ x!2 ~@5",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@28 A ~@7 B ~@6 C D ~@7 E ~@15 F ~@6 C G ~@8 H I H I H I H J ~@11 C ~@5 K ~
>`.pickRestart({
  A: "~@3 x!2 ~@3", B: "~@4 x!2 ~@2", C: "~@7 x", D: "~@2 x ~ x ~@3 x!3 ~@5", E: "~@4 x ~@3 x ~@2 x ~@4",
  F: "~ x!3 ~@2 x ~", G: "~ x!2 ~ x!2 ~@2", H: "~ x ~ x", I: "~ x ~@3 x ~@2", J: "~@2 x ~ x ~ x ~ x!3 ~@5",
  K: "~ x ~@2",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@46 [~@7 x] ~@65>").gain(0.3)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@27 A B ~@7 C ~@6 D C ~@7 E ~@14 A F ~@6 D C ~@6 A G H I H I H I H J ~@17 E ~
>`.pickRestart({
  A: "~@7 x", B: "~ x!2 ~@5", C: "~@3 x ~@4", D: "~@3 x ~@2 x ~", E: "~ x ~@6", F: "x ~@10 x ~@4", G: "x!8",
  H: "~ x ~ x", I: "~ x ~@3 x ~@2", J: "~ x!3 ~@4",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct("<~@29 A ~@6 B A ~@7 A ~@7 A ~@15 A ~@6 B A ~@7 A ~@19 A ~@4 C D>".pickRestart({
  A: "x", B: "~@7 x", C: "~@3 x ~@4", D: "~ x",
})).gain(0.35)

stack(
  synth_drum, marimba, bass, bass_2, piano, string_ensemble_1, overdriven_guitar, lead_5_charang, kick, snare, low_tom,
  hihat, mid_tom, open_hat, high_tom, crash
)

More by Irene Cara