Strudelify

Knowledge

Green Day

KeyF majorTempo218 bpm
0:00/0:00
// Knowledge — Green Day
// 218 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(218/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 · overdriven guitar · "Billie Joe - Elec. Guitar"
const overdriven_guitar = note(`<
  ~@5 A B@2 C D E@2 B@2 C D F ~@5 G@2 B@2 C D E@2 H@3 I@3 H@3 I@3 J ~@2 K E@2 B@2 C D E@2 H@3 I@3 H@3 I@3 H@3 I@3 H@3
  I@3 ~@59
>`.pickRestart({
  A: "~@7 [g2,c3]", // C5
  B: "[[c3,g3,c4]@6 [bb3,c4,e4] ~@3 [c3,g3]@2 [c3,g3,c4]@6 [bb3,c4,e4] ~@3 [g3,c4]@2 [c3,g3,c4]@6 [bb3,c4,e4] ~]/2", // C5 C7 C5 C7 C5 C7
  C: "~@2 [c3,g3,c4]@2 [g3,c4,e4]@6 [bb3,c4,e4] ~@3 [c3,g3,c4]@2", // C5 C C7 C5
  D: "[bb2,bb3,d4]@2 ~ [bb2,bb3,d4]@2 ~ [bb2,bb3,d4]@2", // Bb
  E: "[[bb2,f3,bb3] [bb2,bb3,d4]@2 bb2 [f2,c3,f3]@2 [f2,c3] [c3,f3]@2 [f2,c3,eb3]@3 [f2,c3] [f2,c3,eb3]@2 [f2,c3]]/2", // Bb5 Bb F5 F7 F5 F7 F5
  F: "[bb2,f3,bb3] [bb2,bb3,d4]@2 bb2 [f2,c3,f3]@2 ~@2", // Bb5 Bb F5
  G: "[~@4 [f2,c3,f3]@2 [f2,c3,f3] [f2,c3,f3]@2 [f2,c3,f3] [f2,c3,f3]@2 [f2,c3,f3] [f2,c3,f3]@2 [f2,c3,f3]]/2", // F5
  H: "[[c3,g3,c4]@3 [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@3 [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@3 [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4]]/3", // C5
  I: "[[bb2,f3,bb3]@3 [bb2,f3,bb3]@2 [bb2,f3,bb3] [bb2,f3,bb3]@3 [bb2,f3,bb3]@2 [bb2,f3,bb3] [f2,c3,f3]@2 [f2,c3,f3] [f2,c3,f3]@2 [f2,c3,f3] [f2,c3,f3]@2 [f2,c3,f3] [f2,c3,f3]@2 [f2,c3,f3]]/3", // Bb5 F5
  J: "[c3,g3,c4] ~@3", K: "bb2 ~@2 [bb2,bb3,d4]@2 ~ [bb2,bb3,d4]@2",
})).s("gm_overdriven_guitar").gain(0.26)

// bass · electric bass pick · "Mike - Bass Guitar"
const bass = note(`<
  ~@12 A@3 B@2 C ~@4 D@2 E@3 F@3 G@3 F@3 G@3 F@3 H@3 I@3 E@3 F@3 G@3 F@3 G@3 F@3 G@3 F@3 G@3 F@3 J@3 K@3 J@3 K@3 ~@47
>`.pickRestart({
  A: "[c2@3 g1 c2@2 d2 c2]/3", B: "[bb1@9 bb1@3 f1@3 ~]/2", C: "~@2 g1 c2 f2@12", D: "[~@4 f1@3 a1@3 bb1@3 b1@3]/2",
  E: "[c2 e2 g2 a2 c3 a2 g2 c2]/3", F: "[bb1 d2 f2 g2 f1 a1 bb1 b1]/3", G: "[c2 e2 g2 a2 c2 e2 g2 a2]/3",
  H: "[c2@2 ~ g1@3 c2@3 e2@3 c2@3 g1@3 c2@3 e2@3]/3", I: "[bb1 ~@2 d2@3 f2@3 g2@3 f1@3 a1@3 bb1@3 b1@3]/3",
  J: "[c2@3 c2@2 g1 c2@3 c2@2 g1 c2@3 c2@2 g1 bb1@2 c2 c2@2 c2]/3",
  K: "[bb1@3 bb1@2 f1 bb1@3 bb1@2 f1 f1@2 f1 a1@2 a1 bb1@2 bb1 b1@2 b1]/3",
})).s("gm_electric_bass_pick").gain(0.26)

