Strudelify

How Can I Be Sure

The Rascals

KeyD majorTempo87 bpm
0:00/0:00
// How Can I Be Sure — The Rascals
// 87 bpm, 6/8, 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: pitch bends are ignored
// note: Full arrangement: all 78 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(87/3)

// 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 · piano
const piano = note(`<
  A@3 B@4 C@4 D@4 E@5 F@5 G H D@4 E@5 I@7 G A@2 B@2 J@3 D@4 K@4 L M L N@5 G A@2 B@2 O@2 P Q@2 R
>`.pickRestart({
  A: "[a4,d5,a5]!6", // D5
  B: "[~@4 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 a4 a4@3 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4, [c4,e4]@2 ~, [a4,d5,a5] ~@5 [d4,f#4]@2 ~@4, ~ g4@32 ~@15, ~@6 [d5,a5] ~@5]/2", // D5 C D5 D D5
  C: "[[a4,d5,a5]!6 [a4,d5,a5]!6 [a4,d5,a5]!5 a4 [d4,f4,a4]!6, [c4,f4]@2 ~ [b3,d4,e4]@2 c4@2 ~@10 [d5,a5]@2 ~@5, ~ [d4,f#4]@2 ~]/4", // D5 Dm F5 E7 D5 D
  D: "[[d4,f4,a4]!5 ~ [g4,b4,d5]!2 ~ [a4,c#5,e5]!2 ~ [g4,b4,d5]!2 ~ [a4,c#5,e5]!2 a4 [d4,f4,a4]!6, ~@5 [d4,f4,a4]@2 ~ [g4,b4,d5]@2 ~ [a4,c#5,e5]@2 ~ [g4,b4,d5]@2 ~ [c#5,e5]@2 ~@5]/4", // Dm G A G A Dm G A …
  E: "[[d4,f4,a4]!5 ~ [g4,b4,d5]!2 ~ [a4,c#5,e5]!2 ~ [g4,b4,d5]!2 ~ [a4,c#5,e5]!2 [a4,c#5] [f#4,a4,c#5]!2 a4 [a4,d5,f#5]!2 ~ [e4,g4,b4]!2 ~ [a4,c#5,e5]!3, ~@5 [d4,f4,a4]@2 ~ [g4,b4,d5]@2 ~ [a4,c#5,e5]@2 ~ [g4,b4,d5]@2 ~ e5@2 ~ [f#4,c#5]@2 ~ [a4,d5,f#5]@2 ~ [e4,g4,b4]@2 ~@2]/5", // Dm G A G A F#m D Em …
  F: "[[f#4,a4,c#5]@2 [f#4,a4,c#5]@2 a4@2 [a4,d5,f#5]@2 [a4,d5,f#5]@2 ~@2 [e4,g4,b4]@2 [e4,g4,b4]@2 ~@2 [a4,c#5,e5]@2 [a4,c#5,e5]@2 a4@2 [f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4]@2 [d4,f4,a4]@2 [d4,f4,a4]@2 ~@2 [a#4,d5,f5]@2 [a#4,d5,f5]@2 ~@2 [c5,e5,g5]@2 [c5,e5,g5]@2 ~@2 [d4,f#4,a4]@3 [d5,f#5,a6]!2 ~ [d5,f#5,a6]@3 [d5,a5,f#6]!2 ~, ~@2 [f#4,c#5]@2 ~ [a4,d5,f#5]@2 ~ [e4,g4,b4]@2 ~ [c#5,e5]@2 ~ c5@2 ~ [d4,f4,a4]@2 ~ [a#4,d5,f5]@2 ~ [c5,e5,g5]@2 ~@5]/5", // F#m D Em A F Dm A# C …
  G: "[d5,a5,f#6]@3 [d4,f#4,a4]!2 ~ [d4,f#4,a4]@4 ~@2", H: "[d4,f4,a4]!6",
  I: "[[f#4,a4,c#5]@2 [f#4,a4,c#5]@2 a4@2 [a4,d5,f#5]@2 [a4,d5,f#5]@2 ~@2 [e4,g4,b4]@2 [e4,g4,b4]@2 ~@2 [a4,c#5,e5]@2 [a4,c#5,e5]@2 a4@2 [f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4]@2 [d4,f4,a4]@2 [d4,f4,a4]@2 ~@2 [a#4,d5,f5]@2 [a#4,d5,f5]@2 ~@2 [c5,e5,g5]@2 [c5,e5,g5]@2 c5@2 [f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4]@2 [d4,f4,a4]@2 [d4,f4,a4]@2 ~@2 [a#4,d5,f5]@2 [a#4,d5,f5]@2 ~@2 [c5,e5,g5]@2 [c5,e5,g5]@2 ~@2 [d4,f#4,a4]@3 [d5,f#5,a6]!2 ~ [d5,f#5,a6]@3 [d5,a5,f#6]!2 ~, ~@2 [f#4,c#5]@2 ~ [a4,d5,f#5]@2 ~ [e4,g4,b4]@2 ~ [c#5,e5]@2 ~ c5@2 ~ [d4,f4,a4]@2 ~ [a#4,d5,f5]@2 ~ [e5,g5]@2 ~ c5@2 ~ [d4,f4,a4]@2 ~ [a#4,d5,f5]@2 ~ [c5,e5,g5]@2 ~@5]/7", // F#m D Em A F Dm A# C …
  J: "[~@4 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 a4 a4@3 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 a4@4 [d4,f4,a4]@4 [d4,f4,a4]@4 [d4,f4,a4]@4 [d4,f4,a4]@4 [d4,f4,a4]@4 [d4,f4,a4]@4, [c4,e4]@4 ~@5, [a4,d5,a5] ~@5 [d4,f#4]@2 ~@10, ~ g4@32 ~@39, ~@6 [d5,a5] ~@4 [d5,a5]@2 ~@5]/3", // D5 Dm C D5 D D5
  K: "[[d4,f4,a4]@2 [d4,f4,a4]@2 [d4,f4,a4]@2 [d4,f4,a4]@2 [d4,f4,a4]@2 ~@2 [g4,b4,d5]@2 [g4,b4,d5]@2 ~@2 [a4,c#5,e5]@2 [a4,c#5,e5]@2 ~@2 [g4,b4,d5]@2 [g4,b4,d5]@2 ~@2 [a4,c#5,e5]@2 [a4,c#5,e5]@2 ~@2 f#5 a5 c#6 a5 c#6 a5 d6 a5 f#5 a5 d6 a5, ~@5 [d4,f4,a4]@2 ~ [g4,b4,d5]@2 ~ [a4,c#5,e5]@2 ~ [g4,b4,d5]@2 ~ [a4,c#5,e5]@2 ~@5]/4", // Dm G A G A Dm G A …
  L: "e5 g5 b5 g5 b5 g5 a5 e5 c#5 e5 a5 e5", M: "f#5 a5 c#6 a5 c#6 a5 d6 a5 f#5 a5 d6 a5",
  N: "[[f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4]@2 [d4,f4,a4]@2 [d4,f4,a4]@2 ~@2 [a#4,d5,f5]@2 [a#4,d5,f5]@2 ~@2 [c5,e5,g5]@2 [c5,e5,g5]@2 c5@2 [f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4]@2 [d4,f4,a4]@2 [d4,f4,a4]@2 ~@2 [a#4,d5,f5]@2 [a#4,d5,f5]@2 ~@2 [c5,e5,g5]@2 [c5,e5,g5]@2 ~@2 [d4,f#4,a4]@3 [d5,f#5,a6]!2 ~ [d5,f#5,a6]@3 [d5,a5,f#6]!2 ~, ~@2 c5@2 ~ [d4,f4,a4]@2 ~ [a#4,d5,f5]@2 ~ [e5,g5]@2 ~ c5@2 ~ [d4,f4,a4]@2 ~ [a#4,d5,f5]@2 ~ [c5,e5,g5]@2 ~@5]/5", // F Dm A# C F Dm A# C …
  O: "[[a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 a4 a4@3 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4 [a4,d5,a5]@4, [c4,f4]@2 ~ [b3,d4,e4]@2 c4@2 ~@5, ~@3 [d4,f#4] ~@2, ~@6 [d5,a5] ~@5]/2", // D5 F5 E7 D D5
  P: "[a4,d5,a5]@4 [a4,d5,a5]@5 [a4,d5,a5]@4 [a4,d5,a5]@5 ~ a4@5, [c4,f4]@9 ~@4 [b3,d4,e4]@11, ~@3 [d5,a5]", // D5 F5 E7 D5
  Q: "[[a4,d5,a5]@5 ~ a6 ~@2 a6 a5@2 a6 ~ a6 ~@2 a6 a5@2 a6 a5@2 a6 ~ a6 ~@2 a6 a5@2 a6 ~ a6 ~@2 a6 a5 ~ a6 a5 a6 ~ a5 a6 a5 ~ a6, c4@11 ~@37, ~@5 [d3,f#4,a4,d5]@32 ~@11, ~@5 a5@3 a5@2 ~@3 a5@3 a5@2 ~@6 a5@3 a5@2 ~@3 a5@3 a5@2 ~@11]/2", // D5 D
  R: "a5 a6 ~ a5 a6 a5 ~ a6 a5 a6 ~ a5 a6 a5 ~ a6 a5 a6 ~ a5 a6 ~@3",
})).s("gm_piano").gain(0.06).pan(0)

