Strudelify

Lost in Music

Sister Sledge

KeyE♭ minorTempo122 bpm
0:00/0:00
// Lost in Music — Sister Sledge
// 122 bpm, 4/4, key D# minor. 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: Full arrangement: all 138 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(122/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.

// chords · piano
const piano = note(`<
  ~@8 A@3 B@2 C@2 D@2 E@2 B@2 C@2 F@2 G@2 H@2 I@2 J@2 K@2 J@2 L@2 M@4 B@2 C@2 D@2 E@2 B@2 C@2 F@2 G@2 H@2 I@2 J@2 K@2
  J@2 L@2 M@4 B@2 C@2 D@2 E@2 B@2 C@2 N@4 B@2 C@2 D@2 E@2 B@2 C@2 N@4 B@2 C@2 D@2 E@2 B@2 C@2 N@4 B@2 C@2 D@2 E@2 B@2
  C@2 O@3
>`.pickRestart({
  A: "[~@14 [db3,f3,ab3,db4]@4 db2 ~ eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2 ~ [gb1,db3,f3,ab3,db4]@2, ~@10 [eb3,gb3,bb3,eb4]@5 gb4@7 ~@2, ~@31 eb5@13 ~@4]/3", // Db Ebm
  B: "[~@2 [ab1,db3,f3,ab3,db4] ~ ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1 ~ [db2,db3,f3,ab3,db4]@2, ~@2 [ab2,eb3,ab3,c4]@5 [eb4,ab4]@7 ~@2, ~@15 c5@13 ~@4]/2", // Db Ab Ab5
  C: "[~@2 [db2,db3,f3,ab3,db4] ~ b1@2 ~@2 b1@2 ~@2 b1@2 ~@2 b1@2 ~@2 b1@2 ~@2 b1@2 ~@2 b1 ~ [b1,b2,eb3,gb3,b3]@2, ~@2 [b2,eb3,gb3,b3]@5 [eb4,gb4]@7 ~@2, ~@15 b4@13 ~@4]/2", // Db B Ebm
  D: "[~@2 [b1,b2,eb3,gb3,b3] ~ db2@2 ~@2 db2@2 ~@2 db2@2 eb4 ~ db2@2 ~@2 db2@2 ~@2 db2@2 ~@2 db2 ~ [db2,db3,f3,ab3,db4]@2, ~@2 [db3,f3,ab3,db4]@5 [ab3,db4]@7 ~@2, ~@15 f4@13 ~@4]/2", // B Db Db5
  E: "[~@2 [db2,db3,f3,ab3,db4] ~ eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2 ~ [gb1,db3,f3,ab3,db4]@2, ~@2 [eb3,gb3,bb3,eb4]@5 gb4@7 ~@2, ~@15 eb5@13 ~@4]/2", // Db Ebm
  F: "[~@2 [b1,b2,eb3,gb3,b3] ~ db2@2 ~@2 db2@2 ~@2 db2@2 eb4 ~ db2@2 ~@2 db2@2 ~@2 db2@2 ~@2 db2 ~ db2@2, ~@2 [db3,f3,ab3,db4]@5 [ab3,db4]@7 ~@2, ~@15 f4@13 ~@4]/2", // B Db Db5
  G: "[eb2@2 ~@2 eb2@3 db2 [eb2,gb3,bb3,eb4] ~ [db2,f3,ab3,db4]@3 ~ gb3 ~@3 ab1 ~ ab1@2 ~ ab1!2 ~ ab1 ~ ab1@2 bb1 ~, [gb3,bb3,eb4]@7 ~@7 [c3,eb3]@9 ~ [c3,eb3,ab3]@6 ~@2, ~@7 ab1 ~@8, ~@15 ab3@8 ~@9]/2", // Ebm Db Ebm Cm Ab
  H: "[b1@3 ~ b1@2 ~ b1!2 ~ [db2,f3,ab3,db4]@3 ~ eb2@3 ~ eb2 ~ eb2@2 ~ eb2 db2@2 eb2 ~ eb2@2 db2 ~, [eb3,gb3,b3]@8 ~@6 [gb3,bb3,eb4]@8 ~ [eb4,gb4]@6 ~@3]/2", // Db B Ebm
  I: "[[gb3,bb3,eb4]@7 ~ [gb3,bb3,eb4] ~ [f3,ab3,db4]@3 ~ gb3 ~@5 eb4@3 ~ [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@3 ~, ~@14 [c3,eb3]@9 ~@9, ~@15 ab3@8 ~@9]/2", // Ebm Db Ab Cm
  J: "[[eb3,gb3,b3]@8 ~@2 [f3,ab3,db4]@3 ~ [gb3,bb3,eb4]@8 ~ [eb4,gb4]@6 ~@3]/2", // B Db Ebm
  K: "[[gb3,bb3,eb4]@3 ~ [gb3,bb3,eb4]@5 ~ [f3,ab3,db4]@3 ~ gb3 ab3@8 ~ [c3,eb3,ab3]@6 ~@2, ~@14 [c3,eb3]@9 ~@9]/2", // Ebm Db Ab Cm
  L: "[[gb3,bb3,eb4]@7 ~ [gb3,bb3,eb4] ~ [f3,ab3,db4]@3 ~ gb3 ab3@8 ~ [c3,eb3,ab3]@6 ~@2, ~@14 [c3,eb3]@9 ~@9]/2", // Ebm Db Ab Cm
  M: "[[eb3,gb3,b3]@8 ~@2 [f3,ab3,db4]@3 ~ [gb3,bb3,eb4]@8 ~ [eb4,gb4]@6 ~ [db3,f3,ab3,db4]@4 db2 ~ eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2 ~ [gb1,db3,f3,ab3,db4]@2, ~@18 [eb3,gb3,bb3,eb4]@5 gb4@7 ~@2, ~@47 eb5@13 ~@4]/4", // B Db Ebm Db Ebm
  N: "[~@2 [b1,b2,eb3,gb3,b3] ~ db2@2 ~@2 db2@2 ~@2 db2@2 eb4 ~ db2@2 ~@2 db2@2 ~@2 db2@2 ~@2 db2 ~ [db3,f3,ab3,db4]@4 db2 ~ eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2 ~ [gb1,db3,f3,ab3,db4]@2, ~@4 [db3,f3,ab3,db4]@10 [ab3,db4]@14 ~@2 db2@2 ~@4 [eb3,gb3,bb3,eb4]@10 ~ eb5@13 ~@4, ~@15 f4@13 ~@18 gb4@14 ~@4]/4", // B Db Db5 Ebm
  O: "[~@2 [b1,b2,eb3,gb3,b3] ~ db2@2 ~@2 db2@2 ~@2 db2@2 eb4 ~ db2@2 ~@2 db2@2 ~@2 db2@2 bb1 ~ [db2,db3,f3,ab3,db4] ~ [eb2,eb3,gb3,bb3,eb4]@18, ~@2 [db3,f3,ab3,db4]@5 [ab3,db4]@6 ~@11, ~@15 f4@11 ~@22]/3", // B Db Ebm Db Db5
})).s("gm_piano").gain(0.4).pan(0.3)

