Strudelify
KeyF majorTempo120 bpm
0:00/0:00
// one kiss — Dua Lipa/Calvin Harris
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5376891; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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.

// other · trumpet · "B Trompete"
const trumpet = note(`<
  A@4 ~@16 B C B D E@2 F G ~@9 H I J ~ H I J K L K M K L K M N@2 O@2 E@2 P@2 ~@9 H I J ~ H I J Q R Q S Q R Q S N@2 O@2
  E@2 P@2 ~@9 H I J ~ H I J
>`.pickRestart({
  A: "c5/4", B: "e5@3 g5@3 e5@2 d5@3 d5@3 d5@2", C: "d5@2 ~@4 c5!2", D: "d5@2 ~@3 c5!3",
  E: "[e5@3 g5@3 e5@2 d5@4 d5 c5@2 a4@5 ~@8 c5@2 c5@2]/2", F: "a4@4 c5@4 ~@2 e5 d5@3 d5!2",
  G: "d5@3 d5 d5@2 d5 d5@3 ~@6", H: "~ g5 e5 d5!2 ~ d5 e5", I: "c5 ~@7", J: "~@4 a4 c5 ~@2", K: "c4@3 ~", L: "f4@3 ~",
  M: "c4@3 ~ d4@3 ~", N: "[e5@3 g5@3 e5@2 d5@3 d5@3 d5@6 ~@8 c5@2 c5@2]/2",
  O: "[e5@3 g5@3 e5@2 d5@3 d5@3 d5@6 ~@6 c5@2 c5@2 c5@2]/2", P: "[a4@4 c5@4 ~@2 e5 d5@3 d5 d5@4 d5 d5@2 d5 d5@3 ~@6]/2",
  Q: "a4", R: "b4", S: "a4 bb4",
})).s("gm_trumpet").gain(0.18)

// other · trumpet · "B Trompete"
const trumpet_2 = note(`<
  A B C D E F G H A B G I E F G H A B G I J ~@7 E F G H A B G I ~ K L M ~ K L M N@3 O P@3 Q J ~@3 R@2 S@2 E F G H A B G
  I ~ K L M ~ K L M ~ T U V ~ W@2 V J ~@3 R@2 S@2 X F G H A B G I ~ K L M ~ K L M
>`.pickRestart({
  A: "e4@4 ~@3 e4", B: "f4@4 ~@3 f4", C: "e4@8 ~@6 c4 ~", D: "e4@4 ~@2 c4 ~ f4@4 ~@2 c4 ~", E: "e4@8 ~@6 e4 ~",
  F: "f4@8 ~@6 f4 ~", G: "e4@4 ~@3 c4", H: "e4@4 e4 ~ c4@2 f4@4 f4 ~ c4@2", I: "e4@4 e4 ~ c4@2 f4@4 f4@2 c4@2",
  J: "c5 ~", K: "~ g4 e4 d4!2 ~ d4 e4", L: "c4 ~@7", M: "~@4 a4 c5 ~@2",
  N: "[~@15 f5@2 f5@2 f5@2 f5@2 f5@2 f5@2 f5@2 e5@2 c5@3 ~@14]/3", O: "d5@3 c5 d5@4 d5@2 e5@2 a4@2 a4@2",
  P: "[c5@4 ~@11 f5@2 f5@2 f5@2 f5@2 f5@2 f5@2 f5@2 e5@2 e5@9 ~@3 d5@2 d5@2 d5]/3", Q: "e5 ~", R: "[c5@14 a4 c5]/2",
  S: "[a4@3 ~]/2", T: "~@5 d5!2 c5", U: "d5@4 d5@2 c5@2 d5@4 ~@2 a4 g4", V: "a4 ~",
  W: "[~@10 c5@4 d5@4 c5@6 d5 c5 d5@4 a4@2]/2", X: "~@14 e4 ~",
})).s("gm_trumpet").gain(0.3)

// other · trombone · "Posaune"
const trombone = note(`<
  A@4 B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E F ~ G ~ F ~ G H I J@2 H I J@2 H B C D E B C D E B
  C D E B C D E F ~ G ~ F ~ G K L M L N L M L N B C D E B C D E O C D E B C D E F ~ G ~ F ~ G K
>`.pickRestart({
  A: "a3/4", B: "c4@8 ~@6 c4 ~", C: "d4@8 ~@6 d4 ~", D: "c4@4 ~@3 a3", E: "c4@4 c4 ~ a3@2 d4@4 d4 ~ a3@2", F: "e3",
  G: "c3", H: "f3@3 ~ g3@3 ~", I: "e3@3 ~", J: "f3@3 ~", K: "f3@3 ~ g3@2 ~@2", L: "c4", M: "d4", N: "c4 d4",
  O: "~@14 c4 ~",
})).s("gm_trombone").gain(0.3)

// bass · tuba
const bass = note(`<
  ~@4 A B C D E B C F A B C D E B C F A B C D E B C F A B C D E B C F G H I J K H I J A B C D E B C F A B C D E B C F A
  B C D E B C F G H I J K H I L ~@8 A B C D E B C F ~ B C D E B C F G H I J K H I M
>`.pickRestart({
  A: "a2!4", B: "bb2!4", C: "f2!4", D: "f2!2 g2!2", E: "a2@2 a2@2 a2 a3 c3 a2", F: "f2!2 ~@2",
  G: "~@3 a2@3 a2 ~@3 a2@2 ~@2 bb2@2", H: "~@3 bb2@3 bb2 ~@3 bb2@2 ~@2 a2@2", I: "~@3 f2@3 f2 ~@3 f2@2 ~@2 f2@2",
  J: "~@3 d3@3 d3 ~@3 bb2@2 ~@2 g2@2", K: "~@3 a2@3 a2 ~@3 a3@2 ~@2 bb2@2", L: "~@3 d3@3 d3 ~@3 bb2@2 ~@4",
  M: "~@3 d3@3 d3 ~@9",
})).s("gm_tuba").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@4 A@16 ~@8 A@47 B ~@4 A@12 ~ A@14 B>".pickRestart({
  A: "x!4", B: "x!3 ~",
})).gain(0.3)

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

// drums · hihat
const hihat = s("hh").struct("<~@4 A@16 ~@8 A@47 B ~@6 A@10 ~ A@14 B>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2",
})).gain(0.3)

stack(trumpet, trumpet_2, trombone, bass, kick, snare, hihat)