Strudelify

A Teenager in Love

Dion

KeyC majorTempo142 bpm
0:00/0:00
// A Teenager in Love — Dion
// 142 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 82 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(142/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D E F G H E F I D E F I D E F I J K ~@2 H E F I L E M N O E F I P K ~@2 Q R S T S T U T H E F I V E F N O E F I
  O K ~@2 W X F I Y E F I Z E F I L E F I L AA ~
>`.pickRestart({
  A: "c3@2 g2 c3", B: "a2@9 ~ a2@2 e2@6 a2@6", C: "f2@4 ~ f2 c2@3 f2@3", D: "g2@7 ~@3 g2@2 a2@6 b2@6",
  E: "c3@7 ~@3 c3@2 g2@6 c3@6", F: "a2@7 ~@3 a2@2 e2@6 a2@6", G: "f2@7 ~@3 f2@2 c2@5 ~ f2@6",
  H: "g2@6 f2@6 e2@6 d2@5 ~", I: "f2@7 ~@3 f2@2 c2@6 f2@6", J: "g2@7 ~@3 g2@4 ~@2 g2@2 a2@4 b2@2", K: "c3 ~@7",
  L: "g2@6 f2@6 e2@5 ~ d2@6", M: "a2@4 ~ a2 e2@3 a2@3", N: "f2@7 ~@3 f2@2 c2@6 f2@5 ~",
  O: "g2@7 ~@3 g2@3 ~@3 g2@2 a2@4 b2@2", P: "g2@7 ~@3 g2@2 ~@4 g2@2 a2@4 b2@2", Q: "~@8 g2 a2@2 g2",
  R: "f2@9 ~ a2@7 ~ c3@6", S: "g2@4 ~ b2@4 d3@3", T: "f2@9 ~ a2@8 c3@6", U: "g2@9 ~ b2@8 d3@6",
  V: "g2@7 ~@3 g2@2 a2@6 b2@5 ~", W: "~@8 g2 a2@2 b2", X: "c3@7 ~@3 c3@2 g2@6 c3@5 ~", Y: "g2 f2 e2 d2",
  Z: "g2@7 ~@3 g2@2 d2@6 g2@5 ~", AA: "c2",
})).s("gm_acoustic_bass").gain(0.3)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B C D A B C D A B C D A B C D A B C D E ~@3 A B C D A B C D A B C D E ~@3 C D C D C D C D A B C D A B C D A B C D E
  ~@3 A B C D A B C D A B C D A B C D F ~
>`.pickRestart({
  A: "[g4,c5,e5] ~@3 [g4,c5,e5] ~@19", B: "[a4,c5,e5] ~@3 [a4,c5,e5] ~@19", C: "[a4,c5,f5] ~@3 [a4,c5,f5] ~@19",
  D: "[b4,d5,g5] ~@3 [b4,d5,g5] ~@19", E: "[g4,c5,e5] ~@23", F: "[g4,c5,e5]",
})).s("gm_acoustic_guitar_steel").gain(0.2)