// bass · electric bass finger
const bass = note(`<
  ~ A@7 B C D E F G H I J K D E F G H L M N O P Q N O P Q N O P Q N O P Q K D E F G H I J K D E F G H L M N O P Q N O P
  Q N O P Q N O P Q K D E F G H I J K D E F G H L M K D E F G H I J K D E F G H L M K D E F G H I J K D E F G H L M K D
  E F G H I J K D E F G H L R@2
>`.pickRestart({
  A: "eb1@3 ~@3 eb1 ~ eb1 ~ eb1 ~ eb1!4", B: "eb1@3 ~@3 eb1 ~ eb1 ~ eb1 ~ eb1 ~ db2@2",
  C: "~@2 ab1 ~ eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2", D: "eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2 ~ gb1 ~",
  E: "~@2 ab1 ~ ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2", F: "ab1@2 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1 ~ db2 ~",
  G: "~@2 db2 ~ b1@2 ~@2 b1@2 ~@2 b1@2 ~@2", H: "b1@2 ~@2 b1@2 ~@2 b1@2 ~@2 b1 ~ b1 ~",
  I: "~@2 b1 ~ db2@2 ~@2 db2@2 ~@2 db2@2 ~@2", J: "db2@2 ~@2 db2@2 ~@2 db2@2 ~@2 db2 ~ db2 ~",
  K: "~@2 db2 ~ eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2", L: "~@2 b1 ~ db2@3 ~ db2@3 ~ db2@3 ~",
  M: "db2@3 ~ db2@3 ~ db2@3 ~ db2 ~ db2@2", N: "eb2@2 ~@2 eb2@3 db2 eb2 ~ db2@2 ~@2 ab1@2",
  O: "~@2 ab1 ~ ab1@2 ~ ab1!2 ~ ab1 ~ ab1@2 bb1 ~", P: "b1@3 ~ b1@2 ~ b1!2 ~ db2@3 ~ eb2@2",
  Q: "~@2 eb2 ~ eb2@2 ~ eb2 db2@2 eb2 ~ eb2@2 db2 ~", R: "[db2@3 ~ db2@3 ~ db2@2 bb1 ~ db2 ~ eb2@18]/2",
})).s("gm_electric_bass_finger").gain(0.45)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@17 A B C D E F G H I J K L I J K L I J K L I J K L A M C D E F G N A M C D E F G N I J K L I J K L I J K L I J K L A
  M C D E F G N A M C D E F G H A M C D E F G N A M C D E F G N A M C D E F G H A M C D E F G N A M C D E F G N A M C D
  E F G O ~
