Strudelify

I Know There's an Answer

The Beach Boys

KeyC majorTempo110 bpm
0:00/0:00
// I Know There's an Answer — The Beach Boys
// 110 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 3 "Piano" named as a piano, played on piano (its percussive organ patch is not one); ch 7 "Guitar" named as a guitar, played on electric guitar clean (its piano patch is not one)
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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 · electric bass finger · "Bass"
const bass = note(`<
  A B C D E F A F A D G H C I J C K B L M K I L M N O P Q R S E T C U V F C F E J K F A E W O N X Y@2 C Z C AA AB AC C F
  J D C F C I E F K E K AC J K AD AE W AF AG Y A T C Z AH I J D K B A AC K B AI
>`.pickRestart({
  A: "c3@2 c2 ~ c2!3 ~ g2 a2 c3 ~ a2 g2 e2 d2", B: "g3@2 g2 ~ g2!3 ~ d3 e3 g3 ~ e3 d3 b2 a2",
  C: "~ c2 c2@2 ~ c2 c2@2 ~ c2!3 ~@3 c2", D: "g2 ~ g2 ~@2 g2 g2@2 ~ g2!2 ~ g2!3 d2",
  E: "c2 ~ c2 ~@2 c2 c2@2 ~ c2!2 ~ c2!3 g1", F: "g3@2 g2 ~ g2!2 g2@2 ~ g2 g2@2 ~ g2 d2 ~",
  G: "c3@2 c2 ~ c2!2 c2@2 ~ c2 c2@2 ~ c2 c2@2", H: "c3@2 c2 ~ c2!2 c2@3 c2 c2@2 ~ g1 c2 ~",
  I: "g2@2 g2 ~@3 g2@2 ~ g2 g2@2 ~ g2!2 ~", J: "c2@2 c2 ~@3 c2@2 ~ c2 c2@2 ~ c2!2 ~",
  K: "c3@2 c2 ~ c2!2 c2@2 ~ c2 c2@2 ~ c2 g1 ~", L: "c2@2 c2 ~@2 c2 c2@2 ~@2 c2@2 ~ c2!2 g1",
  M: "c2 ~ c2 ~@2 c2 c2@2 ~@2 c2 ~ g1@2 c2 g1", N: "d#2 ~ d#2 ~@2 d#2 d#2@2 ~ d#2!2 ~ d#2!3 a#1",
  O: "a#1 ~ a#1 ~@2 a#1 a#1@2 ~ a#1!2 ~ a#1!3 f1", P: "d#3@2 d#2 ~ d#2!3 ~ a#2 c3 d#3 ~ c3 a#2 g2 f2",
  Q: "a#2@2 a#1 ~ a#1!2 a#1@2 c2@2 g1 ~ c2 g1 c2 ~", R: "f2@2 f2 ~ f2!2 f2@2 ~ f2 f2@3 [c3,f3] [c2,a2] ~",
  S: "f2 ~ f2@2 ~ f2 f2@3 f2 f2@2 ~@2 f2 c2", T: "a1 ~ a1 ~@2 a1 a1@2 ~ a1!2 ~ a1!3 e1",
  U: "a2@2 a1 ~ a1!2 a1@2 ~ a1 a1@2 ~ a1 e1 ~", V: "d3@2 d2 ~ d2!3 ~ a2 b2 d3 ~ b2 a2 f2 e2",
  W: "d#3@2 d#2 ~ d#2!2 d#2@2 ~ d#2 d#2@2 ~ d#2 a#1 ~", X: "a#1 ~ a#1 ~ a#1 ~@2 f2 c3!2 g2 c2 ~@2 c3 ~",
  Y: "f3@2 f2 ~ f2!2 f2@2 ~ f2 f2@2 ~ f2 c2 ~", Z: "a2@2 a1 ~ a1!3 ~ e2 f2 a2 ~ f2 e2 c2 b1",
  AA: "a1@2 a1 ~@3 a1@2 ~ a1 a1@2 ~ a1!2 ~", AB: "d2@2 d2 ~@3 d2@2 ~ d2 d2@2 ~ d2!2 ~",
  AC: "~ g2 g2@2 ~ g2 g2@2 ~ g2!3 ~@3 g2", AD: "~ d#2 d#2@2 ~ d#2 d#2@2 ~ d#2!3 ~@3 d#2",
  AE: "~ a#1 a#1@2 ~ a#1 a#1@2 ~ a#1!3 ~@3 a#1", AF: "a#1 ~ a#1 ~ a#1 ~@2 f2 ~@2 c2@3 c2 c2@2",
  AG: "~ f2 f2@2 ~ f2 f2@2 ~ f2!3 ~@3 f2", AH: "d3@2 d2 ~ d2!2 d2@2 ~ d2 d2@2 ~ d2 a1 ~", AI: "g2 ~@15",
})).s("gm_electric_bass_finger").gain(0.28)

