Strudelify

Don't Wanna Lose You

Gloria Estefan

KeyF majorTempo84 bpm
0:00/0:00
// Don't Wanna Lose You — Gloria Estefan
// 84 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 89 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(84/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · electric bass finger
const bass = note(`<
  ~ A B A B C D A E A B A F C D G H I B J B C D A K L M N O P Q R E L S N O P T U V I B J B C D A K I B J B C D A K L M
  N O P Q R E L S N O P T U V L M N O P Q R E L S N W ~@4
>`.pickRestart({
  A: "f2@3 f2@5", B: "bb1@3 bb1@5", C: "f2@3 d2@5", D: "eb2@3 eb2@5", E: "c2@3 c2@5", F: "bb1@3 bb1@4 d2",
  G: "f2@3 f2@4 g2", H: "c2@3 c2@3 c3 c2", I: "f2@3 f2@4 f1", J: "f2@6 f2@8 f1 a1", K: "c2@3 c2@4 c2",
  L: "f1@3 f1@3 f2 c2", M: "bb1@3 bb1@2 f2 bb2 a2", N: "f2@3 f1@3 f2 c2", O: "bb1@6 bb1@6 d2 e2 f2@2",
  P: "f2@6 d2@8 c2 d2", Q: "eb2@3 c2@4 c2", R: "f2@3 f1@3 f2 e2", S: "bb1@6 bb1 c2 d2 f2 g2@2 f2 d2 c2@2",
  T: "eb2@3 c2@5", U: "f2@3 f2@3 g2 f2", V: "c2@5 ~ c2@10", W: "bb1@3 ~@5",
})).s("gm_electric_bass_finger").gain(0.71)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@24 A B@2 C A D ~@2 E F@2 G@2 H ~@18 A B@2 C A D ~@2 E F@2 G@2 H ~@3 A B@2 C A D ~@2 E F@2 ~@5
>`.pickRestart({
  A: "~@16 f5@5 ~ e5@4 c5@5 ~", B: "[a4@35 ~@13 f5@5 ~ e5@5 c5@4 ~]/2", C: "a4", D: "a4@31 ~",
  E: "~@16 f5@5 ~ e5@4 ~ c5@5", F: "[a4@38 ~@10 f5@5 ~ e5@4 c5@5 ~]/2", G: "[a4@36 ~@12 f5@5 ~ e5@4 c5@5 ~]/2",
  H: "a4@15 ~",
})).s("gm_overdriven_guitar").gain(0.51).pan(0.2)

// other · pizzicato strings
const pizzicato_strings = note("<~@9 A B A B A C A B A B A B A C A B ~@24 A B A B A C A B ~@32>".pickRestart({
  A: "c5 d5 f5 ~ f5 ~ d5 c5 ~ d5 f5 ~ f5 ~ d5 c5", B: "bb4 d5 f5 ~@13", C: "bb4 eb5 g5 ~@13",
})).s("gm_pizzicato_strings").gain(0.4).pan(0.4)

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

// drums · snare
const snare = s("sd").struct("<~@17 A@7 B C@16 A@7 B A@7 B C@27 ~@5>".pickRestart({
  A: "~@3 x", B: "x ~@2 x!2 ~@6 x!2 ~ x ~", C: "~ x ~ x",
})).gain(0.71)

// drums · hihat
const hihat = s("hh").struct("<A ~ B ~ B ~ B ~ B C@16 D@16 C@16 D@27 E ~@4>".pickRestart({
  A: "x!3 ~", B: "~@3 x", C: "x ~@2 x!2 ~@2 x!2 ~ x ~ x ~ x ~", D: "x!16", E: "x!3 ~@13",
})).gain(0.71)

// drums · low tom
const low_tom = s("lt").struct("<~@24 [~@8 x!2 ~@6] ~@23 [~@8 x!2 ~@6] ~@7 [~@8 x!2 ~@6] ~@32>").gain(0.57)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A@17 ~@10 B ~@2 B ~@2 A@16 ~@10 B ~@2 B ~@12 B ~@5>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@3 x",
})).gain(0.71)

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 [~@6 x!2 ~@6 x!2] ~@23 [~@6 x!2 ~@6 x!2] ~@7 [~@6 x!2 ~@6 x!2] ~@32>").gain(0.5)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@24
  [x ~@2 x!2 ~@6 x!2 ~@3]
  ~@23
  [x ~@2 x!2 ~@6 x!2 ~@3]
  ~@7
  [x ~@2 x!2 ~@6 x!2 ~@3]
  ~@32
>`).gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@9 [~@24 x!4 ~@4]!75 ~@5>").gain(0.36)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@9 [~@7 x]!75 ~@5>").gain(0.14)

// drums · claves
const claves = s("clave:2").struct("<~ A ~ A ~ A ~ A ~@81>".pickRestart({
  A: "~@3 x",
})).gain(2.8)

// drums · shaker
const shaker = s("sh").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A C B A B A B A B A B A B A B A B A@2 B A B A B A C A B A B A B A C 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 ~@5
>`.pickRestart({
  A: "~@14 x!2", B: "x!2 ~@14", C: "x!2 ~@12 x!2",
})).gain(0.5)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5
>`.pickRestart({
  A: "~@2 x!2 ~@12",
})).gain(0.29)

stack(
  bass, overdriven_guitar, pizzicato_strings, kick, snare, hihat, low_tom, open_hat, mid_tom, high_tom, tambourine,
  tambourine_soft, claves, shaker, shaker_soft
)

More by Gloria Estefan