// chords · pizzicato strings · "strings1"
const pizzicato_strings = note("<~@3 A B A B C@2 ~@37 A B A B ~@28>".pickRestart({
  A: "[c3,e4] ~@5", B: "[d3,f#4] ~@5", C: "[[c4,c5]@2 ~ [b3,b4]@2 ~ [d4,a4]@2 ~@4, ~@5 [c4,g4]@2 ~@5]/2",
})).s("gm_pizzicato_strings").gain(0.14).pan(1)

// bass · acoustic bass · "bass"
const bass = note(`<
  ~@9 A B@8 C D E D F G H ~ B@8 I D I D F J F K H ~ L M L M L M N@8 I D I D F O F K H ~ P Q R Q S@2 T U@3
>`.pickRestart({
  A: "d3@4 d3@4 d3@4 d3@4 d3@3 ~ d1@3 ~, ~@19 a2@2 ~@3",
  B: "[d3@8 ~@4 c#3@8 ~@4 c3@8 ~@4 b2@8 ~@4 e2@8 ~@4 a2@8 ~@4 e2@8 ~@4 a2@8 ~@4 d3@8 ~@4 c#3@8 ~@4 c3@8 ~@4 b2@8 ~@4 e2@8 ~@4 a2@8 ~@4 e2@8 ~@4 a2@8 g2@3 ~, ~@11 d3@3 ~@9 c#3@3 ~@9 c3@3 ~@9 b2@3 ~@9 e2@3 ~@9 a2@3 ~@9 e2@3 ~@9 a2@3 ~@9 d3@3 ~@9 c#3@3 ~@9 c3@3 ~@9 b2@3 ~@9 e2@3 ~@9 a2@3 ~@9 e2@3 ~@10]/8",
  C: "f#2@2 ~ b2@2 f#2", D: "e2@8 ~@4 a2@8 g2@3 ~", E: "f#2@8 ~@4 b2@8 f#2@3 ~", F: "f2@8 ~@4 d2@8 d2@3 ~",
  G: "g2@8 ~@4 g2@3 ~ c3@3 ~ a#2@4", H: "d2@2 ~", I: "f#2@2 ~ b1@2 ~", J: "g2@2 ~ c2@2 ~", K: "g2@2 ~ c2 a#1 c2",
  L: "c2@2 ~ c2@2 c2", M: "d2",
  N: "[d3@11 ~ c#3@11 ~ c3@11 ~ b2@11 ~ e2@11 ~ a2@11 ~ e2@11 ~ a2@11 ~ d3@11 ~ c#3@11 ~ c3@11 ~ b2@11 ~ e2@11 ~ a2@11 ~ e2@11 ~ a2@8 g2@4, ~@11 d3@5 ~@7 c#3@5 ~@7 c3@5 ~@7 b2@5 ~@7 e2@5 ~@7 a2@5 ~@7 e2@5 ~@7 a2@5 ~@7 d3@5 ~@7 c#3@5 ~@7 c3@5 ~@7 b2@5 ~@7 e2@5 ~@7 a2@5 ~@7 e2@5 ~@8]/8",
  O: "g2@2 ~ c2 d2 e2", P: "c3", Q: "d3", R: "c3@4 ~ c3", S: "[f3@3 e3@2 ~ d3@6, ~@5 c3@2 ~@5]/2", T: "f3@13 e3@11",
  U: "[c2@5 d2@64 ~@3]/3",
})).s("gm_acoustic_bass").gain(0.32)