// chords · piano · "A.PIANO"
const piano = note(`<
  A B C D E B C D E B C D E B C F G H I D J ~@2 K E B C D E B C D G H I D L ~@2 M N O P Q P O R S T U V W X Y Z W AA AB
  AC AD ~@4 AE AF AG AD AH AI AC AD AH AF AJ AD AA AF AJ AK AL ~
>`.pickRestart({
  A: "~@6 [c4,e4,g4] ~@3 [c4,e4,g4] ~@7 [c4,e4,g4]@2 ~@4", B: "~@6 [c4,e4,a4] ~@3 [c4,e4,a4] ~@7 [c4,e4,a4] ~@5",
  C: "~@6 [c4,f4,a4] ~@3 [c4,f4,a4] ~@7 [c4,f4,a4] ~@5", D: "~@6 [d4,g4,b4] ~@3 [d4,g4,b4] ~@7 [d4,g4,b4] ~@5",
  E: "~@6 [c4,e4,g4] ~@3 [c4,e4,g4] ~@7 [c4,e4,g4] ~@5", F: "~@6 [d4,g4,b4] ~@3 [d4,g4,b4] ~@7 [g4,b4] ~@5, ~@9 d4 ~@2",
  G: "~@6 [e4,g4,c5] ~@3 [e4,g4,c5] ~@7 [e4,g4,c5] ~@5", H: "~@6 [e4,a4,c5] ~@3 [e4,a4,c5] ~@7 [e4,a4,c5] ~@5",
  I: "~@6 [f4,a4,c5] ~@3 [f4,a4,c5] ~@7 [f4,a4,c5] ~@5", J: "[e4,g4] ~@11, c5 ~@23",
  K: "[g4,b4]@5 ~ [f4,a4]@5 ~ [e4,g4]@4 ~@2 [d4,f4]@4 ~@2", L: "[g4,c5] ~@23, e4 ~@11", M: "~@2 [c4,e4,g4]",
  N: "[c4,f4,a4]@8 ~@2 [c4,f4,a4]@6 ~@2 [c4,f4,a4]@3 ~@3", O: "[d4,g4,b4]@7 ~@3 [d4,g4,b4]@8 [d4,g4,b4]@4 ~@2",
  P: "[c4,f4,a4]@7 ~@3 [c4,f4,a4]@8 [c4,f4,a4]@4 ~@2", Q: "[d4,g4,b4]@7 ~@3 [d4,g4,b4]@7 ~ [d4,g4,b4]@4 ~@2",
  R: "[c4,f4,a4]@7 ~@3 [c4,f4,a4]@7 ~ [c4,f4,a4]@6", S: "~@3 [g4,b4]@3 ~@4 [f4,a4] ~ [e4,g4]@3 ~@3 [d4,f4]@4 ~@2",
  T: "~@3 [c4,e4,g4] ~ [c4,e4,g4]@3 ~ [c4,e4,g4] ~@2", U: "~@6 [c4,e4,a4]@2 ~@2 [c4,e4,a4]@7 ~ [c4,e4,a4]@3 ~@3",
  V: "~@6 [c4,f4,a4]@2 ~@2 [c4,f4,a4]@7 ~ [c4,f4,a4]@5 ~", W: "~@6 [d4,g4,b4]@2 ~@2 [d4,g4,b4]@7 ~ [d4,g4,b4]@4 ~@2",
  X: "~@6 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@7 ~ [c4,e4,g4]@4 ~@2", Y: "~@3 [c4,e4,a4] ~ [c4,e4,a4]@3 ~ [c4,e4,a4]@2 ~",
  Z: "~@3 [c4,f4,a4] ~ [c4,f4,a4]@3 ~ [c4,f4,a4]@2 ~", AA: "~@6 [e4,g4,c5]@2 ~@2 [e4,g4,c5]@7 ~ [e4,g4,c5]@3 ~@3",
  AB: "~@6 [e4,a4,c5]@2 ~@2 [e4,a4,c5]@7 ~ [e4,a4,c5]@5 ~", AC: "~@6 [f4,a4,c5]@2 ~@2 [f4,a4,c5]@7 ~ [f4,a4,c5]@4 ~@2",
  AD: "~@6 [d4,g4,b4]@2 ~@2 [d4,g4,b4]@7 ~ [d4,g4,b4]@3 ~@3", // G
  AE: "~@6 [e4,g4]@2 ~@2 [e4,g4,c5]@6 ~@2 [e4,g4,c5]@3 ~@3, ~@6 c5 ~@17", // Em C
  AF: "~@6 [e4,a4,c5]@2 ~@2 [e4,a4,c5]@7 ~ [e4,a4,c5]@3 ~@3", // Am
  AG: "~@6 [a4,c5]@2 ~@2 [f4,a4,c5]@7 ~ [f4,a4,c5]@4 ~@2, ~@6 f4 ~@17", // Am F
  AH: "~@6 [e4,g4,c5]@2 ~@2 [e4,g4,c5]@6 ~@2 [e4,g4,c5]@3 ~@3", // C
  AI: "~@6 [e4,a4,c5]@2 ~@2 [e4,a4,c5]@6 ~@2 [e4,a4,c5]@3 ~@3", // Am
  AJ: "~@6 [f4,a4,c5]@2 ~@2 [f4,a4,c5]@7 ~ [f4,a4,c5]@3 ~@3", // F
  AK: "~@6 [d4,g4]@2 ~@2 [d4,g4,b4]@7 ~ [d4,g4,b4]@2 ~@4, ~@6 b4 ~@17", AL: "[e4,g4,c5]",
})).s("gm_piano").gain(0.25)

// chords · synth strings 1 · "SYN STRING"
const synth_strings_1 = note(`<
  A@3 B@4 C@4 D@4 E F@3 E G ~@3 H@3 I@4 E J@3 E G ~@3 K E K E K E K L@8 E J@3 M@2 ~@3 N O@2 D@4 E P@3 D@4 Q@2 ~
>`.pickRestart({
  A: "[g4 ~ f4, c4@71 ~, e4@2 ~, ~ a4@2]/3", B: "[[b3,d4]@24 e4@23 ~ e4@23 ~ f4@24, g4 a4, ~ c4@3]/4",
  C: "[[b3,d4] ~@2 f4, g4 a4, ~ c4@3, ~@24 e4@49 ~@23]/4", D: "[[b3,d4] ~@2 f4, g4 a4, ~ c4@3, ~@24 e4@47 ~@25]/4",
  E: "[b3,d4,g4]", F: "[g3@23 ~@25 f4@24, c4, e4@2 ~, ~ a3@2]/3", G: "[c4,e4] ~@11",
  H: "[g4 ~ f4, c4, e4@2 ~, ~ a4@2]/3", I: "[[b3,d4] ~@2 f4, g4 a4, ~ c4@3, ~ e4@2 ~]/4",
  J: "[g3 ~ f4, c4, e4@2 ~, ~ a3@2]/3", K: "[a3,c4,f4]", L: "[[b3,d4]@24 ~@48 f4@23 ~, g4 a4, ~ c4@3, ~ e4@2 ~]/4",
  M: "[[b3,d4]@12 [c4,e4] ~@11, g4@13 ~@11]/2", N: "[c4,e4,g4]", O: "[e4 f4, [a3,c4]]/2",
  P: "[g3 ~ f4, c4, e4@2 ~, ~@24 a3@47 ~]/3", Q: "[[b3,d4] [c4,e4], g4]/2",
})).s("gm_synth_strings_1").gain(0.2)

// drums · kick
const kick = s("bd").struct("<A@20 B ~@3 A@12 B ~@3 A@20 B ~@3 A@16 B ~>".pickRestart({
  A: "x!2", B: "x",
})).gain(0.2)

// drums · snare
const snare = s("sd").struct("<A@19 B ~@3 C A@11 B ~@3 C A@19 B ~@3 C A@15 B ~@2>".pickRestart({
  A: "~@3 x ~ x ~@3 x ~@2", B: "~@3 x ~ x ~@3 x ~ x", C: "~@8 x!2 ~ x",
})).gain(0.31)

// drums · hihat
const hihat = s("hh").struct("<A@20 B ~@3 A@12 B ~@3 A@20 B ~@3 A@16 ~@2>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x",
})).gain(0.26)

stack(bass, acoustic_guitar_steel, piano, synth_strings_1, kick, snare, hihat)

More by Dion