Strudelify
KeyC majorTempo116 bpm
0:00/0:00
// Dr Beat — Miami Sound Machine
// 116 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 32, 4/4 at bar 33, 2/4 at bar 51, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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
const bass = note(`<
  ~@11 A B C B D B C E D B C F D B C B D B C B G@3 H@5 I J K@2 L@3 ~@3 A B C F D B C B D B C B D B C E G@3 M@5 N@2 K@2
  O@2 K@2 O@2 K@2 J P Q@2 ~@6 A B C F D B C B A B C B A B C E D B C F A B C B ~ B C R A B C ~@2
>`.pickRestart({
  A: "~@12 d2 ~ d2 ~", B: "c2@3 ~ c2@3 d2@2 ~@3 d2 ~ d2 ~", C: "c2 ~ c2 ~ c2@3 d2 ~@4 d2 ~ d2 ~",
  D: "c2 ~ c2 ~ c2@3 d2 ~@3 c2 d2 d3 d2 ~", E: "c2@3 ~ c2@2 ~ d2 ~@4 d2 ~ d2 ~", F: "c2@3 ~ c2@2 ~ d2@2 ~@3 d2 ~ d2 ~",
  G: "[d2@2 c2 ~ c2 ~ c2 ~ g1@6 ~ g1@2 ~@5 g1@2 a1@3 ~ a1@2 ~ a1@2 ~@3 d2 ~ d2 ~ c2 ~ c2 ~ c2 ~ c2 d2]/3",
  H: "[~@8 c2 ~ c2 ~ c2 ~ c2 d2@4 ~ d2@2 d2@2 g1@6 ~ g1@2 ~@5 g1@2 a1@3 ~ a1@2 ~ a1@2 ~@3 d2 ~ d2 ~ c2@3 ~ c2@3 d2@2 ~@3 d2 ~ d2 ~ c2 ~ c2 ~ c2@3 d2]/5",
  I: "~@4 d2 ~ d2 ~ c2@3 ~ c2@3 d2", J: "~@4 d2 ~ d2 ~ c2 ~ c2 ~ c2@3 d2",
  K: "[~@3 c2 d2 d3 d2 ~ c2@3 ~ c2@3 d2@2 ~@3 d2 ~ d2 ~ c2 ~ c2 ~ c2@3 d2]/2",
  L: "[~@4 d2 ~ d2 ~ c2@3 ~ c2@2 ~ d2@2 ~@3 d2 ~ d2 ~ c2@16 ~@8]/3",
  M: "[~@8 c2 ~ c2 ~ c2 ~ c2 d2@4 ~ d2@2 d2@2 g1@6 ~ g1@2 ~@5 g1 ~ a1@3 ~ a1@2 ~ a1@2 ~@3 d2 ~ d2 ~ c2@3 ~ c2@3 d2@2 ~@3 d2 ~ d2 ~ c2 ~ c2 ~ c2@3 d2]/5",
  N: "[~@4 d2 ~ d2 ~ c2@3 ~ c2@2 ~ d2@2 ~@3 d2 ~ d2 ~ c2 ~ c2 ~ c2@3 d2]/2",
  O: "[~@4 d2 ~ d2 ~ c2@3 ~ c2@3 d2@2 ~@3 d2 ~ d2 ~ c2 ~ c2 ~ c2@3 d2]/2", P: "~@3 c2 d2 d3 d2 ~ c2 ~ c2 ~ c2 ~ c2 d2",
  Q: "[~@8 c2 ~ c2 ~ c2 ~ c2 d2@4 ~@13]/2", R: "c2@3 ~ c2@3 d2 ~@4 d2 ~ d2 ~",
})).s("gm_slap_bass_1").gain(0.45)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@4 A@8 B C B D B C B D B C B D B C B D B C B ~@6 E F G F E F G H@2 I@6 B D B C B D B C B D B C B ~@6 E F G F E F G F
  E F G F E F@2 ~@2 A@8 B C B D B C B J B C B J B C B D B C B J B C B ~ B C B J B C ~@2
