Strudelify

The One And Only

Chesney Hawkes

KeyB majorTempo120 bpm
0:00/0:00
// The One And Only — Chesney Hawkes
// 120 bpm, 4/4, key B 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 8 lead 2 sawtooth (copy of ch 3 epiano2)
// note: Full arrangement: all 106 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 · [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 · synth bass 2
const bass = note(`<
  A ~@2 B C D E F G@2 H I E J K L E M C N O P Q R S T C U E V C U E V W@2 H I E J K L E M C N O P Q R S T C U E V C U E
  V X@2 Y@2 Z@2 AA@2 AB AC AD AE AF AG AH S AB AI AJ AK AB AL AJ AM C U E V C U E V C U E V C U E V AN@6
>`.pickRestart({
  A: "b1 ~@7", B: "~@10 f#1 ~ g#1 ~ b1 ~", C: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  D: "f#1 ~ f#1 ~ f#1@2 g#1 ~ g#1 ~ g#1 ~ g#1 ~ e1 ~", E: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~",
  F: "g#1 ~ g#1 ~ g#1@2 f#1@2 f#1 ~ f#1 ~ f#1 ~ b1 ~", G: "[~@2 b1 ~ a1@21 ~ f#1 ~ b1 ~ f#1 ~]/2",
  H: "g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~", I: "g#1 ~ g#1 ~ g#1 ~ g#1 ~ b1 ~ b1 ~ b1 ~ e1 ~",
  J: "e1 ~ e1 ~ e1 ~ e1 ~ d#2 ~ d#2 ~ d#2 ~ c#2 ~", K: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ d#2 ~",
  L: "d#2 ~ d#2 ~ d#2 ~ b1 ~ b1 ~ b1 ~ f#1 ~ e1 ~", M: "f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ b1 ~",
  N: "b1 ~ b1 ~ b1 ~ d2 ~ d2 ~ d2 ~ d2 ~ g1 ~", O: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  P: "g1 ~ g1 ~ g1 ~ g1 ~ f#1 ~ f#1 ~ f#1 ~ e1 ~", Q: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ f#1 ~",
  R: "f#1 ~ f#1 ~ f#1 ~ d2 ~ d2 ~ d2 ~ a1 ~ g1 ~", S: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ a1 ~",
  T: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ b1 ~", U: "f#1 ~ f#1 ~ f#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ e1 ~",
  V: "g#1 ~ g#1 ~ g#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ b1 ~", W: "[~@2 b1 ~ a1@21 ~ f#1 a1 b1 ~ f#1 ~]/2",
  X: "[~@2 b1 ~ a1@21 ~ e1 ~ f#1 ~ a1 ~]/2", Y: "[~@2 g#1 ~ f#1@21 ~ f#1 ~ a1 ~ f#1 ~]/2",
  Z: "[~@2 f#1 ~ g1@21 ~ g1 ~ b1 ~ g1 ~]/2", AA: "[~@2 g1 ~ e1@21 ~ e1 ~ f#1 ~ e1 ~]/2",
  AB: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", AC: "a1 ~ a1 ~ a1 ~ a1 ~ c2 ~ c2 ~ c2 ~ f1 ~",
  AD: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~", AE: "f1 ~ f1 ~ f1 ~ f1 ~ e1 ~ e1 ~ e1 ~ d1 ~",
  AF: "d1 ~ d1 ~ d1 ~ d1 ~ d1 ~ d1 ~ d1 ~ e1 ~", AG: "e1 ~ e1 ~ e1 ~ c2 ~ c2 ~ c2 ~ g1 ~ f1 ~",
  AH: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ g1 ~", AI: "e1 ~ e1 ~ e1 ~ f#1 ~ e1 ~ e1 ~ e1 ~ d2 ~",
  AJ: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", AK: "f#1 ~ f#1 ~ f#1 ~ e1 ~ e1 ~ e1 ~ e1 ~ a1 ~",
  AL: "e1 ~ e1 ~ e1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ d2 ~", AM: "f#1 ~ f#1 ~ f#1 ~ e1 ~ e1 ~ e1 ~ e1 ~ b1 ~",
  AN: "[~@2 b1 ~ a1@7 ~ a1@7 ~ a1@7 ~ a1@7 ~ a1@7 ~ b1@51 ~]/6",
})).s("gm_synth_bass_2").gain(0.45)

