Strudelify

How Can You Do What You Do

Big Mr.

KeyF♯ minorTempo135 bpm
0:00/0:00
// How Can You Do What You Do — Big Mr.
// 135 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 135 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(135/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.

// other · overdriven guitar · "OVERDERIVE"
const overdriven_guitar = note(`<
  ~@9 A ~@31 A ~@2 B C D@2 ~@22 E@4 F@5 G H@2 I@2 J K@2 L M N O P Q R ~@24 B C D@2 ~@4 B C D@2 ~@5
>`.pickRestart({
  A: "~@5 [e4,e5] ~ e5", B: "~ g#5@2 d#5", C: "a#4", D: "[f5@31 ~]/2", E: "[~@2 g4@3 ~@3 d4@3 c4@5, d3, ~@5 f#4@11]/2",
  F: "[~@4 [e4,a4]@6 [e4,g#4]@6 e4@6 d4@6 a3@4 ~@4 [e4,a4]@6 [e4,g#4]@6 e4@6 d4@6 c#3@4 e3@13 ~ g3@2, e2@33 ~@7]/5", // A5 E A5 E
  G: "g#3 e3 a2@5 ~", H: "[e3@12 ~@2 b3@4 e4@2 e4@8 c#4 b3@3]/2", I: "[g#4@6 e4@8 b3@14 ~@2 c#4 e4]/2", J: "a4@3 a4@5",
  K: "[g#4@6 g#4@4 f#4@2 d4@2 f#4@4 a#3 c#4 e4 c#4 f#4 e4 c#4 a#3 c#4 e4 f#4 e4 a4 f#4]/2",
  L: "e4 c#4@2 e4 a4 b4 c#5 e5@8 ~", M: "g#5@3 ~ g#5 ~ a5@4 f#5 [f#5,g#5] e5 f#5 g#5 a5",
  N: "g#5 [g#5,a5] e5 f#5 c#5 [c#5,d#5] b4 c#5 e5@6 f#5@2", // Amaj7 C#sus2
  O: "a5 f#5 c#5 a4 f#4 a4 c#5 f#5 a4 f#4 a5 f#5 c#5 f#5 c#5 a4",
  P: "a5 f#5 c#5 a4 f#4 a4 c#5 f#5 a5 f#5 c#5 a4 b4 g#5 e5 b4",
  Q: "g#5 [g#5,a5] f#5 e5@3 f#5@2 e5 d5 ~ c#5 b4 a4 ~ f#4", R: "f5@15 ~",
})).s("gm_overdriven_guitar").gain(0.72)