// bass · electric bass finger · "Bass" · soft notes
const bass_soft = note(`<
  ~@2 A ~@9 A B C A ~@2 D@2 ~ B D@2 ~@5 E ~@2 A ~@3 A ~@2 C ~@7 F ~@2 A ~ A G H I A ~ C ~ A ~ A B ~@5 I C ~ J K ~ L M
  ~@3 A ~@2 B C ~@4 I ~@3
>`.pickRestart({
  A: "~@13 c2!2 ~", B: "~@5 g2 ~@10", C: "~@5 c2 ~@10", D: "~@9 c2 ~@6", E: "~@13 f2 ~@2", F: "~@6 d2 ~@6 g2 ~@2",
  G: "~@5 a1 ~@10", H: "~@5 d2 ~@10", I: "~@13 g2!2 ~", J: "~@13 d#2!2 ~", K: "~@13 a#1!2 ~", L: "~@6 d2 ~@2 c2 ~@6",
  M: "~@13 f2!2 ~",
})).s("gm_electric_bass_finger").gain(0.16)

// chords · piano
const piano = note(`<
  ~@4 A B C D A E F@2 G B C H G I J K A B J K L M N O P Q G R H S T U C B V C A I A C W X Y Z AA U A AB G AC T AD ~@8 A
  I C G A AE H G W AF AG AH U@2 C AB V AI AJ T ~@9
>`.pickRestart({
  A: "[g4,c5]@3 c4, e5", B: "~@12 b4@3 ~, [d5,g5,b5]@15 ~", C: "~@4 [c5,e5,g5]@6 g4 [c5,e5] ~ g4 [c5,e5,g5] ~",
  D: "[b4,d5]@3 d4, g5", E: "~@4 [d5,g5,b5]@6 b4 [d5,g5] ~ b4 [d5,g5,b5] ~",
  F: "[~@2 [g4,e5]@2 ~ [g4,c5,e5] [g4,c5,e5]@17 c4 [g4,c5,e5] [c5,e5]!2 [g4,c5,d5] ~ [g4,c5]!2 ~, ~@2 c5 ~@29]/2", // C Gsus4 C5
  G: "[c5,e5]@9 c5 ~ [c5,e5] ~ g4 [c5,e5] ~, c4@13 ~@3", // C
  H: "[e5,g5]@2 [c5,f5] ~@6 [g4,c5] c5@3 c5 [g4,c5] ~, [c5,c6] ~@15", // Em F5 C5 C
  I: "[b4,d5]@10 ~@3 d5!2 ~, g5@15 ~, ~@10 d4@5 ~, ~@11 b4@4 ~", J: "[e5,g5]",
  K: "~ [c5,e5] ~ e5 ~@2 [c5,e5]@5 ~ c5 e5 g5 c5, ~@11 g4@2 ~@3", // C
  L: "[d#5,g5]@2 [a#4,f5] ~@6 [g4,a#4] a#4@3 a#4 [g4,a#4] ~, [a#4,a#5] ~@15", // D# A#5 Gm A#
  M: "[a#4,d5]@9 a#4 ~ [a#4,d5] ~ f4 [a#4,d5] ~, a#3@13 ~@3", // A#
  N: "[a#4,d#5]@9 a#4 ~ [a#4,d#5] ~ g4 [a#4,d#5] ~, a#3@13 ~@3", // D#5
  O: "[a#4,d5]@5 ~ d5 ~ [c5,e5]@5 ~ e5 ~, f5@7 ~ g5@7 ~, ~@5 a#4@2 ~@6 c5@2 ~", P: "f5@11 a4 [c5,a5]@2 [c5,f5]@2, c4",
  Q: "~ f5!2 [c5,f5] ~ c5 [c5,f5]@5 ~ [c5,a5]@2 f5 ~", R: "[a4,c5]@9 a4 ~ [a4,c5] ~ e4 [a4,c5] ~, a3@13 ~@3",
  S: "~@12 e4@3 ~, [a4,c5,e5]@15 ~", T: "[a4,c5]@10 ~@3 c5 d5 ~, f5@15 ~, ~@10 d4@5 ~, ~@11 a4@4 ~",
  U: "~@12 a4@3 ~, [c5,f5,a5]@15 ~", V: "[g4,c5]@10 ~@3 c5!2 ~, e5@15 ~, ~@10 c4@5 ~, ~@11 g4@4 ~",
  W: "[g4,a#4]@3 a#3, d#5", X: "[f4,a#4]@3 a#3, d5", Y: "~@4 [a#4,d#5,g5]@6 g4 [a#4,d#5] ~ g4 [a#4,d#5,g5] ~",
  Z: "[f4,d5]@6 [f4,a#4,d5] ~ [g4,e5]@6 [g4,c5,e5] ~", AA: "[a4,c5]@3 c4, f5", AB: "[e4,a4]@3 a3, c5",
  AC: "[e4,a4]@10 ~@3 a4!2 ~, c5@15 ~, ~@10 a3@5 ~, ~@11 e4@4 ~", // A5
  AD: "[f5,a5]@2 [d5,g5] ~@6 [a4,c5] c5@3 c5 [a4,c5] ~, [c5,d6] ~@15", // F G5 Am Csus2
  AE: "[d5,g5]@9 d5 ~ [d5,g5] ~ b4 [d5,g5] ~, d4@13 ~@3", AF: "~@12 f4@3 ~, [a#4,d5,f5]@15 ~",
  AG: "~@12 g4@3 ~, [a#4,d#5,g5]@15 ~", AH: "[f4,d5]@6 [d#4,f4,g4] ~ [g4,e5]@6 [g4,c5,e5] ~",
  AI: "[c5,e5]@2 [a4,d5] ~@6 [e4,a4] a4@3 a4 [e4,a4] ~, [a4,a5] ~@15", // C D5 A5 A
  AJ: "[c5,f5]@9 c5 ~ [c5,f5] ~ a4 [c5,f5] ~, d4@13 ~@3", // F5
})).s("gm_piano").gain(0.16)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@5 A B ~@2 C D E F A B G F ~ H I ~ A H I J K L ~ M N F O G P ~ Q B A ~ B ~@3 B ~@2 R S ~ Q ~@2 F ~@2 T ~@10 B F ~ U G
  F ~ V@2 W Q@2 B ~@2 X Y ~@10