>`.pickRestart({
  A: "[~@124 [f3,a3,d4] ~ [f3,a3,d4] ~, ~@5 g4@59]/8", // Dm
  B: "[e3,g3,c4]@3 ~ [e3,g3,c4]@3 [f3,a3,d4] ~@4 [f3,a3,d4] ~ [f3,a3,d4] ~", // C Dm
  C: "[e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4]@3 [f3,a3,d4] ~@4 [f3,a3,d4] ~ [f3,a3,d4] ~", // C Dm
  D: "[e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4]@3 [f3,a3,d4] ~@8", E: "~@8 [e3,g3,c4]@3 ~ [e3,g3,c4]@3 [f3,a3,d4]",
  F: "~@4 [f3,a3,d4] ~ [f3,a3,d4] ~ [e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4]@3 [f3,a3,d4]", // Dm C Dm
  G: "~@4 [f3,a3,d4] ~ [f3,a3,d4] ~ [e3,g3,c4]@3 ~ [e3,g3,c4]@3 [f3,a3,d4]", // Dm C Dm
  H: "[~@4 [f4,a4,d5] ~ [f4,a4,d5] ~ [e4,g4,c5]@16 ~@8]/2", // Dm C
  I: "[~@60 [f3,a3,d4] ~ [f3,a3,d4] ~ [e3,g3,c4]@3 ~ [e3,g3,c4]@3 [f3,a3,d4] ~@4 [f3,a3,d4] ~ [f3,a3,d4] ~ [e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4]@3 [f3,a3,d4] ~@4 [f3,a3,d4] ~ [f3,a3,d4] ~, ~@5 g4@43]/6", // Dm C Dm C Dm
  J: "~@12 [f3,a3,d4] ~ [f3,a3,d4] ~", // Dm
})).s("gm_lead_2_sawtooth").gain(0.35).pan(0.4)

// other · trombone
const trombone = note(`<
  ~@15 A B C D E F C D G H I D E J K D L@2 M N O P Q R S N T R S ~@5 U B C D V W C X Y Z C D AA AB C D AC@2 AD AE AF P Q
  R S ~ AG AH AI AJ AK ~@5 AL@4 ~@11 AM AN AO ~ AP@3 ~ AQ AR AS ~ AT@3 ~@13
>`.pickRestart({
  A: "~@8 g#4 ~ g4@4 f4 ~", B: "a4@4 g4@3 f4@3 d4 ~ c4 ~ d4 ~", C: "e4@4 f4@3 d4 ~@4 c4 ~ d4 ~", D: "e4@4 f4@3 d4 ~@8",
  E: "~@8 g#4@2 g4 ~ g4@2 f4 ~", F: "a4@4 g4@3 f4 ~@4 c4 ~ d4 ~", G: "~@6 g#4 ~ g#4@2 g4 ~ g4@2 f4@2",
  H: "~ a4@3 g4@3 f4@3 d4 ~@3 d4 ~", I: "e4@4 f4@3 d4 ~@6 d4 ~", J: "a4@4 g4@3 f4@2 ~@2 c4!2 ~ d4 ~",
  K: "e4@4 f4@3 d4@2 ~@2 c4!2 ~ d4 ~", L: "[~@2 d4 f4 ~ g4 ~ g4@11 ~ c5@3 c5@2 a4@8]/2",
  M: "~@4 g4 ~ f4 ~ g4@2 f4 ~ a4@2 g4 f4",
  N: "~@4 [f4,a4,d5] ~ [f4,a4,d5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] [f4,a4,d5]", // Dm C Dm
  O: "~@2 d4 f4 ~ g4 ~ g4@7 ~@2", P: "~@2 c5!2 a4@4", Q: "~@4 d5@2 c5 ~ a4@2 g4 ~ f4@2 d4!2",
  R: "~@4 [f4,a4,d5] ~ [f4,a4,d5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5]@2 [e4,g4,c5] [f4,a4,d5]", // Dm C Dm
  S: "~@4 [f4,a4,d5] ~ [f4,a4,d5] ~ [e4,g4,c5]@2 [e4,g4,c5] ~ [e4,g4,c5]@2 [e4,g4,c5] [f4,a4,d5]", // Dm C Dm
  T: "~@4 [f4,a4,d5] ~ [f4,a4,d5] ~ [e4,c5]@2 [e4,g4,c5] ~ [e4,g4,c5]@2 [e4,g4,c5] [f4,a4,d5], ~@8 g4 ~@7", // Dm C Dm
  U: "~ d4 ~ f4 ~ g4 ~ g#4@3 g4@4 f4@2", V: "~@6 a4@3 g4@2 g4@2 f4 ~@2", W: "a4@3 ~ g4@3 f4@3 d4 ~ c4 ~ [c4,d4] ~",
  X: "e4@4 f4@2 ~ d4 ~@8", Y: "~@7 g#4@2 ~ g4 ~ g4@2 f4 ~", Z: "a4@3 ~ g4@3 f4@3 d4 ~ c4 ~ d4 ~",
  AA: "~@7 g#4@3 g4 ~ g4@2 f4 ~", AB: "a4@4 g4@3 f4@2 ~@3 c4 ~ d4 ~",
  AC: "[~@2 d4 f4 ~ g4 ~ g4@11 ~@2 c5@2 c5@2 a4@8]/2", AD: "~@4 g4@2 f4 ~ g4@2 f4 ~ a4@2 g4 f4",
  AE: "~@4 [f4,a4,d5] ~ [f4,a4,d5] ~ [e4,g4,c5]@2 [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] [f4,a4,d5]", // Dm C Dm
  AF: "~@2 d4 f4 ~ g4 ~ g4@9", AG: "d5@4 c5@3 ~ a4@4 g4@3 ~", AH: "g4 f4 c4!2", AI: "d4 ~@3", AJ: "~ a4!3 d5@2 a4@9 ~",
  AK: "~ g4!2 f4 a4@2 f4@10",
  AL: "[~@15 d5@2 d5 [c5,d5] ~ a4!2 f4@2 g4@2 g#4 ~ g#4@2 ~ g4@2 f4 g4 f4 g4 f4 g4 ~ a4@2 g4 ~ f4@8 ~@12]/4", // Csus2
  AM: "~@2 d5 c5", AN: "a4 g4!2 f4", AO: "c4@3 ~ c4@3 d4@2 ~@7",
  AP: "[~@9 a4!3 d5@2 a4@8 ~@3 a4 g4 f4 a4@2 f4@9 a4 ~@8]/3", AQ: "~@7 d5@2 d5 c5 ~ a4!2 f4@2",
  AR: "g4@2 g#4@2 a4@3 g4@2 f4 g4 f4 g4 f4 g4 ~", AS: "a4@2 g4 ~ f4@10 ~@2",
  AT: "[~@9 a4!3 d5@2 a4@4 ~@7 g4!2 f4 a4@2 f4@5 ~@13]/3",
})).s("gm_trombone").gain(0.54)

// chords · brass section
const brass_section = note(`<
  ~@26 A B ~@2 A ~@3 C ~@17 D E ~@2 F G ~@2 H@2 ~@2 I ~@3 J ~@16 K ~@17 L ~ M N ~@3 O@3 ~@6 P ~@3 L ~ M Q ~