// bass · electric bass pick · "PICK BASS"
const bass = note(`<
  A@2 B C B D E F B G@2 C B D E F B H@2 I@2 J@2 K L@2 M N B D O P Q R@2 S T@2 B C B G@2 C B D E F B H@2 I@2 J@2 K L@2 M
  N B D O P Q U@2 V W X Y@2 Z@2 AA AB AC@2 B C B D O F AD AE AF AG AH AI E AJ AK AL@2 I@2 J@2 K E@2 M N B D O P Q U@2 V
  W X AM C B AN E F AO AP B AQ AR AS O AT AK AU AV AW@2 AX@2
>`.pickRestart({
  A: "b1/2", B: "f#1!8", C: "f#1!6 e1 f#1", D: "f#1!6 b1 c#2", E: "d2!8", F: "d2!3 d2@2 c#2 b1 a1",
  G: "[f#1!5 f2 c#2 f#2@2 f#1!7]/2", H: "[f#1!5 e1 b1 a1@2 a1 e2 a2 d2 e2 b1 a1]/2",
  I: "[b1@2 e1 g#1 e1 a1 g#1 f#1@2 f#1!7]/2", J: "[f#1!6 b1 a1@2 a1!3 c2 e2 b1 a1]/2", K: "b1@2 a1 a1@2 a1!3",
  L: "[d2@2 d2!5 f#2@8 ~]/2", M: "b1@2 b1!6", N: "a1!8", O: "d2@2 d2!6", P: "a1@2 a1!3 b1 a1 g#1",
  Q: "e1@2 e1!2 a2 g#2 e2 b1", R: "[e2@2 b1@2 e2@2 e2@6 b1@2 a1@17 ~]/2", S: "[d2,g2]@15 ~", T: "[[g2,c3]@7 [a2,d3]]/2",
  U: "[e2 b1 e2 e2@3 b1 ~ b1@2 b1!5 a1, ~@7 a1@2 ~@7]/2", V: "a1!7 e1", W: "f#1!3 e1 f#1!4",
  X: "f#1@2 f#1 e1 f#1!2 e1 f#1", Y: "[d2@2 d2@2 d2@2 d2@2 c2@4 c3@6 d2@2 d2@2 d2 ~ c2@4 d2@2 d2@2]/2",
  Z: "[d2!4 c2@2 c3@3 d2!3 c2@2 c2@2]/2", AA: "e2!4 d2 e2@3", AB: "a2@3 g#2@2 e2 d2 b1", AC: "[e2 b1 e1@14]/2",
  AD: "f#1!3 f#1@5", AE: "b2@2 e3 c#3!2 e3 c#3!2 d3 c3 c#3!2 c#2@2 e1@2", AF: "f#1 f#2 f#1!6",
  AG: "f#1!2 f#1@3 f#1 e1 f#1", AH: "f#1!3 f#2@2 c#2 e2 c#2", AI: "f#2 c#2 f#2!2 c#2 f#2 c#2 b1", AJ: "d2!4 e2 d2 e2@2",
  AK: "f#1@2 f#1!6", AL: "[f#1!5 a1 b1 a1@2 a1 e2 a2 d2 e2 b1 a1]/2", AM: "f#2@2 f#1!6", AN: "f#1!2 e1 f#1!3 b1 c#2",
  AO: "f#1!4 f#2!3 e2", AP: "e2 c#2 b1 a1 b1 d2!3", AQ: "f#1!4 e1 f#1 e1 f#1", AR: "f#2@2 f#2!4 e2 f#2",
  AS: "f#2@2 a2!2 ~ e2 b1 a1", AT: "e2 d2 f#2 e2 d2 c#2 b1 a1", AU: "f#1!5 [c#2,f#2] [b1,e2] [c#2,f#2]",
  AV: "[f#2,b2]@3 ~ [e2,a2]@2 [c#2,f#2]@2 [e2,a2]@2 [a1,d2]@6", AW: "[[a2,d3]@29 ~@3]/2", AX: "[~ f#2@31]/2",
})).s("gm_electric_bass_pick").gain(0.6)

// chords · pad metallic · "METAL PAD"
const pad_metallic = note("<A@4 ~@131>".pickRestart({
  A: "[[c#4,f#4]@7 ~]/4", // F#5
})).s("gm_pad_metallic").gain(0.64)

