Strudelify

Problems and Bigger Ones

Harvey Danger

KeyD majorTempo123 bpm
0:00/0:00
// Problems and Bigger Ones — Harvey Danger
// 123 bpm, 4/4, key D 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 176 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): Filler.
setcpm(123/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 · fretless bass · "Extra"
const fretless_bass = note(`<
  ~@63 A B ~@2 C B ~@2 A B ~@32 A B ~@2 C B ~@2 A B ~@19 D@2 E F D@2 E F D@2 E F D@2 E F ~@7 C B ~@2 A B ~@2 A B ~@9
>`.pickRestart({
  A: "c#4@5 ~ d4@3 ~ e4@5 ~", B: "d4@13 ~@3", C: "c#4@5 ~ d4@3 ~ c#4@5 ~", D: "a3@5 ~ a3@5 ~ a3@3 ~", E: "d3@7 ~",
  F: "e3@5 ~ e3@5 ~ e3@3 ~",
})).s("gm_fretless_bass").gain(0.34)

// chords · overdriven guitar · "Filler" · B5
const overdriven_guitar = note("<~@99 [b4@3 b4@3 b4@2]!2 [b4@3 b4@3 [f#4,b4]@2] ~@19 [~@7 g4] [a4@13 ~@3] ~@53>")
  .s("gm_overdriven_guitar").gain(0.42)

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  A B C@6 D@2 E F G@4 H A B I J@8 ~ K@3 ~@2 L M N O L M N O L M N O L M N O L M N O L M N O P@2 Q M P@2 Q M P@2 Q M P@2
  Q M P@2 R S T U R S T U V W X Y V W X Y V W X Y V W X Z@3 Q M P@2 Q M P@2 Q M P@2 Q M P@2 AA@2 AB AC AD@2 AE AF AD@2
  AE AF AD@2 AE AF AD@2 AE AF AD@2 AE AF AD@2 AE AF AD@2 AE AG AH@2 AI AJ Q M P@2 Q M P@2 Q M P@2 Q M P@2 AK W AL@4
>`.pickRestart({
  A: "~ [d3,a3,d4,a4,d5]@5 ~ [d3,a3,d4,a4,d5]@9", B: "~@2 [a3,d4,e4,a4,d5]@5 ~ [a3,d4,e4,a4,d5]@8",
  C: "[~@3 [g3,d4]@5 ~ [g3,d4,a4]@9 ~@2 [g3,d4]@5 ~ [g3,d4,a4]@9 ~@2 [d3,a3,d4,a4,d5]@5 ~ [d3,a3,d4,a4,d5]@2 [d3,a3,d4,a4,d5]@7 ~@2 [a3,d4,e4,a4,d5]@5 ~ [a3,d4,e4,a4,d5]@2 [a3,d4,e4,a4,d5]@7 ~@2 [g3,d4]@5 ~ [g3,d4,a4]@2 [g3,d4,a4]@7 ~@2 [g3,d4]@5 ~ [g3,d4,a4]@2]/6", // G5 Gsus2 G5 Gsus2 D5 Asus4 G5 Gsus2 …
  D: "[[g3,d4,a4]@7 ~@2 [d3,a3,d4,a4,d5]@5 ~ [d3,a3,d4,a4,d5]@9 ~@2 [a3,d4,e4,a4,d5]@5 ~]/2", // Gsus2 D5 Asus4
  E: "[a3,d4,e4,a4,d5]@9 ~@2 [g3,d4]@5", F: "~ [g3,d4,a4]@9 ~@2 [g3,d4]@4",
  G: "[~@2 [g3,d4,a4]@9 ~@2 [d3,a3,d4,a4,d5]@5 ~ [d3,a3,d4,a4,d5]@9 ~@2 [a3,d4,e4,a4,d5]@5 ~ [a3,d4,e4,a4,d5]@9 ~@2 [g3,d4]@5 ~ [g3,d4,a4]@9 ~@2]/4", // Gsus2 D5 Asus4 G5 Gsus2
  H: "[g3,d4]@5 ~ [g3,d4,a4]@9 ~", I: "~@2 [g3,d4]@5 ~@2 [g3,d4,a4]@7",
  J: "[~@3 [g3,d4]@5 ~@2 [g3,d4,a4]@9 ~ [d3,a3,d4,a4,d5]@5 ~@2 [d3,a3,d4,a4,d5]@9 ~ [a3,d4,e4,a4,d5]@5 ~@2 [a3,d4,e4,a4,d5]@9 ~ [g3,d4]@5 ~@2 [g3,d4,a4]@9 ~ [g3,d4]@5 ~@2 [g3,d4,a4]@9 ~ [d3,a3,d4,a4,d5]@31 ~@9]/8", // G5 Gsus2 D5 Asus4 G5 Gsus2 G5 Gsus2 …
  K: "[~@6 [d3,g3,d4,g4,d5]@2 [d3,g3,d4,g4,d5]@2 [d3,g3,d4,g4,d5]@2 [d3,a3,d4,a4,d5]@31 ~@5]/3", // G5 D5
  L: "[b3,f#4,b4,f#5]@5 ~ [b3,f#4,b4,f#5]@5 ~ [b3,f#4,b4,f#5]@3 ~", // B5
  M: "[a3,e4,a4,e5]@5 ~ [a3,e4,a4,e5]@5 ~ [a3,e4,a4,e5]@3 ~", // A5
  N: "[f#3,c#4,f#4,c#5]@5 ~ [f#3,c#4,f#4,c#5]@5 ~ [f#3,c#4,f#4,c#5]@3 ~", // F#5
  O: "[g3,d4,g4,d5]@5 ~ [g3,d4,g4,d5]@5 ~ [g3,d4,g4,d5]@3 ~", // G5
  P: "[g3,d4,g4,d5,g5]@5 ~ [g3,d4,g4,d5,g5]@5 ~ [g3,d4,g4,d5,g5]@3 ~", // G5
  Q: "[d3,a3,d4,a4,d5]@5 ~ [d3,a3,d4,a4,d5]@5 ~ [d3,a3,d4,a4,d5]@3 ~", // D5
  R: "[b3,f#4,b4]@2 [b3,f#4,b4]@2 [b3,f#4,b4]@2 [b3,f#4,b4]@2 [b3,f#4,b4]!2 [b3,f#4,b4]@2 [b3,f#4,b4]@2 [b3,f#4,b4]@2", // B5
  S: "[a3,e4,a4,c#5]@2 [a3,e4,a4,c#5]@2 [a3,e4,a4,c#5]@2 [a3,e4,a4,c#5]@2 [a3,e4,a4,c#5]!2 [a3,e4,a4,c#5]@2 [a3,e4,a4,c#5]@2 [a3,e4,a4,c#5]@2", // A
  T: "[c#4,f#4,c#5]@2 [c#4,f#4,c#5]@2 [c#4,f#4,c#5]@2 [c#4,f#4,c#5]@2 [c#4,f#4,c#5]!2 [c#4,f#4,c#5]@2 [c#4,f#4,c#5]@2 [c#4,f#4,c#5]@2", // F#5
  U: "[g3,d4,g4,b4]@2 [g3,d4,g4,b4]@2 [g3,d4,g4,b4]@2 [g3,d4,g4,b4]@2 [g3,d4,g4,b4]!2 [g3,d4,g4,b4]@2 [g3,d4,g4,b4]@2 [g3,d4,g4,b4]@2", // G
  V: "[b3,f#4,b4]!8", W: "[a3,e4,a4,c#5]!8", X: "[c#4,f#4,c#5]!8", Y: "[g3,d4,g4,b4]!8", Z: "[g3,d4,g4,d5]!8",
  AA: "[[d4,a4,d5]@29 ~@3]/2", AB: "a4 c5 d5 a4 c5 d5 a4 d5", AC: "a4 c5 d5 a4 c5 d5 g4 d5",
  AD: "d4 a4 d5 d4 a4 d5 d4 d5", AE: "d4 g4 d5 d4 g4 d5 d4 d5", AF: "d4 g4 d5 d4 g4 d5 f#4 d5",
  AG: "d4@2 g4@2 d5@2 d4@2 g4@2 d5@2 [a3,d4,a4,d5]@2 [a3,d4,a4,d5] [g3,d4,g4,d5]", // D5 G5
  AH: "[g3,d4,g4]@2 [d4,g4]@2 [g4,d5]@2 [d4,g4]@2 [d4,g4]@2 [d4,g4,d5]@2 [g3,d4,g4]@2 [g3,d4,g4]!2", // G5
  AI: "[g3,d4,g4] [d4,g4] [g4,d5] [d4,g4]!2 [g3,d4,g4,d5]@3", // G5
  AJ: "[g3,g4,d5]!2 [g3,d4,e4,g4,d5] [g3,d4,g4,d5]!2 [g3,d4,d5]!3, d4@2 ~ f4@2 f#4@2 ~", // G5 Em7 G5
  AK: "[b3,f#4,b4]@2 [b3,f#4,b4]@2 [b3,f#4,b4]@2 [b3,f#4,b4]@2 [b3,f#4,b4]@2 [b3,f#4,b4]@2 [b3,f#4,b4]@2 [b3,f#4,b4]!2", // B5
  AL: "[[a3,e4,a4]@61 ~@3]/4", // A5
})).s("gm_electric_guitar_clean").gain(0.26)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@8 A@2 B@2 C@2 D@2 E F@2 G@2 H@2 I@2 J@3 ~ K@3 ~ L M N O P M N O P M N O P M N O P M N O P M N O Q@3 R S T@2 R S T@2
  R S T@2 R S T@2 M N O P M N O P M N O Q M N O P M N O Q M N O Q@3 R S T@2 R S T@2 R S T@2 R S T@2 U@4 V W X Y V W X Y
  V W X Z AA AB AC AD AA AE AC AD AF@2 AC AD AA AE AC AD AG AH AI AJ R S T@2 R S T@2 R S T@2 R S T@2 M AK AL@4
>`.pickRestart({
  A: "[~@5 [e2,a2]@3 ~ [e2,b2]@2 b2@2 b2@2 [e2,b2]@2 b2@2 b2@2 ~ [e2,b2]@2 b2@2 [e2,a2]@2 a2@2 a2@2]/2", // A5 E5 A5
  B: "[[e2,a2]@2 a2@2 a2@2 ~ [e2,a2]@2 a2@2 [d2,g2]@2 g2@2 g2@2 [d2,g2]@2 g2@2 g2@2 [d2,g2]@2 ~ g2@2 [d2,g2]@2 g2@2]/2", // A5 G5
  C: "[g2@2 [d2,g2]@2 g2@2 g2@2 [d2,g2]@2 ~ [e2,a2]@2 [e2,b2]@2 b2@2 b2@2 [e2,b2]@2 b2@2 [e2,b2]@2 [e2,b2]@2 ~ [e2,a2]@2 [e2,a2]@2]/2", // G5 A5 E5 A5
  D: "[a2@2 a2@2 [e2,a2]@2 a2@2 a2@2 [e2,a2]@2 ~ [e2,g2]@2 [d2,g2]@2 g2@2 g2@2 [d2,g2]@2 g2@2 g2@2 [d2,g2]@2 g2@2 ~]/2", // A5 Em G5
  E: "[d2,g2] g2!2 [d2,g2] g2!2 [d2,g2] [e2,a2]", // G5 A5
  F: "[~ [e2,b2]@2 b2@2 b2@2 [e2,b2]@2 b2@2 [e2,b2]@2 [e2,b2]@2 [e2,a2]@2 ~ [e2,a2]@2 a2@2 a2@2 [e2,a2]@2 a2@2 [e2,a2]@2 [e2,a2]@2]/2", // E5 A5
  G: "[[e2,g2]@2 [d2,g2]@2 ~ g2@2 g2@2 [d2,g2]@2 g2@2 g2@2 [d2,g2]@2 g2@2 [d2,g2]@2 ~ g2@2 g2@2 [d2,g2]@2 g2@2 [d2,g2]@2]/2", // Em G5
  H: "[[d2,g2]@2 [e2,a2]@2 [e2,b2]@2 ~ b2@2 b2@2 [e2,b2]@2 b2@2 [e2,b2]@2 [e2,b2]@2 [e2,a2]@2 [e2,a2]@2 ~ a2@2 a2@2 [e2,a2]@2 a2@2]/2", // G5 A5 E5 A5
  I: "[[e2,a2]@2 [e2,a2]@2 [e2,g2]@2 [d2,g2]@2 g2@2 ~ g2@2 [d2,g2]@2 g2@2 [d2,g2]@2 [d2,g2]@2 [d2,g2]@2 [d2,g2]@2 g2@2 ~ g2@2 [d2,g2]@2]/2", // A5 Em G5
  J: "[g2@2 [d2,g2]@2 [d2,g2]@2 [d2,g2]@2 d2@31 ~@9]/3", K: "[~@6 d2@2 d2@2 d2@2 d2@31 ~@5]/3", L: "~@12 a2@3 ~",
  M: "b2!8", N: "a2!8", O: "f#2!8", P: "g2!7 a2", Q: "g2!8", R: "d2@5 ~ d2@5 ~ d2@2 d2@2", S: "a1@5 ~ a1@5 ~ a1@2 a1@2",
  T: "g1@5 ~ g1@5 ~ g1@2 g1@2", U: "[d2@59 ~@5]/4", V: "a3@5 ~ a3@8 ~@2", W: "a3@5 ~ a3@5 ~ a3@3 ~",
  X: "b3@5 ~ b3@8 ~@2", Y: "g3@5 ~ g3@5 ~ g3@3 ~", Z: "g3@5 ~ g3@5 ~ f#3@3 ~", AA: "d3@5 ~ e3@5 ~ f#3@3 ~",
  AB: "g3@5 ~ f#3@5 ~ e3@3 ~", AC: "b2@7 ~", AD: "a2@5 ~ a2@5 ~ a2@3 ~", AE: "a3@5 ~ g3@5 ~ f#3@3 ~",
  AF: "d3@5 ~ e3@5 ~ d3@3 ~", AG: "g2@5 ~ g2@8 ~@2", AH: "g2@5 ~ g2@5 ~ g2@3 ~",
  AI: "[d2,g2]@5 ~ [d2,g2]@5 ~ [d2,g2]@3 ~", AJ: "c2!8", AK: "a2!6 a2@2", AL: "[a2@61 ~@3]/4",
})).s("gm_electric_bass_pick").gain(0.24)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A B C ~ D E F G H I J K L M N O P Q B C ~ R E F G H I J K L ~@25 B J@3 S J@3 T J@3 U J U V W U@3 X Y U@2 Z U@15 V
  AA U@2 J@2 S J@2 U AB J@2 U AC J@2 V W U AD AE AF L@7 ~ L@3 AG L@17 U V AA U J@2 S J@2 U AB J@2 U AC J@2 V W U@2 ~@4