>`.pickRestart({
  A: "d6@15 ~", B: "~@3 c4 ~@12", C: "~@3 d4 ~@12", D: "~@4 [g4,c5,e5] ~@11", E: "~@9 g4!2 ~@5", F: "~@9 e5 ~@6",
  G: "~@2 d5 f4 ~@6 g4@3 g4 ~@2", H: "c5", I: "~@3 c5 ~ c5 ~@10", J: "~@2 c5 f4 ~@6 g4@3 g4 ~@2", K: "~@9 d5 ~@6",
  L: "~@9 d#5 ~@6", M: "c5@11 ~@5", N: "~ c5!2 ~@8 a4 ~@2 c5 ~, c4@15 ~", O: "~@9 c5 ~@6", P: "a5@15 ~", Q: "c6@15 ~",
  R: "~@3 a#3 ~@12", S: "a#4@3 ~ c5@3 ~", T: "~@2 e5 g4 ~@6 a4@3 a4 ~@2", U: "~@9 g5 ~@6", V: "a#5@15 ~",
  W: "a#4@5 a4 ~@2 c5@6 ~@2", X: "~@2 b4 d4 ~@6 e4@3 e4 ~@2", Y: "~@9 f5 ~@6",
})).s("gm_piano").gain(0.06)

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  ~@4 A B C B D B E F D G A D A B H I A G H J K L K M N O A P A P Q R D B C D A B C D S T S U V@2 C P A W X Y ~@8 C B D
  A@2 B A@2 S Z AA AB AC@2 A P D P X Y ~@9
>`.pickRestart({
  A: "e4 ~ e4 ~@3 [c4,e4] ~@2 c3 e4 ~@2 c3 ~ [c4,e4]", B: "~@2 [d4,g4] ~@2 g2 [d4,g4] ~@3 [d4,g4] ~@2 b3 d4 [d4,g4]",
  C: "~@2 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@2 c3 [g3,c4,e4] ~", // C
  D: "~@2 [c4,e4] ~@2 c3 [c4,e4] ~@3 [c4,e4] ~@2 g3 c4 [c4,e4]", // C
  E: "~@2 [g3,c4,e4] ~@3 [g3,c4,e4,g4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4,g4] ~", // C
  F: "~@2 [g3,c4,e4] ~@2 g3 [g3,c4,e4] ~@3 e4 [c4,g4] ~ g3 ~ [c4,g4]", // C C5
  G: "~@2 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3 [g3,b3,d4] ~@2 g2 [g3,b3,d4] ~", // G
  H: "~@2 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~", // C
  I: "~ c3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~ c4 e4 g4 c5", // C
  J: "~@2 [g3,c4,e4] ~@2 c3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4]!2", // C
  K: "~@2 [g3,a#3,d#4] ~@3 [g3,a#3,d#4] ~@3 [g3,a#3,d#4] ~@2 d#3 [g3,a#3,d#4] ~", // D#
  L: "~@2 [a#3,d4,f4] ~@3 [a#3,d4,f4] ~@3 [a#3,d4,f4] ~@2 a#2 [a#3,d4,f4] ~", // A#
  M: "~ [f3,a#3,d4] [f3,a#3,d4]@2 ~ a#3 d4 f4 ~ [g3,c4,e4] [g3,c4,e4]@2 ~ c4 e4 g4", // A# C
  N: "~@2 [a3,c4,f4] ~@2 f2 [a3,f4,a4] ~@2 f2 [c4,f4] ~@2 a3 c4 [c4,f4]", // F Dm F5
  O: "~@2 [a3,c4,f4] ~@2 a3 [c4,f4,a4] ~@2 a3 [c4,f4] ~@3 [a3,c4,f4] ~", // F F5 F
  P: "c4 ~ c4 ~@3 [a3,c4] ~@2 a2 c4 ~@2 a2 ~ [a3,c4]", Q: "f4 ~ f4 ~@3 [c4,f4] ~@2 d3 f4 ~@2 d3 ~ [c4,f4]",
  R: "~@2 [c4,d4,f4,a4] ~@3 [c4,d4,f4,a4] ~@3 [c4,d4,f4,a4] ~@2 g2 [c4,d4,f4,a4] ~", // Dm7
  S: "~@2 [a#3,d#4] ~@2 d#2 [a#3,d#4] ~@3 [a#3,d#4] ~@2 g3 a#3 [a#3,d#4]", // D#5
  T: "~@2 [f3,a#3,d4] ~@3 [f3,a#3,d4] ~@3 [f3,a#3,d4] ~@2 a#2 [f3,a#3,d4] ~", // A#
  U: "~@2 [a#3,d4,f4] ~@3 [a#3,d4,f4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~", // A# C
  V: "f4 ~ f4 ~@3 [c4,f4] ~@2 f2 f4 ~@2 f2 ~ [c4,f4]", W: "~@2 [a3,c4] ~@2 a2 [a3,c4] ~@3 [a3,c4] ~@2 e3 a3 [a3,c4]",
  X: "~@2 [c4,f4] ~@2 d3 [c4,f4] ~@3 [c4,f4] ~@2 a3 c4 [c4,f4]", // F5
  Y: "~@2 [c4,f4] ~@2 g2 [c4,f4] ~@3 [c4,f4] ~@2 a3 c4 [c4,f4]", // F5
  Z: "d4 ~ d4 ~@3 [a#3,d4] ~@2 a#2 d4 ~@2 a#2 ~ [a#3,d4]", // A#
  AA: "d#4 ~ d#4 ~@3 [a#3,d#4] ~@2 d#2 d#4 ~@2 d#2 ~ [a#3,d#4]", // D#5
  AB: "~ [a#3,d4,f4] [a#3,d4,f4]@2 ~ [a#3,d4,f4]!2 ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~", // A# C
  AC: "~@2 [c4,f4] ~@2 f2 [c4,f4] ~@3 [c4,f4] ~@2 a3 c4 [c4,f4]", // F5
})).s("gm_electric_guitar_clean").gain(0.2)