// chords · epiano2
const epiano2 = note("<A ~@9 B@3 C@8 D@6 ~@9 B@3 C@8 D@6 ~@15 E@3 F@6 ~@29>".pickRestart({
  A: "[d#4,f#4,b4] ~@7", B: "[[d#4,g#4,b4]@4 [b3,d#4,f#4] [b3,e4,g#4]@3]/3",
  C: "[~@8 [b3,d#4,f#4]@6 [c#4,e4,g#4]@16 c#4@8 d#4@7 ~ [b3,e4,f#4]@16 b3@8 a#3@7 ~@25 a3@8 [b3,d4,g4]@18, ~@15 [b3,f#4]@8 ~@8 [c#4,f#4]@8 [b3,d4,f#4]@16 ~@9]/8", // B C#m Bsus4 G B5 F#5 Bm
  D: "[~@3 [d4,f#4,a4]@4 ~@5 a3@3 [a3,d4,f#4]@8 [b3,d4,g4]@8 [c#4,e4,a4]@8 [d#4,f#4,b4]@9, ~@7 [b3,e4,g4]@8 ~@33]/6", // D G A B Em
  E: "[[e4,a4,c5]@4 [c4,e4,g4] [c4,f4,a4]@3]/3", // Am C F
  F: "[~@8 [c4,e4,g4]@6 [d4,f4,a4]@16 d4@8 e4@7 ~ [c4,f4,g4]@47 ~@3, ~@15 [c4,g4]@8 ~@25]/6", // C Dm Csus4 C5
})).s("gm_epiano2").gain(0.4)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  A ~ B C D E@2 F G@2 ~ H@2 I@8 J@5 K L M N@2 O M P G@2 Q H@2 I@8 J@5 K L M N@2 O M P G@2 R@2 S@2 T@2 ~@7 U V W@2 X@2
  Y@2 Z@2 L M N@2 O M AA@2 L M N@2 O M P AB@6