// chords · accordion · "accordian"
const accordion = note("<~@10 A B ~ C A D ~ C ~@8 A B ~ C A D ~ E ~@16 A B ~@2 A B ~@22>".pickRestart({
  A: "[d4,f4,a4] [c#4,f4,a4]", B: "[c4,f4,a4] [b3,f4,a4]", C: "e5@3 f#5 g5 e5 a5@3 b5 f#5 g5",
  D: "[c4,f4,a4] [f4,a4], ~@3 b3@2 ~", E: "e5@3 f#5 g5 e5 a5@2 ~ b5 a5 g5",
})).s("gm_accordion").gain(0.06).pan(0)

// chords · accordion · "accordian" · soft notes · F#m Bm Em A F#m Bm Em A
const accordion_soft = note(`<
  ~@58
  [[f#3,a3,c#4] [f#3,b3,d4]]
  [[g3,b3,e4] [e3,a3,c#4]]
  [[f#3,a3,c#4] [f#3,b3,d4]]
  [[g3,b3,e4] [e3,a3,c#4]]
  ~@16
>`).s("gm_accordion").gain(0.04).pan(0)

// chords · tremolo strings · "strings2"
const tremolo_strings = note(`<
  ~@10 A B C@2 A B C@2 ~@4 D E ~@2 A B C@2 A B C@2 F G F G D E D E ~@8 A B C@2 A B C@2 ~@4 D E D E ~@2 H@6 ~ I@3
>`.pickRestart({
  A: "d4 c#4", B: "c4 b3", C: "[g3,b3] [a3,c#4]", D: "[c3,c4] [d3,d4]", E: "[f3,f4] [e3,e4]", F: "[a4,f#5]",
  G: "[b4,e5] [c#5,e5]", H: "d6/2", I: "[~@5 [a4,d6]@64 ~@3]/3",
})).s("gm_tremolo_strings").gain(0.08).pan(1)

