Strudelify
Don't Speak cover art

Don't Speak

No Doubt

KeyE♭ majorTempo76 bpm
0:00/0:00
// Don't Speak — No Doubt
// 76 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 "Gtr.II" electric guitar clean (copy of ch 2 "Gtr.I" acoustic guitar steel)
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Gtr w/Distrt.
setcpm(76/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.

// chords · acoustic guitar steel · "Gtr.I"
const acoustic_guitar_steel = note(`<
  A@3 B@6 C@5 D E F G D E F H I J K L M N O P D E F G D E F Q R S T U V W V W V W ~@2 X L@2 D E F G D E F G D E F G D E
  F G D E F G D E F G D E F G D E F G Y
>`.pickRestart({
  A: "~@7 g4, [c5,eb5]!4, ~ g4@2 g4@2 g4@2 ~", // Cm
  B: "[~@27 g4 ~@19 g4, [bb4,d5]!2 [ab4,c5]!2 [bb4,d5]!4 [ab4,c5]!2 [bb4,d5]!2 [c5,eb5]!2 [bb4,d5]!2 [ab4,c5]!2 [bb4,d5]!2 [bb4,d5]!2 [c5,eb5]!2, ~ g4@2 g4@2 f4@2 f4@2 f4@2 f4@2 g4@2 g4@2 f4@2 f4@2 f4@2 f4@2 g4@2 ~@2 g4@2 g4@2 f4@2 f4@2 f4@2 f4@2 g4@2 g4@2 g4@2 ~]/6", // Bb Ab Bb Ab Bb Cm Bb Ab …
  C: "[~@11 g4 ~@20 [g4,c5,e5]@8, [ab4,c5]!2 [bb4,d5]!2 [c5,eb5]!2 [bb4,d5]!2 [ab4,c5]!2 [bb4,d5]!2 [eb5,g5]!2 [d5,f5]!2 ~@4, ~ f4@2 f4@2 f4@2 f4@2 g4@2 ~@2 g4@2 g4@2 f4@2 f4@2 f4@2 f4@2 bb4@2 bb4@2 bb4@2 bb4@2 ~@7]/5", // C Ab Bb Cm Bb Ab Bb Eb …
  D: "[f4,c5,f5,ab5,c6]@2 ~ [f4,c5,f5,ab5,c6]!3 ~@2 [bb3,f4,bb4,db5,f5,bb5] ~@2 [bb3,f4,bb4,db5,f5,bb5]!3 ~@2", // Fm Bbm
  E: "[eb4,bb4,eb5,g5,bb5]!2 ~ [eb4,bb4,eb5,g5,bb5]!3 ~@2 [c4,g4,c5,e5,g5] ~@2 [c4,g4,c5,e5,g5]!3 ~@2", // Eb C
  F: "[bb3,f4,ab4,db5,ab5,bb5]!2 ~ [bb3,f4,ab4,db5,ab5,bb5]!3 ~@2 [c4,g4,c5,e5,g5] ~@2 [c4,g4,c5,e5,g5]!3 ~@2", // Bbm7 C
  G: "[f4,c5,f5,ab5,c6] [f4,c5,f5,ab5,c6]@2 [f4,c5,f5,ab5,c6]!3 ~@2 [bb3,f4,bb4,db5,ab5,bb5]@2 ~@2 [c4,g4,c5,e5,g5]@4", // Fm Bbm7 C
  H: "[f4,c5,f5,ab5,c6] [f4,c5,f5,ab5,c6]@2 [f4,c5,f5,ab5,c6]!3 ~@2 [bb3,f4,bb4,db5,ab5,bb5]@4 [c4,g4,c5,e5,g5]@4", // Fm Bbm7 C
  I: "[c5,eb5] g4 [c5,eb5] g4 [c5,eb5] g4 [c5,eb5] g4", J: "[bb4,d5] g4 [bb4,d5] g4 [ab4,c5] f4 [ab4,c5] f4",
  K: "[bb4,d5] f4 [bb4,d5] f4 [bb4,d5] g4 [bb4,d5] g4", L: "[ab4,c5] f4 [ab4,c5] f4 [bb4,d5] f4 [bb4,d5] f4",
  M: "[c4,g4,c5,eb5,g5]@2 [c4,g4,c5,eb5,g5]@2 [c4,g4,c5,eb5,g5]!3 [g3,d4,g4,bb4,d5,g5]@2 [g3,d4,g4,bb4,d5,g5]!2 [g3,d4,g4,bb4,d5,g5]@2 [g3,d4,g4,bb4,d5,g5]!3", // Cm Gm
  N: "[f3,c4,f4,ab4,c5,f5]@2 [f3,c4,f4,ab4,c5,f5]!2 [f3,c4,f4,ab4,c5,f5]@2 [f3,c4,f4,ab4,c5,f5] [bb3,f4,bb4,d5,f5,bb5]@2 [bb3,f4,bb4,d5,f5,bb5]!2 [bb3,f4,bb4,d5,f5,bb5]@2 [bb3,f4,bb4,d5,f5,bb5]!3", // Fm Bb
  O: "[eb4,bb4,eb5,g5,bb5]@2 [eb4,bb4,eb5,g5,bb5]@2 [eb4,bb4,eb5,g5,bb5]!3 [bb3,f4,bb4,d5,f5,bb5]@4 [bb3,f4,bb4,d5,f5,bb5]@2 [bb3,f4,bb4,d5,f5,bb5] [bb3,f4,bb4,d5,f5,bb5]@2", // Eb Bb
  P: "[c4,g4,c5,e5,g5]@2 ~ [c4,g4,c5,e5,g5]@2 ~ [c4,g4,c5,e5,g5]@2 ~ [c4,g4,c5,e5,g5]@2 ~ [c4,g4,c5,e5,g5]@2 [c4,g4,c5,e5,g5]@2", // C
  Q: "f4 eb4 c4 ab3", R: "[db4,ab4]@3 [db4,ab4]!4 [c4,ab4] ~@2 [c4,ab4]@3 [c4,ab4] ~@2",
  S: "[b3,gb4]@3 [b3,gb4]!4 [bb3,gb4] ~@2 [bb3,gb4]@3 [bb3,gb4]!2 ~", // B5 Ebm
  T: "[a3,a4,db5]@2 ~ [db4,a4,db5]@2 ~ [eb4,a4,db5]@10", // A Gbm Ebm7b5
  U: "[db4,ab4,db5] [eb4,ab4,db5] ~ [eb4,ab4,db5] ~ [eb4,ab4,db5] [ab3,eb4,ab4,c5]@10", // Db5 Dbsus2 Ab
  V: "[c4,g4,c5,eb5,g5,c6]@3 [c4,g4,c5,eb5,g5,c6]!3 ~ [g4,d5,g5,bb5,d6]@2 [g4,d5,g5,bb5,d6] ~ [g4,d5,g5,bb5,d6]@2 [g4,d5,g5,bb5,d6] [g4,d5,g5,bb5,d6]@2", // Cm Gm
  W: "[f4,c5,f5,ab5,c6]@2 [f4,c5,f5,ab5,c6] [f4,c5,f5,ab5,c6]@2 [f4,c5,f5,ab5,c6] ~ [bb3,f4,bb4,d5,f5,bb5]@2 [bb3,f4,bb4,d5,f5,bb5] ~ [bb3,f4,bb4,d5,f5,bb5]@2 [bb3,f4,bb4,d5,f5,bb5] ~@2", // Fm Bb
  X: "[c5,eb5] g4 [c5,eb5] g4 [bb4,d5] g4 [bb4,d5] g4", Y: "[f3,c4,f4,ab4,c5] ~@7",
})).s("gm_acoustic_guitar_steel").gain(0.31).pan(0.2)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@10 A B C D E F G H E F G I J K L M N O P Q R F G S T F U V W X Y Z AA AB AC AD AE AF AG AH ~@2 AI R F AJ AK R F AJ
  AL R AM AN AO R AP AQ AO R AM AN AO R AP AQ AO R AM AN AO R AP AQ AO AR
>`.pickRestart({
  A: "c3 g2", B: "f2@3 a2 bb2@3 d3", C: "eb3@3 a2 bb2@3 bb2", D: "c3@13 g2 e3@2",
  E: "f2@2 ~ c3@2 c3!3 bb2@2 bb2@2 f2@2 f2@2", F: "eb3@2 bb3!4 bb2 b2 c3@2 c3@2 g2@2 c3 bb2",
  G: "bb2@2 f3!4 bb2 b2 c3@2 ~ g3!4 e2", H: "f2!2 ~ f2 g2 ab2 bb2 c3 db3 c3 ~ bb2 c3 ab2 ~ g2",
  I: "f2@2 ~ c3!4 b2 db3@4 eb3@4", J: "c3", K: "g2 f2", L: "bb2 g2", M: "f2@8 bb2@5 bb2 bb3@2",
  N: "c3@2 c3@2 bb3 c4 f2 g2 ~ g2!2 ~ c3 d3 c3 eb2", O: "f2@2 f2@2 eb3 d3 ~ bb2 ~ bb2!2 ~ d3 ab3 bb3 f3",
  P: "eb3@2 eb3@2 g2 ab2 ~ c3 ~ bb2 d3 f3 g3 f3 d3 ~", Q: "c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 g3@2",
  R: "f2@2 ~ c3!5 bb2@2 bb2@2 f2@2 ~@2", S: "f2@2 ~ f2 g2 ab2@2 ~ db3@2 ab2!2 bb2 ab2@2 g2",
  T: "f2@2 ~ c3!5 bb2@2 bb2@2 f2@2 c3@2", U: "bb2@2 f3!4 bb2 b2 c3@2 ~ g3!3 g3@2", V: "f3 eb3 c3 ab2",
  W: "db3@6 ~ c3@3 c3 db3 eb3 db3 c3 a2", X: "b2@6 eb3 bb2@7 ~@2", Y: "a2@2 ~ db3@2 ~ eb3@10",
  Z: "db3 eb3 ~ eb3 ~ eb3 ab2@8 bb3@2", AA: "c3@2 c3@2 ~ d3 eb3 g3 ~ g3 g3@4 g3 eb3",
  AB: "f3@2 f3@2 ~ g2 ab2 bb2 ~ bb2 bb2@4 bb2 b2", AC: "c3@2 c3@2 ~ d3 eb3 g3@7 g3@2",
  AD: "f2@2 f2@2 ~ a2 ~ bb2 ~ bb2 bb2@5 b2", AE: "c3@2 c3@2 a2 bb2 ~ g2@7 d3 eb3",
  AF: "f2@2 f2@2 g2 ab2 ~ bb2@2 bb3 bb3@4 f2 ab2", AG: "g2@2 g2@2 ab2 bb2 c3 d3 c3 c3@2 ab2@3 g2@2", AH: "f2",
  AI: "f2!8 bb2!8", AJ: "bb2@2 f3!4 bb2 b2 c3@2 ~ g3!4 eb2", AK: "f2@3 c3!5 bb2@4 c3@4",
  AL: "f2@3 f2 g2@3 g2 ab2@3 ab2 g2@3 g2", AM: "eb3@3 eb3 bb2@2 bb2 b2 c3@2 c3@2 g2@2 c3 b2",
  AN: "bb2@3 bb2 f3@2 bb2@2 c3@3 c3!5", AO: "f2@3 c3!4 a2 bb2@4 c3@4", AP: "eb3@2 bb3!4 bb2 b2 c3@2 c3@2 g2@2 c3 b2",
  AQ: "bb2@2 f3!4 bb2 b2 c3@3 c3 g2@2 c3 bb2", AR: "[f2,c3] ~@7",
})).s("gm_electric_bass_pick").gain(0.36)

// chords · overdriven guitar · "Gtr w/Distrt"
const overdriven_guitar = note("<~@42 A@2 B@2 C D E F ~@2 G ~@33>".pickRestart({
  A: "[~@5 f5 g5 f5@3 d5 ~@4 ab4@3 ~ eb5@3 g5 ~@3 g5@6]/2",
  B: "[~@5 f5 g5 f5@3 d5 ~@4 ab4@3 ~@2 [eb5,g5] ~ g5 ab5 bb5@2 ab5 g5 f5@4]/2", // Eb
  C: "~@5 d6@2 eb6 d6 eb6 c6 ~ bb5 c6 ~ bb5", D: "~ g5 eb5 ~ g5 ~ bb5 ~ ab5!2 g5@6",
  E: "~@3 [c4,d4] eb4 f4 g4 eb4 f4 g4 ab4 bb4 c5 bb4 ab4 ~", F: "[g4,ab4] g4@15",
  G: "~@2 c4 [f3,c4,f4] [f3,f4] [f3,c4,f4] c4 [f3,c4,f4] ~@2 c4 [f3,c4,f4]!3 c4 [f3,c4,f4]", // F5 F F5
})).s("gm_overdriven_guitar").gain(0.36)

// chords · electric guitar muted · "Gtr.Muted"
const electric_guitar_muted = note(`<
  ~@14 A B C D A B C ~@9 A B C D A B C ~@16 A B C D A B C D A B C D A B C D A B C D A B C D A B C D@2 A B C ~
>`.pickRestart({
  A: "~ [f4,c5,f5,ab5,c6]!2 ~@3 [f4,c5,f5,ab5,c6]!2 ~ [bb3,f4,bb4,db5,f5,bb5]!2 ~@3 [bb3,f4,bb4,db5,f5,bb5]!2", // Fm Bbm
  B: "~@2 [eb4,bb4,eb5,g5,bb5] ~@3 [eb4,bb4,eb5,g5,bb5]!2 ~ [c4,g4,c5,e5,g5]!2 ~@3 [c4,g4,c5,e5,g5]!2", // Eb C
  C: "~@2 [bb3,f4,ab4,db5,ab5,bb5] ~@3 [bb3,f4,ab4,db5,ab5,bb5]!2 ~ [c4,g4,c5,e5,g5]!2 ~@3 [c4,g4,c5,e5,g5]!2", // Bbm7 C
  D: "~@6 [f4,c5,f5,ab5,c6]!2 ~@2 [bb3,f4,bb4,db5,ab5,bb5]!2 ~ [c4,g4,c5,e5,g5]!3", // Fm Bbm7 C
})).s("gm_electric_guitar_muted").gain(0.31)

// other · pad choir · "La, La, La"
const pad_choir = note("<~@61 A B C D A B E D A B C D ~@13>".pickRestart({
  A: "c5@2 db5 c5@2 db5 c5@2 eb5@2 db5 db5@3 c5@2", B: "bb4@2 ~@6 db5@2 c5 c5@3 bb4@2",
  C: "bb4@2 ~@6 db5@2 c5 c5@3 c5!2", D: "c5 ~@3", E: "bb4@2 ~@6 db5@2 c5 c5@3 ab4 bb4",
})).s("gm_pad_choir").gain(0.41)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@21 A ~@50 B ~@3 C ~@3 D ~@3 D ~>".pickRestart({
  A: "~@6 x!2 ~@8", B: "~@12 x!4", C: "~@7 x", D: "~@14 x!2",
})).gain(0.8)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@21 A ~@34 B ~@3 C ~@15 D ~@9>".pickRestart({
  A: "~@10 x!2 ~@2 x!2", B: "~@14 x!2", C: "~@12 x!4", D: "~@13 x ~@2",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@26 [~ x ~ x ~ x ~ x]!3 ~@11 [x!8] ~ [~ x ~ x ~ x ~ x]!7 ~@37>").gain(0.8)

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

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

// drums · tambourine
const tambourine = s("tb").struct("<~@14 A@7 B ~@8 A@7 C A@3 B ~@11 A@32 ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "x!2",
})).gain(0.8)

// drums · shaker
const shaker = s("sh").struct("<~@38 [x!4 ~ x!7 ~ x!3]!3 [x!4 ~ x!3 ~@8] ~@11 [x!4 ~ x!7 ~ x!3]!32 x>").gain(0.8)

stack(
  acoustic_guitar_steel, bass, overdriven_guitar, electric_guitar_muted, pad_choir, kick, snare, low_tom, hihat,
  mid_tom, open_hat, crash, ride, tambourine, shaker
)

More by No Doubt