>`.pickRestart({
  A: "[b2,f#3,b3,f#4,b4] ~@7", B: "~ [g#3,e4,g#4] ~@2 [g#3,e4,g#4]@4",
  C: "[g#3,d#4,g#4] ~ [g#3,d#4,g#4] ~ [f#3,c#4,f#4] [f#3,c#4,f#4]@2 [b3,f#4,b4]", // G#5 F#5 B5
  D: "~@2 [b2,g#3] [b2,f#3]@2 [b2,f#3] [b2,g#3]@2", E: "[[c#3,f#3]@3 [d#3,g#3]@2 [d#3,g#3]@2 [b2,e3]@9]/2",
  F: "[g#3,b3,g#4] ~ [g#3,b3,g#4] ~ [f#3,c#4,f#4] [f#3,c#4,f#4]@2 [b3,f#4,b4]", G: "[~ [a3,e4,a4]@7]/2",
  H: "[~@7 g#4@9]/2", I: "[~@7 [e4,g#4]@8 [d#4,f#4]@8 [e4,f#4]@8 [c#4,f#4]@8 [b3,f#4]@16 [d4,g4]@9]/8",
  J: "[~@7 [b3,g4]@8 [a3,f#4]@8 [b3,g4]@8 [a3,e4,a4]@8 [f#4,b4,f#5]]/5", // Em D Em A5 B5
  K: "[f#3,b3,f#4] ~ [f#3,b3,f#4] [f#3,b3,f#4]@2 [f#3,b3,f#4] [f#3,b3,f#4]@2", // B5
  L: "[f#3,c#4,f#4]!2 ~ [d#3,b3,d#4]@2 [d#3,b3,d#4] [d#3,g#3,d#4] [e3,b3,e4]", M: "[e3,b3,e4]!2 ~@2 [e3,b3,e4]@4",
  N: "[[g#3,b3,g#4] ~ [g#3,b3,g#4] ~ [f#3,c#4,f#4]@2 a#3 [f#3,b3,f#4]@2 ~ [f#3,b3,f#4] [f#3,b3,f#4]@2 [f#3,b3,f#4]!2 ~]/2", // G#m F#5 B5
  O: "[f#3,c#4,f#4]!2 ~ [d#3,b3,d#4]@2 [d#3,b3,d#4] [e3,b3,e4] ~", // F#5 G#m E5
  P: "[g#3,b3,g#4] ~ [g#3,b3,g#4] ~ [f#3,c#4,f#4]@2 a#3 [f#3,b3,f#4]", Q: "[g#3,d#4,g#4]",
  R: "[~@2 [f#2,c#3,f#3]@13 ~]/2", S: "[~ [g2,d3,g3]@7]/2", T: "[~ [b2,e3,b3]@7]/2", U: "~@7 [e3,a3,e4]",
  V: "[e3,a3,e4]@2 [e3,a3,e4]@3 [e3,a3,e4] [e3,a3,e4]@2", // A5
  W: "[[e3,b3,e4]@4 ~ [f#3,c#4,f#4] ~ [d3,a3,d4]@2 [d3,a3,d4] ~@2 [d3,a3,d4]@4]/2", // E5 F#5 D5
  X: "[[c#3,f#3,c#4]@2 [c#3,f#3,c#4] ~ [b2,e3,b3]!2 ~ [a2,e3,a3]@2 ~ [d3,a3,d4] [c#3,a3,c#4]@2 [c#3,a3,c#4] [d3,a3,d4] ~]/2", // F#5 E5 A5 D5 F#m D5
  Y: "[[b2,e3,b3]@3 [c#3,f#3,c#4] ~@2 [c#3,f#3,c#4] [a2,d3,a3]@4 [a2,d3,a3] [a2,d3,a3]@3 [a2,d3,a3]]/2", // E5 F#5 D5
  Z: "[[f#3,c#4,f#4] ~ [f#3,c#4,f#4] ~ [e3,b3,e4]!2 ~ [d#3,b3,d#4]@3 [f#3,b3,f#4] [f#3,b3,f#4]@2 [f#3,b3,f#4] [f#3,b3,f#4]@2]/2", // F#5 E5 G#m B5
  AA: "[[g#3,b3,g#4] ~ [g#3,b3,g#4] ~ [f#3,c#4,f#4]@2 a#3 [f#3,b3,f#4]@2 ~ [f#3,b3,f#4] [f#3,b3,f#4]@2 [f#3,b3,f#4] [f#3,b3,f#4]@2]/2", // G#m F#5 B5
  AB: "[~@2 [a3,e4,a4]@4 [a3,e4,a4]@4 [a3,e4,a4]@4 [a3,e4,a4]@4 [a3,e4,a4]@4 [b2,f#3,b3]@25 ~]/6", // A5 B5
})).s("gm_overdriven_guitar").gain(0.3)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@6 A ~@21 B@2 ~@10 C@2 ~@12 B@2 ~@18 D E F G@2 H I J K L M@2 N@2 ~@5 O P@2 ~@10
>`.pickRestart({
  A: "~@2 e4@2 b3@2 b3@2 e4@2 [b3,e4]@5 ~", B: "[~ f#4 g#4 b4@7 ~@6]/2", C: "[~@5 a#3 b3 f#4@9]/2", D: "~ [c5,g5] ~@6",
  E: "~@10 [g3,g5] ~ [g3,g5] ~ [g3,g5] ~", F: "g#5@3 ~ g#5@3 ~ g#5@2 b3 c#4 [d4,g#5]@2 a3@2, g#3 ~@3 e3@6 ~@6",
  G: "[b3@2 g#3@2 e3@2 f#3@2 e3@10 e5 g#5 a5@2 g#5@2 a5@4 a5@2 g#5@2]/2", H: "a5 b5 c#6!2 a5 b5 a5 g#5",
  I: "a5 e5@4 c#5 g#5@2", J: "~ e5 ~ c#5 a5 f#5 ~ c#5 e5 c#5 ~ b4 a4@2 d5@2",
  K: "d5@2 d5@2 d5!2 b4 a4 d5@2 d5@2 a4 g4 f#4 [d#4,e4]", // Emaj7
  L: "d4 d5 b4 [f#4,a4] a3 [f#3,g3] a3 [f#3,g3] e3 a3 b3 [d4,e4] f#4 e4 c#4 d4", M: "[d#4 f#4@13 ~ e5]/2",
  N: "[d#5 b4 f#4 c#5 b4@8 ~@4]/2", O: "~@7 b5", P: "[f#5 e5 d#5 b4 f#4@8 ~@4]/2",
})).s("gm_distortion_guitar").gain(0.45)

