Strudelify
Amapola cover art

1997 · The Spotnicks

Amapola

The Spotnicks

KeyD minorTempo173 bpm
0:00/0:00
// Amapola — The Spotnicks
// 173 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(173/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 · "FINGERDBAS"
const bass = note(`<
  ~@4 A B@3 C B@5 D E F G@5 C H C B@3 I@2 J K L M C B F G N H O P@5 Q R S T@5 P U O P O P V@2 W X Y Z O P AA T AB U T@2
  AC U T@2 AD AE@2 ~
>`.pickRestart({
  A: "a1@2 a1 ~ a1 ~ a1@3 ~ a1 ~ a1 ~ a1 ~", B: "ab1@2 a1 ~ a1 ~ a1@3 ~ a1 ~ a1 ~ a1 ~",
  C: "a1 ~ a1 ~ a1 ~ a1@3 ~ a1 ~ a1 ~ a1 ~", D: "e1 ~ e1 ~ e1 ~ e1@2 ~@2 e1 ~ e1 ~ e1 ~", E: "e1 ~@3",
  F: "e1 ~ e1 ~ e1 ~ e1@3 ~ e1 ~ e1 ~ e1 ~", G: "eb2@2 e1 ~ e1 ~ e1@3 ~ e1 ~ e1 ~ e1 ~", H: "a1 ~@3",
  I: "gb1 ~ gb1 ~ gb1 ~ gb1@3 ~ gb1 ~ gb1 ~ gb1 ~", J: "b1@2 b1 ~ b1 ~ b1@3 ~ b1 ~ b1 ~ b1 ~",
  K: "bb1@2 b1 ~ b1 ~ b1@3 ~ b1 ~ b1 ~ b1 ~", L: "d2 ~ d2 ~ d2 ~ d2@3 ~ d2 ~ d2 ~ d2 ~",
  M: "db2@2 d2 ~ d2 ~ d2@3 ~ d2 ~ d2 ~ d2 ~", N: "a1@3 ~@3 gb1@2 ~@2 e1@2 ~@2 db2 ~",
  O: "bb1 ~ bb1 ~ bb1 ~ bb1@3 ~ bb1 ~ bb1 ~ bb1 ~", P: "a1@2 bb1 ~ bb1 ~ bb1@3 ~ bb1 ~ bb1 ~ bb1 ~",
  Q: "f1@2 f1 ~ f1 ~ f1@3 ~ f1 ~ f1 ~ f1 ~", R: "f1@3 ~@13", S: "f1 ~ f1 ~ f1 ~ f1@3 ~ f1 ~ f1 ~ f1 ~",
  T: "e1@2 f1 ~ f1 ~ f1@3 ~ f1 ~ f1 ~ f1 ~", U: "bb1 ~@3", V: "g1 ~ g1 ~ g1 ~ g1@3 ~ g1 ~ g1 ~ g1 ~",
  W: "c2 ~ c2 ~ c2 ~ c2@3 ~ c2 ~ c2 ~ c2 ~", X: "b1@2 c2 ~ c2 ~ c2@3 ~ c2 ~ c2 ~ c2 ~",
  Y: "eb2 ~ eb2 ~ eb2 ~ eb2@3 ~ eb2 ~ eb2 ~ eb2 ~", Z: "d2@2 eb2 ~ eb2 ~ eb2@3 ~ eb2 ~ eb2 ~ eb2 ~",
  AA: "f1 ~ f1 ~ f1 ~ f1@3 ~ [f1,ab1] ~ f1 ~ f1 ~", AB: "bb1@4 ~@2 g1@2 ~@2 f1@2 ~@2 d2 ~",
  AC: "bb1@3 ~@3 g1@2 ~@2 f1@2 ~@2 d2@2", AD: "bb1 ~@2 g1 ~ f1 ~ d2", AE: "[bb1@5 ~@3 bb1@22 ~@2]/2",
})).s("gm_electric_bass_finger").gain(0.4)

// other · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@7 A B@2 C D E F G H I@2 J K L M N A O@2 C P Q R S T U V W X Y Z AA AB AC@2 AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ
  AR@2 AS AE AT AU AV AW AX AY AZ BA BB BC BD BE BB BC BD BF BG BC BH BI@2 ~