// chords · electric guitar clean · "METAL PAD"
const electric_guitar_clean = note("<~@114 A B ~@2 C@3 ~ D@2 ~@2 E@2 ~@7>".pickRestart({
  A: "~@4 e4@3 a#3, a#3@7 ~, ~ b3@2 ~", B: "~ b3@2 ~, e4@3 ~, ~ a#3@5 ~@2",
  C: "[~@28 a3@9 ~@11, a3@7 a3@7 ~@10, ~@4 b3@7 ~ b3@6 b3@7 ~ b3@12 ~@10, ~@8 e4@14 e4@17 ~@9]/3",
  D: "[~@7 b3@2 ~@2 e4@5, a#3@17 ~ a#3@14, ~@2 b3@5 ~@3 b3@6, ~@4 e4@7 ~@5]/2",
  E: "[~@28 a3@3 ~, a3@7 a3@7 ~@2, ~@4 b3@7 ~ b3@6 b3@8 b3@4 ~@2, ~@8 e4@13 ~ e4@9 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.5)

// chords · guitar harmonics · "GTHARMONIC"
const guitar_harmonics = note("<~@24 A@2 ~@30 A@2 ~@20 B C ~@4 D E@2 ~@14 F ~@29 G@2 H@2>".pickRestart({
  A: "[~@7 [a4,d5]@9]/2", B: "~@7 g3", C: "g#3 e3 a2@5 ~", D: "a4@3 a4@5", E: "[g#4@3 g#4@2 f#4 d4 f#4@2 ~@7]/2",
  F: "~@4 d4@2 f#4@2 d4@7 ~, d4 ~@3, ~ a3@7", G: "[[a3,d4]@15 ~, d3]/2", H: "[f#3,c#4]/2",
})).s("gm_guitar_harmonics").gain(0.49)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar_2 = note(`<
  ~@2 A B A B C D A E F G H I J G K L M N@2 O M P Q@2 R S A B T U V W X@2 Y@2 A B A E F G H I J G K L M N@2 O M P Q@2 R
  S A B T U V W Z S H I AA@2 ~ AB AC@2 AD@2 ~@15 AE M N@2 O M P Q@2 R S A B T U V W Z S H I AF@2 AG AH@3 AG AI@3 AG AJ@3
  AG AK AL AM@2 AN@2
>`.pickRestart({
  A: "f#3 [b3,e4,a4] f#3!3 [b3,e4,a4] f#3!2", B: "g#4@3 a4 ~ [g#3,c#4] [b3,e4] [c#4,f#4], [b3,e4] ~",
  C: "d3 [e4,a4] d3!3 [e4,a4] d3!2", D: "[e4,a4]@5 [g#3,c#4] [b3,e4] [c#4,f#4]", E: "g#4@3 a4 ~ f5 ~ f#5, [b3,e4] ~",
  F: "~ [e3,a3] [b2,f#3] [b2,e3] [c#3,f#3] [e3,a3] ~ f#2", G: "[e3,a3]@5 c#3 [b2,e3] [c#3,f#3]",
  H: "f#2 [e3,a3] f#2!3 [e3,a3] f#2!2", I: "[e3,a3]@5 c#3 b2 c#3", J: "d3 [e3,a3] d3!3 [e3,a3] d3!2",
  K: "f#2 [e3,a3] [b2,f#3] [b2,e3] [c#3,f#3] [e3,a3] ~ f#2", L: "[e3,a3]@5 [c#3,f#3] [b2,e3]@2",
  M: "~@2 a4@4 b3@2 [e4,g#4]@4 b3@2 b3 c#4, e4@7 ~@9", // E
  N: "[g#4@4 e4@2 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~@3 f#3@4 [b3,e4,a4]@2 f#3@2 f#3@2 f#3@2 [b3,e4,a4]@2 f#3@2 f#3@2]/2", // E Esus4
  O: "g#4@3 a4 ~@3 b3, [b3,e4]@8 ~@2 g#4@5 ~, ~@3 e4", P: "g#4@2 [a3,e4,g#4]!4 [a3,e4,g#4]@2",
  Q: "[d3@2 d3@2 [d3,a3]@2 d3@2 d3@2 d3@4 [a3,d4]@17 ~, ~@5 a3 ~@10]/2", // D5
  R: "[b2,f#3]@4 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@3 ~", S: "[a2,e3]!8", T: "[d3,a3]!8",
  U: "[a3,e4,a4,c#5]@2 [e4,a4,d5]@2 [a3,e4,a4,d5] [a3,e4,a4,c#5]@3", V: "e3 [b3,e4,g#4] e3!3 [b3,e4,g#4] e3!2",
  W: "a4@6 g#4@5 ~ b2@4, [e3,b3,e4]@11 ~@5", X: "[f#3 [a2,e3], b2@21 ~@11]/2", Y: "[[d3,a3]@31 ~]/2",
  Z: "[b2,f#3]@2 [b2,f#3]!6", AA: "[~@10 f#4@11 ~@3 c4@4 g3@4]/2", AB: "g#3@7 ~ c4@4 g3@2 a3@2",
  AC: "[~@4 e4@5 ~ e4@6 e4@6 e4@10, e2@31 ~]/2", AD: "[~@4 e4@5 ~ e4@6 e4@8 ~@4 f#3@4, e2@31 ~]/2", AE: "~@7 b3",
  AF: "[~@11 e4@2 c#3 e3 [c#3,f#3], a#3@17 ~ a#3@9 ~@5, ~@4 b3@7 ~ b3@8 b3@6 ~@6, ~@4 e4@7 ~@5]/2", // F#5
  AG: "[f#3,b3]@2 [e3,a3] [c#3,f#3] [e3,a3] [c#3,f#3]@3", // B5 A5 F#5 A5 F#5
  AH: "[[e3,a3]@5 ~ b3 ~@4 b3@2 ~@2 a3@3 ~ e4@2 c#3 e3 [c#3,f#3], ~@10 e4@14 ~@2 e4@11 ~@11, ~@14 a3@5 ~ a3@10 ~@6 a3@5 ~@7, ~@8 d3@13 ~@3, ~@14 b3@5 ~@5]/3", // A5 F#5
  AI: "[[e3,a3]@5 ~ b3 ~@4 b3@2 ~@6 e4@2 c#3 e3 [c#3,f#3], ~@10 e4@14 ~@2 e4@10 a#3@5 ~@7, ~@14 a#3@5 ~ a#3@10 f#3@8 ~@10, ~@8 f#3@5 ~ b3@7 ~@3]/3", // A5 F#5
  AJ: "[[e3,a3]@10 ~@2 b3@2 ~@2 d3 ~@5 b3@4 ~@4 d3@8 a3@4 c#3@2 e3@2 [c#3,f#3]@2, ~@10 e4@14 ~@2 e4@11 ~@11, ~@14 a3@5 ~ d3@10 ~@18, ~@28 b3@13 ~@7]/3", // A5 F#5
  AK: "[e3,a3]@5 [c#3,f#3] [b2,e3] [c#3,f#3]", AL: "[f#3,b3]@2 [e3,a3] [c#3,f#3] [e3,a3] [a2,d3]@3",
  AM: "[[a3,d4]@15 ~, d3]/2", AN: "[f#3,c#4]/2",
})).s("gm_overdriven_guitar").gain(0.36).pan(0)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@22 A B ~ C ~@10 A D ~@16 A B ~ C ~@14 E ~ F G E ~@21 A B ~ H ~@29 I J ~@2
>`.pickRestart({
  A: "~@15 x", B: "x!2 ~@2 x!2 ~@2", C: "~@3 x", D: "~@7 x ~@8", E: "x", F: "~@3 x!2 ~@11", G: "~@7 x", H: "~@5 x!3",
  I: "~@5 x ~@7 x ~@2", J: "~@4 x!2 ~@6 x!2 ~@2",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@19 A ~@14 B C D ~@14 A ~@18 E F@3 G F@2 ~@18 A ~@39>".pickRestart({
  A: "~@2 x!2", B: "~@4 x ~@3 x ~@3 x ~ x!2", C: "~@2 x!3 ~ x!3 ~ x!3 ~ x!2", D: "~@2 x!3 ~ x!3 ~ x!3 ~@3", E: "~ x!3",
  F: "x!4", G: "x ~ x ~ x!2 ~@2",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@22 A B ~@12 C D ~@16 A B ~@15 C E F G H ~@22 A B ~ I ~@29 J K ~@2>".pickRestart({
  A: "~@2 x ~@3 x!2", B: "~ x ~ x", C: "~@7 x", D: "~@3 x ~@4", E: "x", F: "~@5 x ~ x", G: "x!2 ~@6", H: "~@3 x",
  I: "~@5 x!2 ~", J: "~@4 x ~@6 x!2 ~@3", K: "~@3 x ~@6 x!2 ~@4",
})).gain(0.8)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@133 [~@4 x ~ x!3 ~@7] ~>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A B C D A D@2 E A D@3 A D@2 F A G H I ~@2 J ~@13 A D@2 E A D@3 A D@2 F A G H I ~@2 J ~@17 K ~@2 D A D@3 A D@2 L A
  D@3 A D@2 L A G H I ~@2 J M ~@33
>`.pickRestart({
  A: "~ x!3", B: "x ~ x ~ x!3 ~", C: "x!3 ~ x ~ x ~", D: "x!4", E: "x!2 ~@2", F: "x ~ x ~ x ~@2 x",
  G: "x ~ x!2 ~ x ~@2", H: "~ x!2 ~ x ~ x ~", I: "x!3 ~ x!3 ~", J: "~@2 x ~@4 x", K: "~@3 x", L: "x!3 ~", M: "~ x ~@2",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct("<~@71 A ~ B ~ C ~@55 D E ~@2>".pickRestart({
  A: "~@5 x ~ x", B: "~@3 x ~ x ~@2", C: "x ~@2 x ~@4", D: "~@3 x ~@12", E: "~@2 x ~@6 x ~@6",
})).gain(0.8)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@26 A B@3 A B@3 ~@24 A B@3 A B@3 A B@2 C ~@9 D ~ D ~ D ~@3 D ~ D ~ D ~@10 A B@3 A B@3 A B@2 C A B@3 A B@2 E A B@2 C A
  B@2 E ~@5
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x!3 ~", D: "~@5 x ~ x", E: "x!2 ~@2",
})).gain(0.64)

stack(
  overdriven_guitar, bass, pad_metallic, electric_guitar_clean, guitar_harmonics, overdriven_guitar_2, kick, snare,
  low_tom, hihat, mid_tom, mid_tom_soft, open_hat, high_tom, crash, ride
)

More by Big Mr.