Strudelify

Everybody's Got to Learn Sometime

Korgis

KeyC♯ minorTempo74 bpm
0:00/0:00
// Everybody's Got to Learn Sometime — Korgis
// 74 bpm, 4/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 70 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(74/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(`<
  A@2 B C B C B C B C D E F G H I J@2 K@2 L M N O N P N P N O Q R S G H I H I H I N O N P N P N O Q R S G H I H I H I L
  M H I H I H I L M T ~
>`.pickRestart({
  A: "c#3@7 g#2", B: "c#3@7 b2", C: "a#2@4 a2@3 a2", D: "c#3", E: "g#2 c3", F: "f#1", G: "b1", H: "g#1@3 g#1 a1@4",
  I: "a1@3 ~ c#2@3 ~ d#2@8", J: "[g#1@6 g#1@2 a1@12 c#2@3 ~ d#2@8]/2", K: "[g#1@8 a1@12 c#2@3 ~ d#2@4 g#3@4]/2",
  L: "e3@9 e3 ~ e3 ~@4", M: "e3@6 e3@2 ~ e3 ~ e3 ~@4", N: "c#2@7 b1", O: "a#1@3 a#1 a1@4", P: "a#1 a1", Q: "c#2@7 c#2",
  R: "g#2@3 g#2 g#1@4", S: "f#1@7 f#1", T: "e2",
})).s("gm_electric_bass_finger").gain(0.47)

// chords · piano · "HONKY TONK"
const piano = note(`<
  A B@2 C B C B C B C B D E F G H G H G H I J B C B C B C B C B D E F K H G H G L M N M N O P O P O Q O R G H G H G H I
  J G H G H G H I J S ~