// chords · distortion guitar · "Billie Joe - Solo!"
const distortion_guitar = note("<~@65 A B C D E F G H@2 I J K L M@2 N O@2 P Q@2 R S@2 ~@11 T U ~@35>".pickRestart({
  A: "~@7 c5", B: "[gb5,g5] [g5,bb5]!2 [gb5,g5] [g5,bb5]!2 [gb5,g5] [g5,bb5]",
  C: "[g5,bb5] [gb5,g5] [g5,bb5]!2 [gb5,g5] [g5,bb5]!2 [gb5,g5]", // Gm Gmaj7 Gm Gmaj7 Gm Gmaj7
  D: "[g5,bb5]!2 [gb5,g5] [g5,bb5]!2 [gb5,g5] [g5,bb5]!2", E: "[gb5,g5] f5 eb5@2 eb5 g5 c6!2",
  F: "c6!2 bb5 g5 bb5 g5 f5 g5", G: "f5 eb5 f5 eb5 c5 eb5 c5 bb4",
  H: "[bb4 c5 g5@2 g5 bb5 g5@3 g5 bb5 g5 gb5 f5 e5 c5]/2", I: "b4 c5 [c5,eb5] [c5,e5]!2 [g4,c5]!3",
  J: "[eb5,f5]@2 g5@4 [a5,bb5]@2 g5@4 g5@2 gb5 f5", K: "eb5@2 c5@2 eb5@2 c5@2 g5@3 f5 eb5 c5 eb5 c5",
  L: "bb4 g4 bb4 c5 eb5@2 e5@2 c5@2 eb5@2 c5@2 c5 d5", M: "[e5 f5 gb5 [f5,g5]@16 ~@13]/2", N: "~@14 d5 e5",
  O: "[f5 ab5 ~@30, [a5,b5]@9 ~@7]/2", P: "~@14 b2 c3", Q: "[db3 d3!2 [db3,eb3]@16 ~@13, eb3@3 ~@29]/2",
  R: "~@14 gb3 ab3", S: "[a3 b3 ~@30, [db4,d4]@9 ~@7]/2", T: "~@14 f5 e5",
  U: "[b4,d5] c5 b4 [g4,bb4] [f4,a4] gb4 f4 [d4,e4] [c4,d4] db4 [a3,c4] b3 a3 [g3,ab3] gb3 e3", // Bm Gm F Dsus2 Csus2 Am Abmaj7
})).s("gm_distortion_guitar").gain(0.26)

// chords · overdriven guitar · "Billie Joe - Elec. Guitar"
const overdriven_guitar_2 = note("<~@100 A@2 B@3 C@3 B@3 C@3 ~@18 D E@3 F>".pickRestart({
  A: "[~@7 [f2,c3]@2 [f2,c3] [f2,c3]@2 [f2,c3] [f2,c3]@2 [f2,c3]]/2", // F5
  B: "[[c3,g3,c4]@3 [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@3 [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@3 [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4]]/3", // C5
  C: "[[bb2,f3,bb3]@3 [bb2,f3,bb3]@2 [bb2,f3,bb3] [bb2,f3,bb3]@3 [bb2,f3,bb3]@2 [bb2,f3,bb3] [f2,c3,f3]@2 [f2,c3,f3] [f2,c3,f3]@2 [f2,c3,f3] [f2,c3,f3]@2 [f2,c3,f3] [f2,c3,f3]@2 [f2,c3,f3]]/3", // Bb5 F5
  D: "~@3 [g3,c4,bb4]!5", // C7
  E: "[[g3,c4,bb4]@2 [g3,c4,bb4]@2 [g3,c4,bb4]@2 [g3,c4,bb4]@2 [g3,c4,bb4]@2 ~ [g3,c4,bb4]@2 [g3,c4,bb4]@2 [g3,c4,bb4]@2 [g3,c4,bb4]@31]/3", // C7
  F: "[c3,g3,c4]@3 ~@13", // C5
})).s("gm_overdriven_guitar").gain(0.26)