// chords · electric guitar clean · "Guitar" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@4 A ~@6 B ~@2 A ~ A ~@3 A ~ C D ~@4 E ~ A F A F A ~@5 A ~@7 A@2 ~ F A ~@14 A@2 ~ A@2 ~ G@2 ~@3 A F ~ F ~@11
>`.pickRestart({
  A: "c4 ~ c4 ~@7 c4 ~@3 c4 ~", B: "~@6 g4 ~@2 g3 c4 ~@3 [c4,e4] ~", C: "~@5 c3 ~@10", D: "~@13 c3 ~@2",
  E: "~@6 c4 ~@9", F: "a3 ~ a3 ~@7 a3 ~@3 a3 ~", G: "a#3 ~ a#3 ~@7 a#3 ~@3 a#3 ~",
})).s("gm_electric_guitar_clean").gain(0.12)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@7 A ~@7 A ~@48 A ~@18 B ~@3 A ~@3 A ~>".pickRestart({
  A: "~@7 x", B: "~@13 x ~@2",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct(`<
  A@3 B A@3 C A@3 D A@3 C A E A D A@2 F G A@5 B A@2 H A@2 I J A K A@2 F L A G F A F A B A F A M A J A@2 F B A@2 N I C
  A@2 E G A O A@2 F A@2 G B A@4 K P A@3 C A@3 C ~