>`.pickRestart({
  A: "[g#3,c#4,e4]@3 ~ [g#3,c#4,e4,g#4]@3 ~ [g#3,c#4,e4,g#4]@3 ~ [g#3,c#4,e4,g#4]@3 ~", // C#m
  B: "[g#3,c#4,e4,g#4]@3 ~ [g#3,c#4,e4,g#4]@3 ~ [g#3,c#4,e4,g#4]@3 ~ [g#3,c#4,e4,g#4]@3 ~", // C#m
  C: "[a#3,c#4,e4,g#4]@3 ~ [a#3,c#4,e4,g#4]@3 ~ [a3,c#4,e4,f#4]@3 ~ [a3,c#4,e4,f#4]@3 ~", // A#m7b5 F#m7
  D: "[g#3,c4,e4,g#4]@3 ~ [g#3,c4,e4,g#4]@3 ~ [g#3,c4,d#4,g#4]@3 ~ [g#3,c4,d#4,g#4]@3 ~", // G#aug G#
  E: "[a3,c#4,e4,g#4]@3 ~ [a3,c#4,e4,g#4]@3 ~ [a3,c#4,e4,g#4]@3 ~ [a3,c#4,e4,g#4]@3 ~", // Amaj7
  F: "[a3,c#4,e4,g#4]@3 ~ [a3,c#4,e4,g#4]@3 ~ [a3,c#4,e4,g#4]@3 ~ [a3,b3,d#4,f#4]@3 ~", // Amaj7 B7
  G: "[g#3,b3,d#4,g#4]@3 ~ [g#3,b3,d#4,g#4]@3 ~ [a3,c#4,e4,g#4]@3 ~ [a3,c#4,e4,g#4]@3 ~", // G#m Amaj7
  H: "[a3,c#4,e4]@3 ~ [c#4,e4,g#4]@3 ~ [c#4,d#4,f#4,a4]@3 ~ [c#4,d#4,f#4,a4]@3 ~", // A C#m D#m7b5
  I: "[b3,e4,g#4]@3 ~ [b3,e4,g#4]@2 [a#3,c#4,e4,g#4]@10", J: "[b3,e4,g#4]@3 [a#3,e4,g#4]@5",
  K: "[g#3,b3,d#4,g#4]@3 ~ [g#3,b3,d#4,g#4]@3 ~ [a3,c#4,e4,a4]@3 ~ [a3,c#4,e4,a4]@3 ~", // G#m A
  L: "[a3,c#4,e4]@3 ~ [c#4,e4,g#4]@3 ~ [b3,d#4,f#4,b4]@3 ~ [b3,d#4,f#4,b4]@3 ~", M: "[c#4,e4,g#4]@15 ~",
  N: "[a#3,c#4,e4,g#4]@7 ~ [a3,c#4,e4,f#4]@7 ~", // A#m7b5 F#m7
  O: "[c#4,e4,g#4]@3 ~ [c#4,e4,g#4]@3 ~ [c#4,e4,g#4]@3 ~ [c#4,e4,g#4]@3 ~", // C#m
  P: "[a#3,c#4,e4]@3 ~ [a#3,c#4,e4]@3 ~ [a3,c#4,f#4]@3 ~ [a3,c#4,f#4]@3 ~", // A#dim F#m
  Q: "[c4,e4,g#4]@3 ~ [c4,e4,g#4]@3 ~ [c4,d#4,g#4]@3 ~ [c4,d#4,g#4]@3 ~", // Caug G#
  R: "[c#4,e4,g#4]@3 ~ [c#4,e4,g#4]@3 ~ [c#4,e4,g#4]@3 ~ [b3,d#4,f#4]@3 ~", S: "[e3,b3,e4,g#4]",
})).s("gm_piano").gain(0.33).pan(0.4)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@10 A@2 B@2 C@6 D@2 E@8 F@2 G@2 H@4 I@2 J@2 K@6 L@2 M@2 H@4 I@2 D@2 N@6 D@2 O ~
>`.pickRestart({
  A: "[e6@2 e6 d#6, g#6]/2", B: "[[c#6,e6,g#6]@7 [b5,d#6,f#6]]/2",
  C: "[[g#3,b3,d#4,d#6]@2 [c#4,e4]@2 [c#4,e4] [c#3,c#4,e4,g#4,e6] [d#3,c#4,f#4,a4]@2 [g#3,b3,d#4]@2 [c#4,e4]@2 [c#4,e4] [c#3,c#4,e4,g#4,e6] [d#3,c#4,f#4,a4]@2 [g#3,b3,d#4]@2 [c#4,e4]@2 [c#4,e4] [c#3,c#4,e4,g#4,e6] [d#3,c#4,f#4,a4,d#6]@2, g#4@4 ~@2 d#6@4 [a3,e6]@3 ~@3 g#4@4 ~@4, ~@2 [a3,e6]@3 ~@3 g#4@4 ~@2 d#6@4 [a3,e6]@3 ~@3]/6", // G#m C#m D#m7b5 G#m C#m D#m7b5 G#m C#m …
  D: "[g#3,b3]@3 [g#3,c#4]@5, [e4,e6]", E: "[c#4@2 a#3 [a3,f#5], [e4,c#5], g#5@3 ~]/2",
  F: "[[c#4,e4,c#5]@2 e4 d#4, g#5, ~ [g#3,c5]]/2", G: "[f#3@4 ~@3 [d#4,b4,f#5], [e4,c#5,g#5]@7 ~, ~ b2]/2",
  H: "[[g#3,b3,d#4,d#5,g#5]@2 [c#4,e4]@2 [c#4,e4] [c#3,c#4,e4,a4,a5] [d#3,c#4,a4,f#5,d#6]@2, ~ e5@2 ~, ~@2 [a3,a5]@3 ~@3]/2", // G#m C#m A D#m7b5 A
  I: "[[g#3,b3,d#4,d#5,g#5]@2 [c#4,e4]@2 [c#4,e4] [c#3,c#4,a4,a5,e6] [d#3,d#4,b4,b5,f#6]@2, ~@2 [a3,e5,a5]@3 ~@3]/2", // G#m C#m A B A5
  J: "[[c#4,g#4,c#5]@2 [a#3,g#4] [a3,f#4,f#5], e4, g#5@3 ~, ~ c#5]/2", // C#5 A#7 D
  K: "[c#4@2 a#3 [a3,f#4,f#5], [e4,c#5], [g#4,g#5]@3 ~]/2", L: "[[c#4,e4,g#4,c#5]@2 e4 d#4, g#5, ~ [g#3,g#4,c5]]/2",
  M: "[f#3@4 ~@3 [d#4,f#4,b4,f#5], [e4,g#4,c#5,g#5]@7 ~, ~ b2]/2", // B C#m
  N: "[[g#3,b3,d#4,d#5,b5]@2 [c#4,e4,c#6]@2 ~ c#3 [d#3,c#4,a4,f#5,d#6]@2, ~ e5@2 ~, ~@2 a3@3 ~@3, ~@2 [c#4,e4,c#6] ~]/2", // G#m C#m D#m7b5 C#m
  O: "[g#3,b3,e4,e6]", // E
})).s("gm_string_ensemble_2").gain(0.26).pan(0.6)