// other · guitar harmonics
const guitar_harmonics = note("<~@74 A ~@3 B C ~@24 D@2>".pickRestart({
  A: "~ g4 ~@6", B: "~@6 f#4 d#4", C: "e4 ~@2 b4 ~ b4 ~@2", D: "[~@2 f#4@13 ~]/2",
})).s("gm_guitar_harmonics").gain(0.4)

// chords · lead 1 square
const lead_1_square = note(`<
  ~@4 A B@2 C D@2 E ~@7 F@8 G H@2 I@2 H@2 J K@2 E ~@7 F@8 G H@2 I@2 H@2 J L@2 M@2 N@2 O@2 P@8 Q R@2 S@2 R@2 T G H@2 I@2
  H@2 J G H@2 I@2 H@2 J U@6
>`.pickRestart({
  A: "~@2 [e4,g#4] [d#4,f#4]@3 [b3,e4,g#4]@2, ~ b3@2 ~", B: "[[c#4,f#4,a#4]@3 [d#4,g#4,b4]@4 [b3,e4,g#4]@9]/2",
  C: "[b3,e4,g#4]@3 [a#3,c#4,f#4]@4 [d#4,f#4,b4]", D: "[~ [c#4,e4,a4]@7]/2", E: "[b3,d#4,g#4]",
  F: "[b3@22 f#4@8 g4@24 a4@8 g4@16 f#4@16 a4@33 ~]/8", G: "[b3,d#4,f#4]",
  H: "[[a#3,c#4,f#4]@3 [b3,d#4,g#4]@4 [g#3,b3,e4]@9]/2", I: "[[g#3,b3,d#4]@4 [f#3,a#3,c#4]@3 [b3,d#4,f#4]@9]/2",
  J: "[g#3,b3,d#4]@8 [f#3,a#3,c#4]@6 [b3,d#4,f#4] ~", K: "[~@4 [a3,c#4,e4]@27 ~]/2", L: "[~ [e3,a3,e4]@7]/2",
  M: "[~@2 [f#3,c#4,f#4]@13 ~]/2", N: "[~ [d3,g3]@7]/2", O: "[~ [e3,b3,e4]@7]/2",
  P: "[a4@24 g4@6 a4@26 g4@6 a4@16 g4@15 ~ g4@33 ~]/8", Q: "[a3,c#4,e4]",
  R: "[[g#3,b3,e4]@3 [f#3,a3,c#4]@4 [f#3,a3,d4]@9]/2", S: "[[f#3,a3,c#4]@4 [g#3,b3,e4]@3 [a3,c#4,e4]@9]/2",
  T: "[f#3,a3,c#4]@4 [g#3,b3,e4]@3 [f#3,b3,d#4]", // F#m E B
  U: "[~@2 [e3,a3,e4]@4 [e3,a3,e4]@4 [e3,a3,e4]@4 [e3,a3,e4]@4 [e3,a3,e4]@4 [f#3,b3,f#4]@25 ~]/6", // A5 B5
})).s("gm_lead_1_square").gain(0.22).pan(0.3)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@22 A B@3 ~@22 A B@3 ~@8 C@8 ~@4 D E@3 ~@30>".pickRestart({
  A: "~@2 [b3,d4,e4] ~@5 [b3,d4,e4]@8", B: "[a6@47 ~]/3", C: "[a6@123 ~@5]/8", D: "~@2 [d4,f4,a4] ~@5 [d4,f4,a4]@8",
  E: "[g6@47 ~]/3",
})).s("gm_string_ensemble_1").gain(0.25)