>`.pickRestart({
  A: "~ [gb4,bb4,eb5] ~@2 [gb4,bb4,eb5] ~@3 [gb4,bb4,db5] [gb4,bb4,eb5] ~ [gb4,bb4,eb5]@2 ~ [gb4,bb4,eb5] ~", // Ebm Gb Ebm
  B: "~ [gb4,bb4,eb5] ~@2 [gb4,bb4,eb5] ~@3 [gb4,bb4,db5] [gb4,bb4,eb5]!2 [gb4,bb4,eb5]@2 ~ [f4,ab4,db5] ~", // Ebm Gb Ebm Db
  C: "~@2 [eb4,ab4,c5] ~ [eb4,ab4,c5] ~@4 c5 ~ [eb4,ab4,c5] ~ [eb4,ab4,c5]!3, ~@4 [eb4,ab4,bb4] ~@3", // Ab Ebsus4
  D: "~ c5 ~ [eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2 c5 ~ [eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~, [eb4,ab4,bb4] ~@3 [eb4,ab4,bb4] ~@3", // Ab Ebsus4
  E: "~@2 [f4,ab4,db5] ~ [eb4,gb4,b4]@3 ~ [eb4,gb4,b4]@2 ~ [eb4,gb4,b4] ~ [eb4,gb4,b4]!3", // Db B
  F: "[eb4,gb4,bb4] [eb4,gb4,b4] ~ [eb4,gb4,b4] ~ [eb4,gb4,b4] ~ [eb4,gb4,b4] ~ b4 ~ [eb4,gb4,b4]@2 ~ [eb4,gb4,b4] ~, ~@4 [eb4,gb4,bb4] ~@3", // Ebm B Ebm
  G: "~ [f4,ab4,db5] ~@2 [f4,ab4,db5] ~@3 [f4,ab4,db5]@2 ~ [f4,ab4,db5] ~@2 [f4,ab4,db5] ~", // Db
  H: "~ [f4,ab4,db5] ~@2 [f4,ab4,db5] ~@3 [f4,ab4,db5]@2 ~ db5 ~ bb4 db5 ~, ~@11 [f4,ab4]@4 ~", // Db Fm
  I: "~@2 [gb4,bb4,eb5] ~ [gb4,bb4,eb5]!2 ~@2 [gb4,bb4,eb5]@2 ~ [f4,ab4,db5] ~@2 [eb4,ab4,c5]@2", // Ebm Db Ab
  J: "~@2 [eb4,ab4,c5] ~ [eb4,ab4,c5]!2 ~@3 c5 ~ [eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~, ~@4 [eb4,ab4,bb4] ~@3", // Ab Ebsus4
  K: "~ [b3,eb4,gb4]!8 ~ [db4,f4,ab4]@2 ~@2 [eb4,gb4,bb4]@2", // B Db Ebm
  L: "~@2 [eb4,gb4,bb4] ~ [eb4,gb4,bb4]!2 ~ [eb4,gb4,bb4] db5 ~ db5@2 [eb4,gb4,bb4] ~@3", // Ebm
  M: "~ [gb4,bb4,eb5] ~@2 [gb4,bb4,eb5] ~@2 [gb4,bb4,db5] [gb4,bb4,eb5] ~ [gb4,bb4,eb5] ~ [gb4,bb4,eb5]@2 [f4,ab4,db5] ~", // Ebm Gb Ebm Db
  N: "~ [f4,ab4,db5] ~@2 [f4,ab4,db5] ~@3 [f4,ab4,db5]@2 ~ db5 ~ bb4 db5 eb5, ~@11 [f4,ab4]@4 ~", // Db Fm
  O: "~ [f4,ab4,db5] ~@2 [f4,ab4,db5] ~@3 [f4,ab4,db5]@2 ~ [f4,ab4]@2 bb4 db5 eb5, ~@11 db5 ~@4", // Db Fm
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.7)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@8 A@7 B@8 C@4 ~@13 A@7 B@8 C@4 ~@13 A@7 B@56 D@3>".pickRestart({
  A: "[~@14 [gb5,bb5,eb6]@27 ~ [eb5,gb5,bb5] ~ [eb5,gb5,bb5] ~ [eb5,gb5]@6 [c5,eb5]@24 ~@2 [f4,ab4,db5,f5]@6 [gb4,b4,eb5,gb5]@28, ~@23 ab4@15 ~@18]/7", // Ebm Cm Db B
  B: "[~@4 [f4,ab4,db5,f5]@24 ~@2 [gb5,bb5,eb6]@27 ~ [eb5,gb5,bb5] ~ [eb5,gb5,bb5] ~ [eb5,gb5]@6 [c5,eb5]@24 ~@2 [f4,ab4,db5,f5]@6 [gb4,b4,eb5,gb5]@28, ~@31 ab4@15 ~@18]/8", // Db Ebm Cm Db B
  C: "[~@2 [f4,ab4,db5,f5]@12 ~ [gb5,bb5,eb6]@10 ~@7]/4", // Db Ebm
  D: "[~@4 [f4,ab4,db5,f5]@23 ~ [db5,f5,ab5,db6]@2 [eb4,gb4,bb4,eb5]@17 ~]/3", // Db Ebm
})).s("gm_string_ensemble_1").gain(0.35)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<~ [eb3@2 ~@4 eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~]!8 ~@129>").s("gm_lead_2_sawtooth").gain(0.35)

// drums · kick
const kick = s("bd").struct(`<
  ~
  [x ~@3 x ~@2 x!2 ~@3 x ~ x ~]!8
  ~@7
  [~@7 x]
  [x ~@3 x ~@2 x!2 ~@3 x ~ x ~]!119
  [x ~@3 x ~@2 x!2 ~ x ~ x ~ x ~]
  ~