>`.pickRestart({
  A: "x!16", B: "x!14 ~@2", C: "x!9 ~@7", D: "x!15 ~", E: "x!3 ~ x!12", F: "x!9 ~ x!6", G: "x!8 ~@2 x ~@3 x!2",
  H: "x!7 ~ x!3 ~ x!4", I: "x!10 ~@3 x!3", J: "x!4 ~@4 x ~ x ~ x!2 ~@2", K: "x!7 ~ x!8", L: "x!7 ~ x ~ x!6",
  M: "x!2 ~@2 x!10 ~@2", N: "x!11 ~ x!4", O: "x!3 ~ x!5 ~ x!6", P: "x!7 ~@8 x",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 A ~@7 A ~@43 B ~@4 A ~@12 B ~@5 C ~@3 A ~@3 A ~>".pickRestart({
  A: "~@3 x", B: "~@14 x!2", C: "~@11 x!2 ~@3",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~@7 B ~@5 C ~@4 D E ~@5 A ~@2 F ~@2 G A ~@4 D@2 ~ E D ~ D ~ A ~@3 H ~ A ~@2 D ~@3 F G ~@3 C E ~ C ~@2 D ~@2 E
  ~@6 A ~@9
>`.pickRestart({
  A: "~@7 x", B: "~@15 x", C: "~@3 x ~@12", D: "~@9 x ~@6", E: "~@2 x!2", F: "~@11 x ~@4", G: "~@5 x ~@2", H: "~ x ~@6",
})).gain(0.32)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@23 A ~@20 A ~@23 A ~@7 A ~@16>".pickRestart({
  A: "~@11 x ~@4",
})).gain(0.2)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@3 A ~@3 B ~@7 B ~@13 A ~@5 C ~@13 A ~@9 D ~@3 C B ~@5 E ~@6 D ~@5 F ~@3 B ~@3 B ~
>`.pickRestart({
  A: "~ x ~@3 x ~ x!4 ~@5", B: "~ x ~@5 x ~ x!3 ~@4", C: "~@14 x!2", D: "~@9 x!4 ~@3", E: "~@9 x ~@6",
  F: "~@7 x!4 ~@3 x ~",
})).gain(0.32)

// drums · crash
const crash = s("cr").struct(`<
  A ~@3 A ~@3 A ~@7 A ~@7 A ~@5 A ~@6 A ~@12 A ~@5 A ~@3 A ~@4 A ~@12 A ~@5 A ~@3 A ~@3 A
>`.pickRestart({
  A: "x",
})).gain(0.32)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A B C A D@4 A B C B C B A D@14 A@2 B C B A@3 D@12 A@2 B C B A@2 D E D A@2 B C A D@5 E D@7 A@2 B A B C A D@3 E A B A E
  ~
>`.pickRestart({
  A: "x!8", B: "x ~ x!9 ~ x!4", C: "x ~ x!3 ~ x!10", D: "~ x ~ x ~ x ~ x", E: "~@2 x ~@3 x ~@3 x ~@3 x!2",
})).gain(0.24)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
// … 9 more lines

More by The Beach Boys