>`.pickRestart({
  A: "~@7 [a3,a4] [d4,d5]!2 [c4,c5] ~@5", B: "~@5 [e4,c5,e5,c6] ~ [f4,d5,f5,d6] ~@8", C: "~@2 [f4,d5,d6] ~@13",
  D: "~@11 [d4,f5] ~ [e4,g5] ~ [e4,g5]", E: "~ [e4,g5] [d4,f5] ~ [e4,g5] [d4,f5] ~ [f4,a5] ~@8",
  F: "~@11 [a3,d4,a4] [d4,f4,d5] [c4,e4,c5] [a3,d4,a4] ~", // D5 Dm C D5
  G: "[d4,f4,d5] ~ [d4,f4,d5] ~ [d4,f4,d5] [c4,e4,c5] [a3,d4,a4] [d4,f4,d5] ~@8", // Dm C D5 Dm
  H: "[~@14 [a3,a4]@7 [e4,c5,c6] c4 [d4,f4,d5,d6] ~@8]/2", I: "~@7 [d4,d6]", J: "~@2 [f4,c6,c#6] ~@13, ~ d6 ~@6",
  K: "~@6 [a3,a4]@7 [e4,c5,c6] c4 [d4,f4,d5,d6]", L: "[f4,d5] ~ [e4,c5] ~ [a4,f5] [g4,e5] [e4,c5] [f4,d5] ~@8",
  M: "[c4,e4,c5] ~ [d4,f4,d5] ~ [d4,f4,d5] [c4,e4,c5] [a3,d4,a4] [d4,f4,d5] ~@8", // C Dm C D5 Dm
  N: "[c4,e4,c5] ~ [d4,f4,d5] ~ [f4,a4,f5] [e4,g4,e5] [c4,e4,c5] [d4,f4,d5] ~@8", // C Dm F Em C Dm
  O: "[~@7 [d4,d5] ~ [d4,d5] [c4,c5] ~ [a3,a4]@11 [g3,g4]@2 [f3,f4] [g3,g4] [a3,a4] ~@2 a3@7 [c5,d5] [e4,c6] [f4,d5,d6] ~@8, ~@5 a4 ~@2]/3", // D C A G F G A Csus2 …
  P: "~@8 [d4,d6]@3 ~@5", Q: "c5 ~@15",
})).s("gm_brass_section").gain(0.6).pan(0.6)

// chords · brass section · soft notes · F Dm Bm7 Dm F Dm Bm7 Dm
const brass_section_soft = note(`<
  ~@65
  [~ [b3,c4,a5,b5,c6] [g3,a3,f5,g5] [e3,f3,d5,e5] [b2,c3,d3,a4,b4,c5] [g2,a2,f4,g4] [f2,d4,e4] c4 ~@8]
  ~@46
  [~ g3 ~@14]
  ~@6
  [~@11 [b3,c4,a5,b5,c6] [g3,a3,f5,g5] [e3,f3,d5,e5] [b2,c3,d3,a4,b4,c5] [g2,a2,f4,g4]]
  [[f2,d4,e4] c4 ~@14]
  ~@7
