Strudelify
How Do You Do cover art

1992 · Tourism

How Do You Do

Roxette

KeyC majorTempo124 bpm
0:00/0:00
// How Do You Do — Roxette
// 124 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(124/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 · slap bass 1 · "Ch  1"
const bass = note(`<
  A B A B A B A B A B A B A B A B ~@8 C D E D F D F D A B A B A B A B A B A B A B A B ~@8 C D E D F D F D G H I H J H K
  L M N O N P N P N M N O N P N P N M N O N P N P N M N O N P N P N Q
>`.pickRestart({
  A: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3] ~", // C5 F5
  B: "[g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,c3] ~ [g2,c3] ~ [g2,c3] ~", C: "[d#3,a#3]!8",
  D: "[a#2,f3]!8", E: "[d#3,a#3]!4 [g#2,d#3]!4", F: "[c3,g3]!4 [g#2,d#3]!4",
  G: "[c3,g3] ~@5 [d#3,a#3] ~ [a#2,f3]@2 ~@6", H: "~@7 [a#2,f3]", I: "[c3,g3]@2 ~@4 [d#3,a#3] ~ [a#2,f3] ~@7",
  J: "[c3,g3] ~@2 [c3,g3] [a#2,f3] ~@3", K: "[c3,g3] ~@5 [d#3,a#3]@2 [a#2,f3] ~@7",
  L: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~", M: "[f3,c4]!8", N: "[c3,g3]!8",
  O: "[f3,c4]!4 [a#2,f3]!4", P: "[d3,a3]!4 [a#2,f3]!4", Q: "[f2,c3]@3 ~@5",
})).s("gm_slap_bass_1").gain(0.48)

// other · pad new age · "Ch  4"
const pad_new_age = note("<~@16 A@4 B@3 ~@25 C@4 D@3 ~@50>".pickRestart({
  A: "[e5@27 c6@3 b5@2]/4", B: "[a5@47 ~]/3", C: "[e5@27 c5@3 b4@2]/4", D: "a4/3",
})).s("gm_pad_new_age").gain(0.44)

// chords · synth brass 1 · "Ch  4"
const synth_brass_1 = note("<~@44 A@2 B ~@58>".pickRestart({
  A: "[~@4 [c4,e4] ~ [c4,e4] ~ [e4,g4] ~ [f4,a4] ~@3 [g4,a#4]@5 ~ c4 ~ c4 ~ [e4,g4]@2 [f4,a4]@2 ~@2 [c4,d#4] ~]/2", // C Em F Gm Em F Cm
  B: "~@2 [g3,c4]@7 ~ a#3 ~ [f3,a3] ~@3", // C5 F
})).s("gm_synth_brass_1").gain(0.8)

// bass · electric bass finger · "Ch  7"
const bass_2 = note(`<
  ~@8 A B A B A B A B C D E F G D H I J K L K M K M K A B A B A B A B A B A B A B A B C D E F G D H I J K L K M K M K N
  O P Q R Q S T U A V A W A W A U A V A W A W A U A V A W A W A U A V A W A W A X
>`.pickRestart({
  A: "c2!8", B: "g2!8", C: "a1@4 ~@2 a1@5 ~ a1@4", D: "g1@5 ~ g1@5 ~ g1@4", E: "f1@6 f1@5 ~ f1@4", F: "c2@3 c2@3 b1@2",
  G: "a1@5 ~ a1@6 a1@4", H: "f1@5 ~ f1@6 f1@4", I: "g1@3 ~", J: "d#2!8", K: "a#1!8", L: "d#2!4 g#1!4", M: "c2!4 g#1!4",
  N: "c2 ~@5 d#2 ~ a#1@2 ~@6", O: "~@14 a#1 ~", P: "c2@2 ~@4 d#2 ~ a#1 ~@7", Q: "~@7 a#1", R: "c2 ~@5 c2@2 a#1 ~@7",
  S: "c2 ~@5 d#2 ~ a#1 ~@7", T: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", U: "f2!8", V: "f2!4 a#1!4", W: "d2!4 a#1!4",
  X: "f1@3 ~@13",
})).s("gm_electric_bass_finger").gain(0.52)