>`.pickRestart({
  A: "~@3 x!2 ~@8 x ~@2", B: "~@7 x", C: "~@15 x", D: "x!2 ~@6", E: "~ x ~@14", F: "~ x ~@6", G: "~@3 x ~@12",
  H: "~ x ~@2", I: "~@5 x ~@10", J: "~@3 x ~@4", K: "~@7 x ~@8", L: "~ x", M: "~@9 x ~@6", N: "~@5 x ~@2",
  O: "~@11 x ~@4", P: "~@3 x", Q: "~@13 x ~@2", R: "x", S: "~@6 x ~@4 x!4 ~", T: "x ~@5 x ~@5 x ~ x!2",
  U: "~@3 x ~@2 x ~", V: "x ~@2 x ~@2 x ~", W: "x!2 ~ x!2 ~ x ~", X: "~@6 x ~@5 x ~ x!2", Y: "~@3 x ~@2 x!2",
  Z: "~@6 x ~@3 x!6", AA: "x!8", AB: "x ~@2 x!2 ~ x ~", AC: "~@6 x ~ x ~@5 x!2", AD: "~@2 x ~@5 x!2 ~@2 x!3 ~",
  AE: "~@3 x ~ x ~@2", AF: "~@6 x ~ x ~ x!3 ~ x ~", AG: "~@8 x ~@5 x!2",
})).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct("<~@76 [~@9 x!2 ~@5]!7 ~@87 [~@9 x!2 ~@5]!2 ~@4>").gain(0.24)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4
  [~@5 x ~@3 x ~@3 x ~@2]
  [~ x ~ x ~ x ~ x]
  [~@3 x ~@3 x ~@3 x ~@3 x]
  [~ x!3]
  [x ~@4 x ~@10]
  ~@167
>`).gain(0.24)

