Strudelify
Miss You Love cover art

Neon Ballroom

Miss You Love

Silverchair

KeyD majorTempo74 bpm
0:00/0:00
// Miss You Love — Silverchair
// 74 bpm, 6/8, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 95 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(74/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 · flute
const flute = note("<~@8 A@2 B@2 C D ~@11 A@2 E@2 C D ~@8 F G F H ~@17 A@2 I@2 C D ~@8 F G F G ~@17>".pickRestart({
  A: "[g4,c5]@11 ~ [g4,b4]@11 ~", B: "[a4@47 ~]/2", C: "g4@11 ~ f#4@11 ~", D: "e4@11 ~@13",
  E: "[~@12 e4@11 ~@25, a4@23 ~]/2", F: "d5@11 ~ c#5@11 ~", G: "g#4@23 ~", H: "g#4@3 ~",
  I: "[~@12 e4@11 ~ a3@22 ~@2, a4@23 ~]/2",
})).s("gm_flute").gain(0.19)

// chords · piano
const piano = note(`<
  A B C D E B C D F@2 G H I@2 J K@2 L M N O L M N O P@2 Q R S T U V W X Y Z AA AB ~@13 AC AD AE ~@5 P@2 AF AG S T U AH
  AI AJ Y Z AA AB ~@4 Y Z AA AB ~@5 AK AL AM AN AO AP AQ@2
>`.pickRestart({
  A: "[c4,g4]@11 ~ g4@3 ~ c4@3 ~ g4@3 ~, g3@23 ~", B: "[g3,b3]@5 g3 b3 g4 b4 g4 d4 b3",
  C: "[a3,d4]@5 ~ f#3@2 f#3@2 d3@2 f#3@6 ~@2 f#3@2 f#3@2, ~ a2", // D5
  D: "[a3,d4]@6 ~@2 g3@3 ~ [a3,d4]@6 [a3,d4]@2 [a3,d4]@4", E: "c4@11 ~ g4@3 ~ c4@3 ~ g4@3 ~, g3@23 ~",
  F: "[g3,c4,g4]@6 ~@2 c4@3 ~ [g3,b3,g4]@5 ~ g3@2 b3@2 d4@2", // C5 G
  G: "[a3,c4,a4]@5 ~ a3@2 c4@2 e4@2 [a3,c4,a4]@5 ~ a3@2 c4@2 e4@2", // Am
  H: "[a3,c4,a4]@5 ~ a3@2 c4@2 e4@2 [a3,c4,a4]@3 ~ c4@2 a3@2 e3@2 c3@2", // Am
  I: "[e3,b3,e4]@3 ~ g3@2 b3@2 g3@2 e3@2 [b3,e4]@3 ~ b3@2 e4@2 b3@2 g3@2", // E5
  J: "[g3,c4,g4]@3 ~ c4@2 e4@2 c4@2 g3@2 [g3,d4]@3 ~ b3@2 d4@2 b3@2 g3@2", // C5 G5
  K: "[[a3,d4]@3 ~ a3@2 d4@2 a3@2 f#3@2 d3@22 ~@14]/2", L: "[g3,c4]@11 ~ [g3,c4]@6 ~@2 [g3,c4]@3 ~",
  M: "[g3,b3]@11 ~ [g3,b3]@6 ~@2 [g3,b3]@3 ~", N: "[a3,d4]@10 ~@2 [a3,d4]@6 ~@2 a3@3 ~",
  O: "[a3,d4]@5 ~ [a3,d4]@2 [a3,d4]@2 [a3,d4]@2 [a3,d4]@6 ~@2 [a3,d4]@3 ~", // D5
  P: "[g3,c4,g4]@6 ~@2 c4@2 c4@2 [g3,b3,g4]@5 ~ g3@2 b3@2 d4@2", Q: "[a3,c4,a4]@5 ~@19",
  R: "~@10 e4@2 [a3,c4,a4]@3 ~ c4@2 [a3,g4]@2 [e3,g4]@2 [c3,f#4]@2", // Am A7 Em Cdim
  S: "[e3,b3,e4]@3 ~ g3@2 b3@2 g3@2 [e3,b3]@2 [e3,b3,e4]@3 ~ b3@2 e4@2 b3@2 [g3,b3]@2", // E5 G
  T: "[e3,b3,e4]@3 ~ g3@2 b3@2 g3@2 [e3,b3]@2 [e3,b3,e4]@3 ~ b3@2 e4@2 b3@2 g3@2", // E5
  U: "[a3,e4,a4]@3 ~ c4@2 [a3,e4]@2 c4@2 a3@2 [a3,e4,a4]@3 ~ e4@2 [a3,a4]@2 e4@2 [a3,c4]@2", // A5 A Am
  V: "[a3,e4,a4]@3 ~ c4@2 e4@2 c4@2 a3@2 [a3,e4]@3 ~ e4@2 [c4,a4]@2 e4@2 [a3,c4]@2", // A5 F Am
  W: "[d3,a3,d4]@3 ~ f#3@2 [a3,d4]@2 f#3@2 [a3,d4]@2 [d3,a3,d4]@3 ~ a3@2 d4@2 a3@2 [f#3,d4]@2", // D5 D
  X: "[a#2,f3,a#3,f4]@3 ~ d3@2 [f3,a#3,f5]@2 [d3,a#3,d5]@2 [a#2,a#3,f5]@2 [c3,g3,d4]@3 ~ e3@2 [g3,d4,d5]@2 [e3,g4]@2 [c3,d4,d5]@2", // A#5 Gm A#5 Csus2 G5 Em Csus2
  Y: "f#2@5 ~ [f#2,f#3,a3,c#4]@5 ~", Z: "e3@5 ~ [e3,a3,c#4]@5 ~",
  AA: "~@6 a3@2 f#3@2 a3@2 [a3,d4]@5 ~ a3@2 f#3@2 a3@2, d3!2", // D5
  AB: "b3@5 ~ b3@2 g#3@2 b3@2 [b3,e4]@5 ~ b3@2 g#3@2 [b3,e4]@2, e3!2", AC: "g3@11 ~ g4@3 ~ d4@2 c4@3 ~ b3@2",
  AD: "g3@10 ~@2 b4@3 ~ g4@2 d4@2 c4@2 b3@2", AE: "a3@5 ~ a3@3 ~ a3@2 e4@10 ~@2",
  AF: "[a3,c4,a4]@5 ~ e4@2 g4@2 e4@2 [c4,a4]@5 ~ e4@2 a4@2 e4@2", // Am F
  AG: "[a3,c4,a4]@10 e4@2 [a3,c4,a4]@3 ~ c4@2 [a3,g4]@2 [e3,g4]@2 [c3,f#4]@2", // Am A7 Em Cdim
  AH: "[a3,e4,a4]@3 ~ c4@2 e4@2 c4@2 a3@2 [a3,e4,a4]@3 ~ e4@2 [c4,a4]@2 e4@2 [a3,c4]@2", // A5 F Am
  AI: "[d3,a3,d4]@3 ~ f#3@2 [a3,d4]@2 f#3@2 [a3,d4]@2 [d3,a3,d4,a4,d5]@3 ~ a3@2 [d4,a4]@2 [a3,d4]@2 [f#3,d4,a4]@2", // D5 D
  AJ: "[a#2,f3,a#3,f4]@3 ~ [f4,d5,f5]@3 ~ [f4,d5]@3 ~ [c3,g3,d4]@3 ~ e3@2 [g3,d4,d5]@2 [e3,g4]@2 ~@2", // A#5 Dm Csus2 G5 Em
  AK: "[g3,c4]@11 ~ [g3,c4]@3 ~ [g3,c4]@6 ~@2", AL: "[g3,b3]@5 ~ b3@2 g3@2 b3@2 g3@5 ~ b3@2 b3@2 g3@2",
  AM: "d3@3 ~ f#3@3 ~ a3@3 ~ d3@3 ~ f#3@2 [a3,d4]@2 [a3,d4,a4]@2 [d4,a4,d5]@2", // D5
  AN: "[a3,d4]@5 ~ [a3,d4]@2 [a3,d4]@2 [a3,d4]@2 [a3,d4]@3 ~ a3@2 [a3,d4]@2 [a3,d4,a4]@2 [d4,a4,d5]@2", // D5
  AO: "[g3,c4,g4]@5 ~ g4@2 e4@2 c4@2 [c4,e4]@3 ~ [c4,f#4]@5 ~ [c4,e4]@2, ~ g3", // C5 C Cdim C
  AP: "d4@5 ~ d4@2 b3@2 d4@2 [g3,d4]@3 ~ g3@6 b3@2, g3@12 ~@4 d4@5 ~@3", AQ: "[[a3,d4]@23 ~]/2",
})).s("gm_piano").gain(0.39)