>`).gain(0.45)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@9 [x ~@3 x ~@2 x!2 ~@3 x ~ x ~]!7 [x ~@3 x ~@2 x!2 ~@3 x ~@3] ~@121>").gain(0.2)

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

// drums · clap
const clap = s("cp").struct(`<
  ~@9 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~",
})).gain(0.45)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A@8 B C B C B C B C B C B C B C B C D E D E D E D E D E D E D E D E B C B C B C B C B C B C B C B C D E D E D E D E
  D E D E D E D E B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B
  C B C B C B C B C B C B F ~
>`.pickRestart({
  A: "~ x!3 ~ x!2 ~", B: "~@4 x ~@2 x ~@4 x ~@3", C: "~@4 x ~@2 x ~@2 x ~@3 x ~", D: "~@2 x ~@3 x!2",
  E: "~@4 x ~@2 x ~@2 x ~ x ~@3", F: "~@4 x ~@2 x ~@2 x ~@2 x ~@2",
})).gain(0.35)

// drums · crash
const crash = s("cr").struct(`<
  ~ A@7 ~ A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~ B ~ C D A E ~
>`.pickRestart({
  A: "x", B: "~ x!2 ~@5", C: "~ x ~@2", D: "~@14 x!2", E: "~ x!2 ~ x!2 ~ x",
})).gain(0.45)

// drums · tambourine
const tambourine = s("tb").struct("<~@9 [x!16]!16 ~@16 [x!16]!16 ~@16 [x!16]!63 [x!15 ~] ~>").gain(0.35)

// drums · bongos
const bongos = s("bongo:18").struct(`<
  ~
  [~@4 x ~@2 x ~ x ~@2 x ~@3]!8
  [~@3 x ~@3 x ~ x ~@4 x ~]!127
  [~@3 x ~@3 x ~ x ~@6]
  ~
>`).gain(1.04)

// drums · congas
const congas = s("conga:13").struct("<~ [~@4 x!2 ~@6 x!4]!135 [~@4 x!2 ~@6 x!3 ~] ~>").gain(1.27)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~
  [~@2 x!2 ~ x ~@4 x!2 ~@2 x ~]!8
  [~@2 x!2 ~@4 x ~ x!2 ~@3 x]!127
  [~@2 x!2 ~@4 x ~ x!2 ~@4]
  ~
>`).gain(1.27)

// drums · congas
const congas_3 = s("conga:33").struct("<~ [x ~@5 x!3 ~@7]!135 [x ~@5 x!3 ~@5 x ~] ~>").gain(1.27)

// drums · shaker
const shaker = s("sh").struct("<~ [x!16]!135 [x!15 ~] ~>").gain(0.3)

stack(
  piano, bass, electric_guitar_clean, string_ensemble_1, lead_2_sawtooth, kick, kick_soft, snare, clap, hihat, open_hat,
  crash, tambourine, bongos, congas, congas_2, congas_3, shaker
)

More by Sister Sledge