// drums · crash
const crash = s("cr").struct(`<
  ~@57 A@4 ~@3 A ~@3 A ~@2 A@2 ~ A ~ A ~@22 A@6 ~ A@3 ~ A@8 B ~@32 C D A@4 ~ A@3 ~ A@9 ~ A ~@3
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~@3 x ~@2 x ~", D: "x ~@2 x ~@2 x ~",
})).gain(0.24)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@8 A B C D E F G H I J K C L M N O D E J K P Q R B C S T@3 U T@3 V T@3 W T@3 X T@3 Y T@2 Z AA AB AC AD T@41 AD T@26
  AE T@7 AF T@3 AE T@3 AE T@3 AE T@4 AD T@16 AG AH ~@3
>`.pickRestart({
  A: "~@9 x ~@3 x ~@2", B: "~ x ~@4 x ~@3 x ~@3 x ~", C: "~@2 x ~@4 x ~@3 x ~@3 x", D: "~@3 x ~@3 x ~@4 x ~@3",
  E: "x ~@3 x ~@3 x ~@4 x ~@2", F: "~ x ~@3 x ~@3 x ~@4 x ~", G: "~@2 x ~@3 x ~@3 x ~@4 x", H: "~@3 x ~@3 x ~@3 x ~@4",
  I: "x!4", J: "~ x ~@3 x ~@3 x ~@3 x ~@2", K: "~ x ~ x ~ x ~ x", L: "~@3 x ~@4 x ~@3 x ~@3",
  M: "x ~@3 x ~@4 x ~@3 x ~@2", N: "~ x ~@3 x ~@4 x ~@3 x ~", O: "~@2 x ~@3 x ~@4 x ~@3 x",
  P: "~@3 x ~@3 x ~@3 x ~@3 x", Q: "~ x!3", R: "x ~@4 x ~@3 x ~@3 x ~@2", S: "~@3 x ~@4 x ~@7", T: "x!8",
  U: "x ~ x ~ x ~ x!3 ~ x ~ x!4", V: "x ~ x!3 ~ x ~ x!3 ~ x!4", W: "x ~ x ~ x ~ x ~ x ~ x!6", X: "x!5 ~ x!5 ~ x ~ x ~",
  Y: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x!2", Z: "x ~ x!3 ~ x ~ x!3 ~ x ~ x ~", AA: "x ~ x ~ x ~ x ~ x ~ x!5 ~",
  AB: "x ~ x ~ x ~ x!3 ~ x ~ x!3 ~", AC: "x!3 ~ x ~ x!3 ~ x ~ x!3 ~", AD: "x ~ x!6", AE: "x!6 ~@2", AF: "x!3 ~ x!2 ~@2",
  AG: "x!7 ~", AH: "x",
})).gain(0.24)

stack(fretless_bass, overdriven_guitar, electric_guitar_clean, bass, kick, snare, low_tom, hihat, crash, ride_bell)

More by Harvey Danger