>`).s("gm_brass_section").gain(0.24).pan(0.6)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@38 A@6 B@2 ~@26 A@15 ~@9 C@7 ~ C@3 ~ C@4 ~@8 C@3 ~ C@2 ~@2>".pickRestart({
  A: "~ [d4,f4,a4]!6 ~@9", B: "[~ [d4,f4,a4]!6 ~ [c4,e4,g4]@16 ~@8]/2", C: "~@9 [d4,f4,a4]!6 ~",
})).s("gm_electric_guitar_clean").gain(0.28).pan(0.6)

// chords · pad choir
const pad_choir = note("<~@31 A@3 ~ A@3 ~@27 A@3 ~ A@3 ~@56>".pickRestart({
  A: "[~@4 [a#4,d5,g5]@7 ~ [e5,a5,d6]@6 ~@6]/3", // Gm Dsus2
})).s("gm_pad_choir").gain(0.22)

// other · harmonica
const harmonica = note("<~@79 A@2 B C@2 D@2 ~@9 E F G F H ~@28>".pickRestart({
  A: "[~@15 f6@12 d6 f6@2 d6 c6]/2", B: "~ a5@2 g#5 g5 f5 d5 c5 d5 ~ f5 ~ g5@3 f5",
  C: "[~@4 a5@2 c6 a5@2 c6 a5@2 c6 a5@2 c6@5 a5 ~ c6 d6 f6@2 d6 c6@4 d6]/2", D: "[~@4 c6 ~ d6 f6@18 ~@7]/2",
  E: "~@12 d6 ~ d6 ~", F: "e6@3 ~ e6@3 d6 ~@4 d6 ~ d6 ~", G: "d6@3 ~ d6 ~ d6!2 ~@4 d6 ~ d6 ~",
  H: "d6 ~ d6 ~ f6@3 d6 ~@8",
})).s("gm_harmonica").gain(0.5).pan(0.4)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@2 A@2 B ~ B@3 ~@3 B ~ B@3 ~ B@3 ~ B@3 ~ B@3 ~ B ~@3 C ~@3 C ~ C@3 ~ C ~ B ~@3 B ~ B@3 ~ B@3 ~ B@3 ~ B ~@3 C ~@3 C ~
  C@3 ~ C@3 ~ C@3 ~ C@2 ~ B ~ B@2 ~@3 B ~ B@3 ~ B@3 ~ B@3 ~ B@3 ~ B ~ B ~ B@3 ~ B@3 ~@3
>`.pickRestart({
  A: "~ x ~@3 x ~@2", B: "~@7 x", C: "~@3 x ~@4",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct("<~@4 A@7 B A@33 C A@3 B A@38 D A@6 B A@19 E A@10 ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!3", C: "~ x ~@2", D: "~@2 x ~@2 x!2 ~", E: "x ~ x!2 ~@2 x ~",
})).gain(0.54)

// drums · low tom
const low_tom = s("lt").struct("<~@11 A ~@33 B ~@3 A ~@39 C ~ D C E B F ~@11 A ~@7 G ~@3 A ~@8>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@6 x!2", D: "~@2 x!2 ~@4", E: "~@3 x ~@3 x", F: "~@3 x!5", G: "~@2 x ~@4 x ~@4 x ~@3",
})).gain(0.54)

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

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B@2 ~ C B@2 ~ C ~ C ~ C ~ C@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A B@2 ~ C B@2 ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~@2 C A@2 ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@5 x ~ x", B: "~@15 x", C: "~ x ~ x ~@4",
})).gain(0.48)

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

// drums · congas
const congas = s("conga:13").struct("<~@4 A@27 ~ B@14 A@19 ~ B@22 A@38 ~@2>".pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@6",
})).gain(1.34)

// drums · congas
const congas_2 = s("conga:18").struct("<~@4 A@27 B C@14 A@19 B C@22 A@38 ~@2>".pickRestart({
  A: "x ~@3 x ~ x!2 ~ x ~@2 x!2 ~@2", B: "x ~@3 x ~ x!3 ~@3 x ~ x!2", C: "~ x ~@2 x!2 ~@2 x ~@3 x ~ x!2",
})).gain(1.34)

// drums · congas · soft notes
const congas_soft = s("conga:18").struct("<~@4 A@27 B C@14 A@19 B C@22 A@38 ~@2>".pickRestart({
  A: "~ x ~@6", B: "~ x ~@3 x ~@2", C: "~@5 x ~@2",
})).gain(0.77)

// drums · congas
const congas_3 = s("conga:33").struct("<~@4 A@27 ~ B@14 A@19 ~ B@22 A@38 ~@2>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@4",
// … 33 more lines

More by Miami Sound Machine