>`.pickRestart({
  A: "~@8 db3@4 e3@3 ~", B: "[a3@3 b3@6 ~@2 a3 b3 a3 b3 c4, e3@7 ~@9]/2", C: "db4@3 ~ b3@2 a3@4 gb3@2 a3@2 gb3 ~",
  D: "a3 gb3 ~ a3@2 gb3 ab3 a3", E: "ab3@5 gb3 ab3 a3", F: "ab3 gb3 e3 eb3", G: "d3", H: "~@8 d3@4 e3@3 ~",
  I: "[ab3@6 a3@16 ab3@2 a3@2 ab3@2 a3@2 bb3 ~]/2", J: "b3@2 a3 ab3@2 e3 gb3 g3",
  K: "ab3@4 e3@2 ab3@4 gb3 ~ gb3@2 ab3 ~", L: "gb3@5 e3 gb3 ab3", M: "gb3@2 e3@2 eb3@2 d3 ~", N: "[a2,db3]",
  O: "[a3@3 b3@7 ~ a3 b3 a3 b3 c4, e3@5 ~@3]/2", P: "a3 gb3@2 a3@2 gb3 ab3 a3", Q: "ab3@9 ~ gb3 ~ gb3 ~ gb3 ~",
  R: "gb3@2 ~@2 gb3@3 ~ [gb3,b3]@3 ~ [gb3,db4]@3 ~", S: "[gb3,d4]", T: "~@4 d4@2 eb4@2 e4@4 d4@3 ~", U: "e4@3 d4@5",
  V: "~@2 e4 d4 e4 d4 e4 d4", W: "db4@5 ~ a3@6 e3@3 ~", X: "db3@4 ~ db3 e3 a3", Y: "gb3 ~@9 d3@2 gb3@2 b3@2",
  Z: "[e3,ab3] ~@4 e3 ab3 db4", AA: "a3 ~@5 gb3 ~@3 e3 ~@3 db3 ~", AB: "a2 ~@7 [bb2,d3]@3 ~ [d3,f3]@2 ~@2",
  AC: "[bb3@6 c4@13 ~@3 bb3@2 c4@2 bb3@2 c4 ~ db4 ~, f3@13 ~@19]/2", AD: "d4@3 ~ c4@2 bb3@4 g3@2 bb3@2 g3@2",
  AE: "bb3@2 g3@2 ~@2 bb3@4 g3@2 a3 ~ bb3@2", AF: "a3@5 g3 a3 bb3", AG: "a3@4 g3@4 f3@4 e3@3 ~", AH: "eb3",
  AI: "~@8 eb3@4 f3@3 ~", AJ: "a3@3 bb3@5", AK: "~@6 a3@2 bb3@2 a3@2 bb3 ~ b3@2", AL: "c4@2 bb3 a3@2 f3 g3 ab3",
  AM: "a3@4 f3 ~ a3@4 f3@2 g3@2 a3@2", AN: "g3@5 f3 g3 a3", AO: "g3@4 f3@4 e3@4 eb3@3 ~", AP: "[bb2,d3]",
  AQ: "~@8 [bb2,d3]@3 ~ [d3,f3]@2 ~@2", AR: "[bb3@6 c4@12 ~@4 bb3@2 c4@2 bb3@2 c4@2 db4 ~, f3@17 ~@15]/2",
  AS: "d4@3 ~ c4@2 bb3@4 g3@2 bb3@2 g3 ~", AT: "a3@10 g3 ~ g3 ~ g3 ~", AU: "c4@4 g3@2 ~@2 [g3,c4]@3 ~ [g3,d4]@3 ~",
  AV: "[g3,eb4]@7 ~", AW: "~@4 eb4@2 e4@2 f4@4 eb4@3 ~", AX: "f4@3 eb4@5", AY: "~@2 f4 eb4 f4 eb4 f4 eb4",
  AZ: "d4@5 ~ bb3@5 ~ f3@4", BA: "d3@4 ~ d3 f3 bb3", BB: "g3 ~@4 eb3 g3 c4", BC: "a3@2 ~@8 f3@2 a3@2 d4 ~",
  BD: "bb3 ~@5 g3 ~@3 f3 ~@3 d3 ~", BE: "bb2@2 ~@8 d3@2 f3 ~ bb3@2", BF: "bb2 ~@4 d3 f3 bb3",
  BG: "g3 ~@9 eb3@2 g3@2 c4@2", BH: "bb3 ~@5 g3 ~@3 f3 ~@3 d3@2", BI: "[bb2@2 ~@6 [f3,bb3,d4]@15 ~@9]/2",
})).s("gm_electric_guitar_clean").gain(0.29).pan(0.8)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A B C A D@4 E D@3 A@2 F G F H@3 I H E J E A@2 D K L M N O P Q D F R S T U V@5 W X Y Z@5 U AA U V@3 AB AC AD AE AF AG U
  V AH Z AI AA Z AJ AI AK AJ AL AI AM@3
>`.pickRestart({
  A: "[ab2,eb3]@2 [a2,e3] ~ [a2,e3] ~ [a2,e3]@3 ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~", // Ab5 A5
  B: "[ab2,eb3]@2 [a2,e3] ~ [a2,e3] ~ [a2,e3]@4 [a2,e3] ~ [a2,e3]@2 [a2,e3] ~", // Ab5 A5
  C: "[ab2,eb3]@2 [a2,e3]@2 [a2,e3] ~ [a2,e3]@3 ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~", // Ab5 A5
  D: "[ab2,eb3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3]@3 ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~", // Ab5 A5
  E: "[a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3]@3 ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~", // A5
  F: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3]@3 ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~", G: "[e3,b3] ~@3",
  H: "[eb3,bb3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3]@3 ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~", // Eb5 E5
  I: "[eb3,bb3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~", J: "[a2,e3]@3 ~@5",
  K: "[gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~ [gb2,db3]@3 ~ [gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~", // Gb5
  L: "[gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~ [gb2,db3,gb3]@3 ~ [gb2,db3,gb3] ~ [gb2,db3,gb3]@3 ~", // Gb5
  M: "[b2,gb3]@3 ~ [b2,gb3] ~ [b2,gb3]@3 ~ [b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~", // B5
  N: "[bb2,f3]@2 [b2,gb3] ~ [b2,gb3] ~ [b2,gb3]@3 ~ [b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~", // Bb5 B5
  O: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3]@3 ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // D5
  P: "[db3,ab3]@2 [d3,a3] ~ [d3,a3] ~ [d3,a3]@3 ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // Db5 D5
  Q: "[a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3]@3 ~ [a2,e3,gb3] ~ [a2,e3] ~ [a2,e3] ~", // A5 Gbm7 A5
  R: "[eb3,bb3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3]@3 ~ [e3,b3] ~ [e3,b3] ~ b3 ~", // Eb5 E5
  S: "[a2,e3,a3] ~@5 [a2,e3,a3] ~@3 [a2,e3,a3] ~@3 [a2,e3,a3] ~", T: "[a2,e3,a3] ~@3",
  U: "[bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3]@3 ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~", // Bb5
  V: "[a2,e3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3]@3 ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~", // A5 Bb5
  W: "[f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~", X: "[f2,c3]@3 ~@13, eb3 ~@15",
  Y: "[f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3]@3 ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~", // F5
  Z: "[e2,b2] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3]@3 ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~", AA: "[bb2,f3]@3 ~@13",
  AB: "[g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3,g3]@3 ~ [g2,d3,g3] ~ [g2,d3,g3] ~ [g2,d3,g3] ~", // G5
  AC: "g2@2 [d3,g3]@2 [g2,d3] ~ [g2,d3,g3]@3 ~ [g2,d3,g3] ~ [d3,g3]@2 g2 ~, ~@12 g2 ~@3", // G5
  AD: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3]@3 ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~", // C5
  AE: "[b2,gb3]@2 [c3,g3] ~ [c3,g3] ~ [c3,g3]@3 ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~", // B5 C5
  AF: "[eb2,bb2] ~ [eb2,bb2] ~ [eb2,bb2] ~ [eb2,bb2]@3 ~ [eb2,bb2] ~ [eb2,bb2] ~ [eb2,bb2] ~", // Eb5
  AG: "[d2,a2]@2 [eb2,bb2] ~ [eb2,bb2] ~ [eb2,bb2]@3 ~ [eb2,bb2] ~ [eb2,bb2] ~ [eb2,bb2] ~", // D5 Eb5
  AH: "[f2,g2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3]@3 ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~", // Fsus2 F5
  AI: "[bb2,f3]@2 ~@4 [bb2,f3] ~@3 [bb2,f3] ~@3 [bb2,f3] ~", // Bb5
  AJ: "[e2,b2]@2 [f2,c3] ~ [f2,c3] ~ [f2,c3]@3 ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~", AK: "[bb2,f3] ~@3",
  AL: "[e2,b2]@2 [f2,c3] ~ [f2,c3] ~ [f2,c3]@3 ~ [f2,c3] ~ [f2,c3] ~ c3 ~", // E5 F5
  AM: "[[bb2,f3]@2 ~@6 [bb2,d3,f3,g3]@25 ~@15]/3", // Bb5 Gm7
})).s("gm_electric_guitar_muted").gain(0.28).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~@4 A@11 B A@7 B A@14 C B A@7 B A@7 B A@14 C B A@2 C B A@2 C D ~@2>".pickRestart({
  A: "x ~@2 x ~@2 x ~", B: "x", C: "x ~@2 x ~ x ~ x", D: "x!2",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@4 A@11 B A@6 C B A@14 D B A@6 E B A@6 F B A@14 D B A@2 D B A@2 D G ~@2>".pickRestart({
  A: "x ~@2 x ~@2 x ~", B: "x", C: "x ~@2 x ~ x!3", D: "x ~@2 x ~ x ~ x", E: "x ~@5 x ~@3 x!6", F: "x ~@5 x!10",
  G: "x!2",
})).gain(0.5)

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

stack(bass, electric_guitar_clean, electric_guitar_muted, kick, snare, ride)

More by The Spotnicks