Strudelify

I'd Really Love to See You Tonight

England Dan

KeyF♯ majorTempo123 bpm
0:00/0:00
// I'd Really Love to See You Tonight — England Dan
// 123 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 81 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
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.

// chords · overdriven guitar
const overdriven_guitar = note("<~@41 A B C@2 ~@6 D E ~@12 A B C@2 ~@4 A B C@2 ~@4>".pickRestart({
  A: "~@2 [f5,g#5]@2 [d#5,f#5] ~ [f5,g#5]@6 [c#5,f5]@4", B: "[d#5,f#5]", C: "[~ c#6 b5 a#5@6 ~@7]/2", D: "~@2 f#4!2",
  E: "d#4",
})).s("gm_overdriven_guitar").gain(0.64).pan(0.6)

// other · oboe
const oboe = note("<~@31 [b4@3 a#4@2 g#4@3] ~@49>").s("gm_oboe").gain(0.46).pan(0.6)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A@3 B C D C D E F G H C D C D E F I J K L K M K M N A@3 B C D C D E F I J K L K M K M O@2 P Q R S P Q T U K L K M K
  M T U K L K M K M T U K L K M ~@5
>`.pickRestart({
  A: "~@3 [f4,g#4]@2 [f#4,a#4]@3", B: "[g#4,b4]@3 [f#4,a#4]@2 [f4,g#4]@2 ~",
  C: "~@3 d#4 ~@3 c#4, g#3 c#3, ~ d#4@2 ~@2 c#4@2 ~, ~ g#4 ~ f4",
  D: "~@7 a#3, f#3, ~ a#3@2 a#3@2 a#3@2 ~, ~ c#4 f#4 c#4", E: "~@7 a#3, a#2, ~ a#3@2 a#3@2 a#3@2 ~, ~ c#4 f4 c#4",
  F: "~@7 a#3, d#3, ~ a#3@2 a#3@2 a#3@2 ~, ~ d#4 f#4 d#4", G: "~@7 g#3, c#3, ~ g#3@2 g#3@2 g#3@2 ~, ~ c#4 f#4 c#4",
  H: "~@7 g#3, c#3, ~ g#3@2 g#3@2 g#3@2 ~, ~ c#4 f4 c#4",
  I: "~ [g#3,c#4,f#4] ~ [g#3,c#4,f#4] ~ [g#3,c#4,f#4] ~ [g#3,c#4,f4]", // C#sus4 C#
  J: "~@2 [g#3,c#4,f4]@3 ~ [g#3,c#4,f#4]@3 ~ [g#3,c#4,f4]@3 ~ [g#3,c#4]@2", K: "~@2 [d#4,f#4,a#4] ~@3 [d#4,f#4,a#4] ~",
  L: "~@2 [c#4,f4,g#4] ~@3 [c#4,f4,g#4] ~", M: "~@2 [c#4,f4,g#4] ~@3 [d#4,f#4,a#4] ~", N: "[g#3,c#4,f#4]@13 ~@3",
  O: "[[g#3,c#4,f#4]@6 ~ [a#3,c#4,f#4]@9]/2", P: "~@2 [d#4,f#4,a#4] ~@2 [d#4,f#4,a#4] ~@2",
  Q: "~@2 [c#4,f4,g#4] ~@2 [c#4,f4,g#4] ~@2", R: "~@2 [d#4,f#4,a#4] ~@2 [c#4,f4,g#4] ~@2",
  S: "~@2 [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f4,g#4] ~", // F# C#
  T: "[g#3,d#4,f#4]@3 ~ [g#3,d#4,f#4]@3 ~ [g#3,d#4,f#4]@3 ~ [g#3,d#4,f#4] ~ [g#3,d#4,f#4]@2", // G#7
  U: "~@2 [g#3,d#4,f#4]@3 ~ [g#3,c#4,f4]@3 ~ [g#3,c#4,f4]@5 ~", // G#7 C#
})).s("gm_acoustic_guitar_steel").gain(0.37).pan(0.3)

// chords · acoustic guitar steel · soft notes · D#m C# D#m G#7 C#
const acoustic_guitar_steel_2 = note(`<
  ~@76
  [~@2 [d#4,f#4,a#4] ~@3 [d#4,f#4,a#4] ~]
  [~@2 [c#4,f4,g#4] ~@3 [d#4,f#4,a#4] ~]
  [[g#3,d#4,f#4]@3 ~ [g#3,d#4,f#4]@3 ~ [g#3,d#4,f#4]@3 ~ [g#3,d#4,f#4] ~ [g#3,d#4,f#4]@2]
  [~@2 [g#3,d#4,f#4]@3 ~ [g#3,c#4,f4]@3 ~ [g#3,c#4,f4]@5 ~]
  ~
>`).s("gm_acoustic_guitar_steel").gain(0.14).pan(0.3)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@13 A B A C D E ~@2 F G F H I J K ~@4 A B A C D E ~ L M G F H I J K ~ N O P Q@2 O R@2 M G F H I J R@2 M G F H I J R@2
  M G F H I J S@2 ~
>`.pickRestart({
  A: "d#4@2 ~ f4, f#4@3 ~, ~ c#4", B: "[a#3,c#4]", C: "~@2 g#4 a#4, [a#3,c#4]", D: "[c#5,f5]",
  E: "f#5 f5 [f#4,d#5]@2, a#4 ~", F: "[d#5,d#6] [f5,f6]", G: "[c#5,c#6]", H: "[c#5,c#6] [b4,b5] [a#4,a#5]@2",
  I: "[f#4,a#4]", J: "[f4,g#4]@3 [d#4,f#4]@5", K: "[c#4,f#4]@3 ~", L: "~@12 g5 [g#5,a5] [a#5,b5] [c6,c#6]",
  M: "[d#5,d#6] [f5,f6], d6 ~@15", N: "a#3", O: "g#3", P: "f#3 g#3", Q: "a#3/2",
  R: "[f#4@24 ~@4 g5 [g#5,a5] [a#5,b5] [c6,c#6], ~@3 f4]/2", S: "[f#4@3 f4]/2",
})).s("gm_string_ensemble_1").gain(0.41).pan(0.3)

// bass · electric bass finger
const bass = note(`<
  ~@5 A B C D E F G H A B C D I F J K L M N O N P Q R ~@3 A B C D I F J K L M N O N P S@2 T U V W T X Y Z L M N O N P Y
  Z L M N O N P Y Z L M N O AA ~@4
>`.pickRestart({
  A: "g#1@7 ~ c#2@7 ~", B: "f#2@6 ~ f#2", C: "g#2@7 ~ c#2@7 ~", D: "f#2@6 ~ g#1", E: "a#1@13 ~@3", F: "d#2@13 ~@3",
  G: "c#2@6 ~ c#2", H: "c#2@8 ~@2 c#2@3 ~ c#2@2", I: "a#1@6 ~ c#2", J: "~ c#2 ~ c#2 ~ c#2 ~ c#2",
  K: "~@2 c#2@2 ~@2 c#2@2 ~@2 c#2@2 ~@2 c#2 ~", L: "b1@5 ~ b1@7 ~ b1@2", M: "a#1@5 ~ a#1@7 ~ g#1 a#1",
  N: "b1@5 ~ b1@7 ~ b1!2", O: "a#1@5 ~ d#2@7 ~ g#1 a#1", P: "a#1@5 ~ d#2@9 ~", Q: "c#2@13 ~@3", R: "f#1",
  S: "[c#2@12 ~@2 f#2@15 ~@3]/2", T: "d#2@7 d#2 c#2 ~ d#2@3 ~ c#2 ~", U: "a#1@7 a#1 g#1 ~ a#1@3 ~ a#1 ~",
  V: "b1@7 b1 c#2@7 c#2", W: "f#2 ~ f#2@5 c#2 f#2@3 ~ f2@3 ~", X: "a#1@7 a#1 g#1 ~ a#1@5 ~",
  Y: "c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2 ~ c#2@2", Z: "~@2 c#2@2 c#2@2 c#2@2 c#2@2 g#2@2 c#3@3 ~",
  AA: "b1@5 ~ b1@7 ~@3",
})).s("gm_electric_bass_finger").gain(0.46)

// bass · electric bass finger · soft notes
const bass_soft = note(`<
  ~@76
  [~@14 b1!2]
  [a#1@5 ~ d#2@9 ~]
  [c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2 ~ c#2@2]
  [~@2 c#2@2 c#2@2 c#2@2 c#2@2 g#2@2 c#3@3 ~]
  ~
>`).s("gm_electric_bass_finger").gain(0.18)

// chords · piano
const piano = note(`<
  ~ A B C D E F E F G H I@2 E F E F G H J K L M L N L N O A B C D E F E F G H J K L M L N L N P@2 Q R S T Q R U V L M L
  N L N U V L M L N L N U V L M L N W ~@4
>`.pickRestart({
  A: "~@5 [f#4,a#4]@3, f#2, ~ c#3@6 ~, ~ f#3@3, ~@3 [g#4,c#5]@3 ~@2", // F# C#5
  B: "~@5 [f#4,a#4]@3, f#2, ~ c#3@6 ~, ~ f3@3, ~@3 [g#4,c#5]@3 ~@2", // F# C#5
  C: "~@7 c#3, f#2, ~ d#3@6 ~, ~ f#3@3, ~@3 [b3,g#4]@2 [c#4,a#4]@3", // E F#
  D: "[g#2,g#3,d#4,b4]@6 [f#2,c#4,a#4]@4 c#2 ~@3 c#2@2, ~@3 f#3@4 ~, ~@5 [b3,g#4]@3", // G#m F# E
  E: "[b3,d#4,g#4]@7 ~ [g#3,c#4,f4]@7 ~", F: "c#4@3 [c#4,g#4]@2 [f#3,c#4,a#4]@3, [a#3,f#4] ~",
  G: "[a#3,c#4]@3 [a#3,c#4,g#4]@2 [a#3,c#4,f4]@3, f4 ~", H: "~@7 f#4, d#3, ~ a#3@2 f#4@3 d#4@2, ~@2 d#4@2 ~ a#3@2 ~",
  I: "[~@10 d#4@2 f#4@2 c#3 ~@3 f#4@4 f4@4 f4@2 g#4@2 f4@2, c#3@8 ~@2 c#3@4 ~@2 c#3@8 ~@2 c#3@4 c#3 ~, d#4!2 ~@6, ~ f#4@2 f#4@3 ~ f4@2 ~@7]/2",
  J: "~ [g#3,c#4,f#4] ~ [g#3,c#4,f#4] ~ [g#3,c#4,f#4] ~ [g#3,c#4,f4]", // C#sus4 C#
  K: "~@2 [g#3,c#4,f4]@3 ~ [g#3,c#4,f#4]@3 ~ [g#3,c#4,f4]@3 ~ [g#3,c#4]@2", L: "[a#3,d#4,f#4]@5 ~ [a#3,d#4,f#4]@7 ~@3",
  M: "[a#3,c#4,f4]@5 ~ [a#3,c#4,f4]@7 ~@3", N: "[a#3,c#4,f4]@5 ~ [a#3,d#4,f#4]@7 ~@3", O: "[g#3,d#4,f#4]",
  P: "[[g#3,d#4,f#4]@6 ~ [f#2,a#3,c#4,f#4]@9]/2", Q: "[a#3,d#4,f#4]@5 ~ [a#3,d#4,f#4]@3 ~ [a#3,d#4,f#4]@5 ~",
  R: "[a#3,c#4,f4]@5 ~ [a#3,c#4,f4]@3 ~ [a#3,c#4,f4]@5 ~", S: "[a#3,d#4,f#4]@5 ~ [a#3,d#4,f#4]@2 ~@2 [g#3,c#4,f4]@5 ~",
  T: "[a#3,c#4,f#4]@7 ~ [a#3,c#4,f#4]@2 ~@2 [g#3,c#4,f4]@2 ~@2", // F# C#
  U: "[g#3,d#4,f#4]@3 ~ [g#3,d#4,f#4]@3 ~ [g#3,d#4,f#4]@3 ~ [g#3,d#4,f#4] ~ [g#3,d#4,f#4]@2", // G#7
  V: "~@2 [g#3,d#4,f#4]@3 ~ [g#3,c#4,f4]@3 ~ [g#3,c#4,f4]@5 ~", W: "[a#3,d#4,f#4]@5 ~@11",
})).s("gm_piano").gain(0.55).pan(0.7)

// chords · piano · soft notes · D#m A#m D#m G#7 C#
const piano_soft = note(`<
  ~@76
  [~@6 [a#3,d#4,f#4]@7 ~@3]
  [[a#3,c#4,f4]@5 ~ [a#3,d#4,f#4]@7 ~@3]
  [[g#3,d#4,f#4]@3 ~ [g#3,d#4,f#4]@3 ~ [g#3,d#4,f#4]@3 ~ [g#3,d#4,f#4] ~ [g#3,d#4,f#4]@2]
  [~@2 [g#3,d#4,f#4]@3 ~ [g#3,c#4,f4]@3 ~ [g#3,c#4,f4]@5 ~]
  ~
>`).s("gm_piano").gain(0.24).pan(0.7)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@75 [~@6 x!2 ~@6 x!2]!2 [x!2 ~ x ~ x ~@2] [x!8] [~@3 x ~@4] ~>").gain(0.3)

// drums · rim
const rim = s("rim").struct("<~@13 A B A B A@2 ~@13 A B A B A@2 ~@43>".pickRestart({
  A: "~ x", B: "~@4 x!2 ~@2",
})).gain(0.6)

// drums · snare
const snare = s("sd").struct("<~@21 A@6 ~@13 A@6 ~@2 A@6 B C A@6 B D A@6 B D A@6 ~@3>".pickRestart({
  A: "~ x ~ x", B: "x!8", C: "x!3 ~@5", D: "x!3 ~ x ~@11",
})).gain(0.6)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@78 [x!8] [x!3 ~ x ~@11] ~>").gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@20 A ~@18 B ~@7 A ~@7 B ~@7 B ~@7 B ~@7 B ~>".pickRestart({
  A: "~@7 x", B: "~@14 x!2",
})).gain(0.6)

// drums · hihat
const hihat = s("hh").struct(`<
  A ~@3 B C D@6 E C D@5 A F C D@4 G ~@4 B C D@5 A F C D@4 G ~@2 C D@5 ~@2 C D@4 G ~@2 C D@4 G ~@2 C D@4 G ~@3
>`.pickRestart({
  A: "x!4", B: "~@6 x!2", C: "~ x!7", D: "x!8", E: "x!5 ~ x!2", F: "x", G: "x!3 ~ x!4",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@20 A ~@18 B ~@7 C ~@7 D ~@7 E ~@7 E ~@7 E ~>".pickRestart({
  A: "~@6 x!3 ~@3 x!2 ~@2", B: "~@6 x!3 ~ x!4 ~@2", C: "~@6 x ~@5 x!2 ~@2", D: "~@10 x!4 ~@2", E: "~@11 x!3 ~@2",
})).gain(0.6)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A ~@7 A ~@6 B ~@6 C ~@4 A ~@6 B ~@6 C ~@8 D E ~@5 C F ~@6 C F ~@10>".pickRestart({
  A: "~@5 x ~@2", B: "~ x ~ x ~ x ~ x", C: "~@3 x ~@4", D: "x!8", E: "x!3 ~@5", F: "x!7 ~",
})).gain(0.6)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@77 [~@3 x ~@4] [x!7 ~] ~@2>").gain(0.24)

// drums · high tom
const high_tom = s("ht").struct("<~@20 A ~@18 B ~@7 C ~@7 D ~@7 E ~@7 E ~@7 E ~>".pickRestart({
  A: "~ x!2 ~@2 x ~@2", B: "~@2 x!3 ~@4 x ~@6", C: "~ x ~@3 x ~@2", D: "~@6 x!4 ~@6", E: "~@8 x!3 ~@5",
})).gain(0.6)

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

// drums · ride
const ride = s("rd").struct("<~@5 x ~@7 x ~@18 x ~@48>").gain(0.6)

stack(
  overdriven_guitar, oboe, acoustic_guitar_steel, acoustic_guitar_steel_2, string_ensemble_1, bass, bass_soft, piano,
  piano_soft, kick, kick_soft, rim, snare, snare_soft, low_tom, hihat, mid_tom, open_hat, open_hat_soft, high_tom,
  crash, ride
)