// bass · electric bass pick · "Mike - Bass Guitar"
const bass_2 = note("<~@90 A@3 B@2 ~ A@3 C@3 D@3 E@3 D@3 E@3 A@3 C@3 A@3 F@2 G@3 ~@4 H I@3 J>".pickRestart({
  A: "[c2@3 c2@2 g1 c2@3 c2@2 g1 c2@3 c2@2 g1 bb1@2 c2 c2@2 c2]/3", B: "[bb1@3 bb1@2 f1 bb1@3 bb1@2 f1 f1@2 ~@2]/2",
  C: "[bb1@3 bb1@2 f1 bb1@3 bb1@2 f1 f1@2 f1 a1@2 a1 bb1@2 bb1 b1@2 b1]/3", D: "[c2 e2 g2 a2 c2 e2 g2 a2]/3",
  E: "[bb1 d2 f2 g2 f1 a1 bb1 b1]/3", F: "[bb1@7 bb1@4 f1@2 ~ bb1@8 bb1@7 f1@3]/2",
  G: "[~ f1@8 f1@4 ~ a1@8 a1@4 bb1@9 bb1@4 ~ b1@4 b1@2 ~@2]/3", H: "~@3 c2!5",
  I: "[c2@2 c2@2 c2@2 c2@2 c2@2 ~ c2@2 c2@2 c2@2 c2@28 ~@3]/3", J: "c2@3 ~@13",
})).s("gm_electric_bass_pick").gain(0.26)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@35 A ~@5 A ~@17 A ~@5 A ~@5 A ~@3 B ~ A ~@16 C D ~@11 A ~@5 A ~@14 E F ~@2 G H ~@3
>`.pickRestart({
  A: "~@3 x!2 ~@3", B: "x", C: "~@9 x!3 ~ x ~ x", D: "~@3 x!2 ~@2 x!3 ~@6", E: "~@2 x!2 ~ x ~ x ~ x ~ x ~@2 x ~",
  F: "~ x ~@14", G: "~@7 x", H: "~@3 x!2 ~@6 x ~@3 x",
})).gain(0.26)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@16 A ~@25 B C D E ~@32 F G H F G H F G H F G H F G H F I ~ J G H F G K ~@12 J G H F G H F G L ~@14
>`.pickRestart({
  A: "~@7 x", B: "~@2 x!2 ~ x!2 ~", C: "x!2 ~ x!2 ~ x!2", D: "~ x!2 ~ x!2 ~ x", E: "x ~@2 x ~@4", F: "x ~@2 x ~@2 x ~",
  G: "~ x ~@2 x ~@2 x", H: "~@2 x ~@2 x ~@2", I: "~ x ~@2 x ~@3", J: "~@3 x ~@2 x ~", K: "~@5 x ~@2", L: "~ x ~@2",
})).gain(0.26)

// drums · mid tom
const mid_tom = s("mt").struct("<~@95 [~@3 x ~@4] ~@32 [~ x] ~@8>").gain(0.26)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@16 A B ~@4 C ~ D E F D E ~@16 G E F H E F D E ~@13 H E F H I ~ H E F H I ~@17 J K ~@4 L M ~@21 N O P Q ~@5 R ~@4
>`.pickRestart({
  A: "~ x", B: "~ x ~@2", C: "~ x ~ x ~@4", D: "x ~@2 x ~@2 x ~", E: "~ x ~@2 x ~@2 x", F: "~@2 x ~@2 x ~@2",
  G: "~@3 x", H: "~@3 x ~@2 x ~", I: "~ x ~@2 x ~@3", J: "~@9 x ~@4 x ~", K: "~@3 x ~@12", L: "~@7 x",
  M: "~ x!2 ~ x ~@3", N: "x ~@6 x ~@6 x ~", O: "~@3 x ~@4", P: "~ x ~@12 x ~", Q: "~@5 x ~@2", R: "~@8 x!4 ~@4",
})).gain(0.26)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  A B C A B C A B C A B C A B C A D ~@13 E F G E H ~ E F G E H ~@13 E F G E H ~ E F G E H ~@37 E F G E H ~ E F G E H
  ~@24
>`.pickRestart({
  A: "x ~@2 x ~ x!2 ~", B: "~ x ~ x!2 ~@2 x", C: "~ x!7", D: "~ x ~ x ~@4", E: "~@3 x ~@2 x ~", F: "~ x ~@2 x ~@2 x",
  G: "~@2 x ~@2 x ~@2", H: "~ x ~@2 x ~@3",
})).gain(0.26)

// drums · splash
const splash = s("cr").struct(`<
  ~@22 A B C ~@4 B C ~@2 C D B C ~@2 C D B C ~@2 E ~@2 C ~@4 B C ~@2 C D B C ~@2 C D B C ~@2 C D B C ~@2 C D B ~@18 C
  ~@4 F C ~@2 C D B C ~@2 C D B C ~@17 G H I ~ C
>`.pickRestart({
  A: "~@4 x ~@2 x", B: "~@2 x ~@2 x ~@2", C: "x", D: "~@7 x", E: "~@3 x ~@4", F: "~@5 x ~@2", G: "~@6 x ~@5 x!4",
  H: "x!9 ~ x!6", I: "x!2 ~@14",
})).gain(0.26)

stack(
  overdriven_guitar, bass, distortion_guitar, overdriven_guitar_2, bass_2, kick, snare, low_tom, hihat, mid_tom,
  open_hat, ride_bell, splash
)

More by Green Day