// other · pad new age
const pad_new_age = note("<~@15 A ~@12 B ~@12 A ~@12 B ~@16 C ~@14 B ~@7 B ~@11>".pickRestart({
  A: "~@14 [f#4,f#5] ~", B: "~@2 f#5 ~ g#5 ~ b5 ~@9", C: "~@14 [f4,f5] ~",
})).s("gm_pad_new_age").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  A ~ A B C D C D E F C@3 D@2 C@2 G C@3 D@2 C@2 G C D C@3 D@2 C H I C@3 D@2 C@2 G C@3 D@2 C@2 G C D C@3 D@2 C J K J K J
  K J L C D C D@2 C@4 D C G C D C@3 D C@3 D@2 C@2 D C@3 D@2 C M N O A ~@2
>`.pickRestart({
  A: "x", B: "~@7 x", C: "x!2", D: "x ~@3 x ~@2 x", E: "~ x!2 ~@5", F: "~ x ~@3 x ~@2", G: "x!2 ~@2 x ~@3",
  H: "~ x ~@6", I: "~ x ~@3 x!2 ~", J: "~ x!2 ~@4 x", K: "x ~@4 x!3", L: "x ~@2 x ~@6 x ~ x ~ x ~", M: "~ x!2 ~@3 x ~",
  N: "~ x ~ x", O: "~ x ~@5 x",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<A ~ B C B@5 D B@23 E B ~ B@23 E B@2 F B@3 F G B@23 E B@7 E ~@6>".pickRestart({
  A: "x", B: "~ x ~ x", C: "~ x ~@2", D: "~@2 x ~@3 x!2", E: "~@4 x ~@6 x!2 ~ x ~", F: "~@2 x!3 ~@7 x ~@3",
  G: "~@4 x ~@6 x!2 ~@3",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@10 A@10 B A@4 C ~@10 A@10 B A@4 C ~@16 A@6 ~@32>".pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x ~@3 x ~@2 x", C: "x",
})).gain(0.35)

// drums · low tom
const low_tom = s("lt").struct("<~@25 A ~@9 B ~@31 A ~@7 A ~@7 B ~@18 C D ~@2>".pickRestart({
  A: "~@7 x", B: "~@3 x", C: "~ x ~@2", D: "x",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@2 B C D@5 E ~ F G ~@2 F ~ H ~ F ~@3 F ~ C D@9 I ~ F G ~@2 F ~ H ~ F ~@3 F ~ C D@8 I D J K J D@2 L ~ F G ~@2 F I M
  D@27 ~@3
>`.pickRestart({
  A: "~@2 x ~@3 x!2", B: "~ x ~ x", C: "~ x!3", D: "x!4", E: "x ~ x!3 ~ x!2", F: "~@7 x", G: "~@15 x",
  H: "~@11 x ~@2 x ~", I: "x ~ x ~ x ~ x!2", J: "x ~ x!2", K: "x ~ x!3 ~ x ~", L: "x!3 ~", M: "x ~@6 x!2 ~@3 x ~@3",
})).gain(0.3)

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

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

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

stack(
  bass, epiano2, overdriven_guitar, distortion_guitar, guitar_harmonics, lead_1_square, string_ensemble_1, pad_new_age,
  kick, snare, hihat, low_tom, open_hat, mid_tom, crash, high_tom
)

More by Chesney Hawkes