// other · pad bowed · "BOWEDGLASS"
const pad_bowed = note("<~@15 A ~ A ~ A B@2 C@2 D@2 C@2 E@2 ~@10 F@2 ~@28>".pickRestart({
  A: "c#5 e5 f#5@2", B: "[~ g#5@31]/2", C: "[g#5@3 f#5]/2", D: "[c#5@9 ~@7]/2", E: "[c#5@19 ~@13]/2",
  F: "[c#5 b4 c#5 b4 c#5 b4 c#5 b4 c#5@14 ~@10]/2",
})).s("gm_pad_bowed").gain(0.29).pan(0.3)

// other · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note("<~@20 A@3 ~@35 A@3 ~@5 A@3 ~>".pickRestart({
  A: "[~@9 e3 b3 e3 c#4@2 b3@11 e3 b3 e3 c#4@2 b3@6 ~@12]/3",
})).s("gm_electric_guitar_clean").gain(0.29).pan(0.7)

// other · lead 4 chiff · "CHIFFER LD"
const lead_4_chiff = note("<~@40 A@3 ~ B@2 C D E F G H I ~@17>".pickRestart({
  A: "[~@5 e5@2 c#5 b4 e5 ~ e5@2 c#5@8 e5@2 [b4,c#5] g#4 [b4,c#5] [g4,g#4] f#4 e4 c#4 e4 e4@5 c#4@9 ~@3]/3", // Bsus2 G#maj7
  B: "[~@2 f#5@3 e5 c#5 e5 f#5 ~ f#5 g#5@2 e5 f#5 c#5@2 c#5@7 ~@2 e5@2 c#5 [g#4,b4] ~ b4, ~@15 c#5]/2", // G#m
  C: "g#4 [b4,c#5] [g4,g#4] f#4 e4 c#4 e4 e4@5 ~@2 f#4 [d#4,e4]", D: "e4 e4@3 c#4@5 ~@7",
  E: "g#4 c#5 ~ c#5 g#4 e5!2 c#5 ~ g#5 g#5@4 a5 [f#5,g#5]", F: "g#5 f#5",
  G: "g#5@2 e5!2 f#5 c#5 ~ c#5 e5 b4 ~ b4 d#5 ~ a4!2", H: "~ c#5@2 c#5@5 d#5 b4@7, ~@9 c#5 ~@6", I: "g#4@9 ~@7",
})).s("gm_lead_4_chiff").gain(0.41)

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

// drums · rim
const rim = s("rim").struct("<~@40 [~ x ~ x]!12 ~@18>").gain(0.56)

// drums · snare
const snare = s("sd").struct("<~@34 [~ x ~ x]!6 ~@12 [~ x ~ x]!6 ~@2 [~ x ~ x]!6 ~@4>").gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<~@34 A B@17 A B@5 ~@2 A B@5 ~@4>".pickRestart({
  A: "~ x!7", B: "x!8",
})).gain(0.24)

// drums · crash
const crash = s("cr").struct("<~@34 x ~@17 x ~@7 x ~@9>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@13 A B ~@5 C@2 ~@36 D C ~@6 D C ~@2>".pickRestart({
  A: "~@12 x!4", B: "x", C: "~@4 x!3 ~@9", D: "~@2 x ~ x!3 ~@9",
})).gain(0.24)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@13 A ~@6 B@2 ~@36 B@2 ~@6 B@2 ~@2>".pickRestart({
  A: "~@15 x", B: "~@5 x ~@10",
})).gain(1.91)

stack(
  bass, piano, string_ensemble_2, pad_bowed, electric_guitar_clean, lead_4_chiff, kick, rim, snare, hihat, crash, ride,
  bell_tree
)