// chords · distortion guitar · "Distorted"
const distortion_guitar = note(`<
  ~@35 A B C D E F E G@2 H I J@2 H I J@2 K ~@2 L M N O@2 ~@10 A B C D E F E F A B C D P Q P R@2 ~@8
>`.pickRestart({
  A: "f#3@5 ~ [f#3,a3,c#4]@5 ~", B: "e3@5 ~ [e3,a3,c#4]@5 ~", C: "d3@5 ~ [d3,f#3,a3]@5 ~", D: "e3@5 ~ [e3,g#3,b3]@5 ~",
  E: "[d3,a3]@11 ~ [e3,a3]@11 ~", F: "[e3,b3]@23 ~", G: "[[e3,b3]@47 ~]/2",
  H: "[c3,g3,c4,e4]@3 [c3,g3,c4] [c3,g3,c4,e4] [c3,g3,c4,f#4] [c3,g3,c4,g4]@3 [c3,g3,c4,g4] [c3,g3,c4,f#4] [c3,g3,c4,e4]", // C C5 C C5 C
  I: "[g2,d3,g3,d4]@3 [g2,d3,g3,d4]!2 [g2,d3,g3] [g2,d3,g3,d4]@3 [g2,d3,g3,d4]!2 [g2,d3,g3]", // G5
  J: "[d3,a3,d4,f#4]@3 [d3,a3,d4,f#4]!2 [d3,a3,d4,g4] [d3,a3,d4,a4]@3 [d3,a3,d4,a4] [d3,a3,d4,g4] [d3,a3,d4,f#4]", // D Dsus4 D5 Dsus4 D
  K: "[c3,g3,c4]@5 ~", // C5
  L: "~@6 [d4,b4,g5] [d4,c5,g5] [d4,b4,g5,a5,d6] [a4,d5,g5,a5,d6] [b4,d5,g5,a5] [a4,d5,g5,a5], ~@2 [d5,a5,d6] d4, ~@5 d6", // G Csus2 G Dsus4 G Dsus4 D5
  M: "[c3,g3,c4,g4,c5]@5 ~ [c3,g3,c4,g4,c5]@5 ~", N: "[g3,d4,g4,d5,g5]@5 ~ [g3,d4,g4,d5,g5]@5 ~",
  O: "[d3,a3,d4,a4,d5]@5 ~ [d3,a3,d4,a4,d5]@5 ~", P: "[d3,a3]@5 ~ d3@2 a3@2 [a3,d4]@2 [e3,a3]@5 ~ e3@2 a3@2 [a3,e4]@2",
  Q: "[e3,b3]@5 ~ [e3,g#3,b3]@5 ~", R: "[[e3,b3]@23 ~]/2",
})).s("gm_distortion_guitar").gain(0.26)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@25 A@2 B@2 C D E F G H I J K L M N O P@2 ~@16 A@2 B@2 C D E F G H I J Q@2 R S T U V W X Y Z U AA AB@2 ~@8
>`.pickRestart({
  A: "[c4,g4]@5 ~ [g3,g4]@5 ~", B: "[~@12 e4@11 ~@25, [a3,a4]@23 ~]/2", C: "[e3,g4]@11 ~ [e3,f#4]@11 ~",
  D: "[e3,e4]@23 ~", E: "e4@11 ~ f#4@11 ~", F: "g4@23 ~", G: "d4@23 ~", H: "[a#3,f4,a#4,f5]@11 ~ [g3,c4,g4,d5]@11 ~",
  I: "[f#1,f#3,f#4]@23 ~", J: "[c#2,f#3,e4]@23 ~", K: "[d2,d3,d4]@23 ~", L: "[e3,e4]@23 ~, e2@5 ~@7", M: "d6@23 ~",
  N: "b5@23 ~", O: "d5@11 ~ a5@11 ~", P: "[e5@27 ~ f#5@6 ~@2 e5@6 ~@2 d5@3 ~]/2",
  Q: "[[d2,d3,d4]@23 ~ [e3,e4]@23 ~, a5@47 ~, ~@12 e2@5 ~@7]/2", R: "[a5,d6]@23 ~", S: "[g#5,b5]@23 ~",
  T: "d5@11 ~ c#5@11 ~, a5@23 ~", U: "[e5,g#5]@23 ~", V: "[f#1,f#3,f#4,a5]@23 ~", W: "[c#2,f#3,e4,c#6]@23 ~",
  X: "[d2,d3,d4,a5]@23 ~", Y: "[e3,e4,c#6]@23 ~, e2@5 ~@7", Z: "[a5,d6]@11 ~ [a5,c#6]@11 ~",
  AA: "[a5,d6]@11 ~ [a5,e6]@11 ~", AB: "[[g#5,e6]@47 ~]/2",
})).s("gm_string_ensemble_1").gain(0.14)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@10 A@2 B@2 C D ~ E F G H I F G J K@2 L M N O P Q R S T U R V W X W Y@2 Z AA AB@2 Z AA AB@2 AC AD R AE AF AG AH@2 K@2
  L M N O P Q R S T U R V W X W X T U R V W X W Y@2 E AI AJ R E AK AL@2
>`.pickRestart({
  A: "[a1@34 ~@2 a2@3 ~ g2@3 ~ f#2@3 ~]/2", B: "[e2@37 ~@3 e2@3 ~ e2@3 ~]/2", C: "c3@5 ~ g2@5 ~", D: "d2@19 ~@5",
  E: "c2@23 ~", F: "g1@10 ~@2 a1@3 ~ b1@3 ~ c2@3 ~", G: "d2@18 ~@2 d2@3 ~", H: "d2@5 ~ d2@5 ~ d2@6 ~@2 a1@3 ~",
  I: "c2@18 ~@2 c2@3 ~", J: "d2@5 ~ d2@5 ~ d2@6 ~@2 d2@3 ~", K: "c2@5 ~ g1@5 ~", L: "a1@5 ~ a1@5 ~",
  M: "a1@10 ~@2 a2@3 ~ g2@3 ~ f#2@3 ~", N: "e2@11 ~ e2@11 ~", O: "e2@9 e2 f#2 g2", P: "a2@11 ~ a2@10 a2@2",
  Q: "a2@11 ~ a2@2 g2@2 e2@2 c2@2 e2@2 e2@2", R: "d2@11 ~ d2@11 ~", S: "a#1@11 ~ c2@11 ~", T: "f#1@11 ~ f#1@11 ~",
  U: "c#2@11 ~ c#2@11 ~", V: "e2@10 ~@2 e2@11 ~", W: "d2@11 ~ a1@11 ~", X: "e2@23 ~", Y: "[e2@47 ~]/2", Z: "c2!12",
  AA: "g1!12", AB: "d2!12", AC: "c2@11 ~ c2@11 ~", AD: "g1@10 ~@2 a1@3 ~ a2@3 ~ g2@3 ~",
  AE: "d2@5 ~ d2@5 ~ d2@5 ~ d2@5 ~", AF: "c2@5 ~ c2@5 ~", AG: "g1@5 ~ g1@5 ~", AH: "d2@5 ~ d2@5 ~", AI: "g1@23 ~",
  AJ: "d2@23 ~", AK: "g1@11 ~ d2@11 ~", AL: "[d2@47 ~]/2",
})).s("gm_electric_bass_pick").gain(0.21)