// other · pizzicato strings · "strings3"
const pizzicato_strings_2 = note("<~@10 A@2 ~@2 A@2 ~@10 A@2 ~@2 A@2 ~@18 A@2 ~@2 A@2 ~@22>".pickRestart({
  A: "a4!24",
})).s("gm_pizzicato_strings").gain(0.1).pan(1)

// other · pizzicato strings · "strings3" · soft notes
const pizzicato_strings_soft = note("<~@68 [a4!24]!6 ~@4>").s("gm_pizzicato_strings").gain(0.06).pan(1)

// chords · acoustic guitar steel · "guitar"
const acoustic_guitar_steel = note(`<
  ~@12 A@2 ~@2 B@2 C B C B D E F ~@3 A@2 ~@2 B@2 C B C B D E D E F ~@9 A@2 ~@2 A@2 ~@2 G B D E D E F ~@8 H@3
>`.pickRestart({
  A: "~ b3@11 ~ c#4@11, [e2,b2,e3,g3] [a2,e3,a3]", B: "[e2,b2,e3,g3,b3] [a2,e3,a3,c#4]",
  C: "[f#2,c#3,e3,a3,c#4] [b2,f#3,a3,d4]", D: "[f2,c3,f3,a3,c4] [d3,f3,a3,c4]", E: "[g2,d3,f3,a#3,d4] [c3,e3,g3,c4]",
  F: "[d3,f#3,a3,d4] ~", G: "~ [b2,f#3,a3,d4]", H: "[~@3 [a3,d4,f#4]@32 ~, ~@5 [d3,f#3]@64 ~@3]/3",
})).s("gm_acoustic_guitar_steel").gain(0.06).pan(0)

// chords · acoustic guitar steel · "guitar" · soft notes
const acoustic_guitar_steel_2 = note("<~@10 A@3 ~ A@3 ~@9 A@3 ~ A@3 ~@17 A@3 ~ A@3 ~ B C D ~@17>".pickRestart({
  A: "[~ [f4,a4,d5] ~@2 [f4,a4,d5] ~@2 [f4,a4,d5] ~@2 [f4,a4,d5] [f4,a4,d5]@2 ~@5, d4 c#4 c4 b3 ~@2, ~@2 [f4,a4,d5]@2 ~ [f4,a4,d5]@2 ~ [f4,a4,d5]@2 ~@8]/3", // Dm
  B: "[f#2,c#3,e3,a3,c#4] [b2,f#3,a3,d4]", C: "[e2,b2,e3,g3,b3] [a2,e3,a3,c#4]", D: "[f#2,c#3,e3,a3,c#4] ~",
})).s("gm_acoustic_guitar_steel").gain(0.04).pan(0)

// chords · french horn · "french horn1" · E5 C#m
const french_horn = note("<~@12 [b3 c#4]!2 [d4 c#4] [c4 b3] [[b3,e4] [c#4,e4]]!2 ~@60>")
  .s("gm_french_horn").gain(0.19).pan(1)

// other · french horn · "french horn2"
const french_horn_2 = note("<~@26 A B C ~ A B C ~@3 D@2 B ~@10 E F@2 ~@2 F@2 ~@4 G H B ~@9 I E J@4>".pickRestart({
  A: "d4 e4", B: "e4 f4", C: "g4 e4", D: "[~@3 f#4@2 ~ e4@2 ~ e4 d4 c#4, ~@5 d4@2 ~@5]/2", E: "f#4", F: "d3/2",
  G: "a3@3 b3 c#4@2 d4@3 e4 f#4@2", H: "e4@3 e4 d4 c#4", I: "c5@3 b4@2 g4",
  J: "[[f4,c5]@13 b4@11 g4@5 f#4@64 ~@3, ~@13 e4@16 ~@67]/4", // F5
})).s("gm_french_horn").gain(0.25).pan(0)