// other · piano · "Ch  8"
const piano = note(`<
  ~@11 A ~@3 B ~@15 B ~@3 A ~@3 B ~@3 A ~@3 B ~@15 B ~@2 C D ~@11 B ~@7 B ~@7 B ~@7 B ~
>`.pickRestart({
  A: "~@10 d#2 ~ d#2 ~@3", B: "~@9 b2 ~ b2 g2 ~ g2 ~", C: "~@14 d3!2", D: "d3!2 b2 ~ g2 ~ d3!4 b2 ~ g2 ~@3",
})).s("gm_piano").gain(0.41)

// chords · drawbar organ · "Ch  2"
const drawbar_organ = note(`<
  ~@16 A@3 B C@4 D E F G H E I G ~@8 J ~ K ~ K ~ K ~ L@4 C@4 D E F G H E I G ~@8 M N O P Q N R P M N O P Q N R P M N O P
  Q N R P M N O P Q N R P S
>`.pickRestart({
  A: "[a4 g4 f4, [c5,e5]]/3", B: "c5@11 ~ b4@4, [e5,g5]", C: "[a4 g4 [f4,c5] [g4,b4,d5], e5@25 ~@7, c5 ~]/4",
  D: "[d#5,g5,a#5]@15 ~", E: "[a#4,d5,f5]@15 ~", F: "[d#5,g5,a#5]@7 ~ [g#4,c5,d#5]@8", G: "[a#4,d5,f5]",
  H: "[c5,d#5,g5]@7 ~ [g#4,c5,d#5]@8, f#5 ~@15", I: "[c5,d#5,g5] [g#4,c5,d#5]", J: "[c5,g5,e6] ~ [c5,e5,g5] ~@5",
  K: "[c5,e5,g5] ~ [c5,e5,g5] ~@5", L: "[a4@8 g4@8 f4@8 c5 ~@5 b4@2, c4@59 ~@5, e5@3 [e5,g5]]/4", M: "[f5,a5,c6]@15 ~",
  N: "[c5,e5,g5]@15 ~", O: "[f5,a5,c6]@7 ~ [a#4,d5,f5]@8", P: "[c5,e5,g5]", Q: "[d5,f5,a5]@7 ~ [a#4,d5,f5]@8, g#5 ~@15",
  R: "[d5,f5,a5] [a#4,d5,f5]", S: "[f4,a4,c5] ~@15",
})).s("gm_drawbar_organ").gain(0.22)

// drums · kick
const kick = s("bd").struct("<~@8 A@8 B C B C B C B D A@24 B C B C B C B D A@8 E F E G E F E D A@32 D>".pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x ~@2 x ~@4", C: "x ~@2 x ~ x ~@2", D: "x", E: "x ~@2 x!2 ~@3", F: "~@7 x", G: "~@4 x ~@2 x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@7 A B@15 C B@31 C B@15 D B@32 ~>".pickRestart({
  A: "x!8", B: "~ x ~ x", C: "~@5 x!3", D: "~ x!7",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@15 A ~@15 A ~@7 A ~@7 A ~@15 A ~@3 B ~@11 A ~@7 A ~@7 A ~@7 A ~>".pickRestart({
  A: "~@6 x!2", B: "~ x ~ x",
})).gain(0.56)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~@15 A ~@7 A ~@7 A ~@15 A ~@3 B ~@11 A ~@7 A ~@7 A ~@7 A ~>".pickRestart({
  A: "~@9 x ~ x ~@4", B: "~ x ~@3 x ~@2",
})).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct("<~@9 A ~@3 A ~ A ~@17 A ~@3 A ~ A ~ A ~@3 A ~ A ~@57>".pickRestart({
  A: "~@7 x",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@66 [~@14 x!2] [x!2 ~@4 x!4 ~@6] ~@37>").gain(0.72)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@3 A ~@3 A ~@3 A ~@2 A@2 ~@3 A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2 A@2 ~@3 A ~ A ~ A ~@3 A ~@2 A@2 ~@3 A
  ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A
>`.pickRestart({
  A: "x",
})).gain(0.8)

stack(
  bass, pad_new_age, synth_brass_1, bass_2, piano, drawbar_organ, kick, snare, low_tom, hihat, mid_tom, open_hat,
  high_tom, crash
)

More by Roxette