// drums · rim
const rim = s("rim").struct("<~@27 A@6 ~@29 A@6 ~@17 B C ~@2 A@4 ~@2>".pickRestart({
  A: "~ x ~@2", B: "~@3 x ~@7 x", C: "x ~@4 x",
})).gain(0.22)

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

// drums · snare
const snare = s("sd").struct("<~@17 [~ x]!26 [~ x ~ x ~@2] [~ x]!11 [~ x ~ x ~@2] [~@2 x!2 ~@2]!4 [~ x]!33 ~@2>")
  .gain(0.22)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@43
  [~@10 x!2]
  ~@11
  [~@10 x!2]
  [x ~@3 x ~ x ~ x ~ x ~ x ~@3 x ~ x ~ x ~ x!2]!3
  [x ~ x!5 ~ x!2 ~@2]
  ~@35
>`).gain(0.22)

// drums · mid tom
const mid_tom = s("mt").struct("<~@38 A ~ B ~@2 C ~@7 A ~@3 D E@3 F ~@13 B ~ B ~ G ~@3 B ~ B ~@11>".pickRestart({
  A: "~@9 x!2 ~", B: "~@3 x ~@5 x!2 ~", C: "~@8 x!2 ~@2", D: "~@6 x!4 ~@2",
  E: "x ~@3 x ~ x ~ x ~ x ~ x ~@3 x ~ x ~ x ~ x!2", F: "x ~ x!5 ~ x!3 ~", G: "~@3 x ~@4 x!3 ~",
})).gain(0.22)

// drums · high tom
const high_tom = s("ht").struct("<~@59 [~@5 x] ~@35>").gain(0.22)

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

// drums · ride bell
const ride_bell = s("rd").struct("<~@15 A B C@18 ~@7 A D ~@8 C@4 ~@4 C@10 ~@15 C E C@6 F ~>".pickRestart({
  A: "x ~ x!3 ~ x ~ x!3 ~", B: "x ~ x!3 ~ x ~ x ~ x ~", C: "x!6", D: "x ~ x!3 ~ x ~ x!4", E: "x!4 ~@2", F: "x",
})).gain(0.22)

stack(
  flute, piano, distortion_guitar, string_ensemble_1, bass, rim, kick, snare, low_tom, mid_tom, high_tom, crash,
  ride_bell
)

More by Silverchair