// other · muted trumpet · "mute trumpet"
const muted_trumpet = note("<~@35 [g4 a4 b4 c#5@2 e5] [a4@2 ~] ~@41>").s("gm_muted_trumpet").gain(0.06).pan(0)

// other · trumpet
const trumpet = note("<~@38 A B@3 ~@7 C D E ~ F D E ~@6 A B@3 ~@6 G H I@4>".pickRestart({
  A: "c5@3 d5 e5@2 f5@4 ~@2", B: "[a#4@3 g5@2 ~ c5@3 a5@2 ~ d5@3 g5 e5 c5, ~@5 e5@2 ~@4 f5@2 ~@5]/3",
  C: "a4@8 ~@2 [d4,d5] [c4,c5]", D: "[d4,d5] [c#4,c#5]", E: "[c4,c5] [b3,b4]", F: "~@10 [d4,d5] [c4,c5]",
  G: "f4@3 e4@2 c4", H: "d4", I: "[[f4,a4]@13 e4@11 c4@5 [d4,a4]@64 ~@3, ~@13 g4@16 ~@67]/4",
})).s("gm_trumpet").gain(0.19).pan(0)

// drums · kick
const kick = s("bd").struct("<~@18 A@3 B A@2 ~@2 A@16 ~@8 A@8 ~@2 C A@5 ~@12>".pickRestart({
  A: "x!2", B: "x ~@11 x ~@2 x ~@3 x ~@4", C: "~ x",
})).gain(0.32)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@58 [x!2]!2 x ~@17>").gain(0.13)

// drums · snare
const snare = s("sd").struct("<~@49 [~@5 x!3 ~@4] ~@11 [~@3 x!3] ~@16>").gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~@53 [~@5 x!3 ~@4] ~@3 [~@5 x!3 ~@4] ~@3 [~@7 x ~ x ~@2] ~@16>").gain(0.25)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@9
  [x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x!2 ~@3]
  [x ~@3 x ~@2 x!2 ~@2 x!2 ~@3 x ~@2 x!2 ~@2 x]!14
  ~@2
  [x ~@3 x ~@2 x!2 ~@2 x!2 ~@3 x ~@2 x!2 ~@2 x]!7
  [x ~@3 x ~@2 x!2 ~@2 x!2 ~@11]
  ~@44
>`).gain(0.25)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@44 [x!6]!6 ~@28>").gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct("<~@33 A ~@15 B ~@3 B ~@3 B ~@3 C ~@16>".pickRestart({
  A: "~@16 x ~@2 x!2 ~@2 x", B: "~@11 x", C: "~@7 x ~@4",
})).gain(0.25)

// drums · high tom
const high_tom = s("ht").struct("<~@33 A ~@15 B ~@3 B ~@3 B ~@20>".pickRestart({
  A: "~ x", B: "~@8 x!3 ~",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@62 x ~@15>").gain(0.25)

// drums · ride
const ride = s("rd").struct("<~@34 A@8 B ~@7 A@8 ~@2 C A@5 B ~@11>".pickRestart({
  A: "x!6", B: "x", C: "~@3 x!3",
})).gain(0.25)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@58 [x!6]!2 [x!3 ~@3] ~@17>").gain(0.1)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@10 A@8 B@3 C A@2 ~@2 A@2 B@5 D E@8 ~@8 E@8 ~@2 F E@5 ~@12>".pickRestart({
  A: "~ x!2 ~ x!2", B: "~ x ~@2 x ~", C: "~ x ~ x!3", D: "~ x ~@4", E: "~ x!2 ~ x ~", F: "~@2 x",
})).gain(0.37)

// drums · woodblocks · soft notes
const woodblocks_soft = s("woodblock:5").struct("<~@58 [~ x!2 ~ x ~]!2 [~ x!2 ~@3] ~@17>").gain(0.14)

stack(
  piano, pizzicato_strings, bass, accordion, accordion_soft, tremolo_strings, pizzicato_strings_2,
  pizzicato_strings_soft, acoustic_guitar_steel, acoustic_guitar_steel_2, french_horn, french_horn_2, muted_trumpet,
  trumpet, kick, kick_soft, snare, low_tom, hihat, hihat_soft, mid_tom, high_tom, crash, ride, ride_soft, woodblocks,
  woodblocks_soft
)

More by The Rascals