Strudelify

Walk Away Renee

The Left Banke

KeyA majorTempo120 bpm
0:00/0:00
// Walk Away Renee — The Left Banke
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 2 "Melody" synth choir (copy of ch 3 "Melody [double]" alto sax)
// note: Full arrangement: all 79 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · pad choir · "Harmony"
const pad_choir = note(`<
  ~@11 A@2 B C D@2 E F G H ~@9 D@2 B C D@2 E F I H ~@8 D@2 J C D@2 E F G H ~@9 D@2 J C D@2 E K L M@2 ~
>`.pickRestart({
  A: "[~@2 [c#4,g#4]@2 [d4,a4] [e4,a4,b4]@2 [f#4,c#5]@3 [e4,a4,b4] [c#4,a4]@4 ~]/2", // C#5 D5 Esus4 F#5 Esus4 F#m
  B: "[e4,a4]@2 [e4,a4]!3 a4@2 a4, ~@5 e4@3", C: "a4 g#4",
  D: "[~@4 [c#4,g#4]@4 [d4,a4]@2 [e4,a4,b4]@4 [f#4,c#5]@5 ~ [e4,a4,b4]@2 [c#4,a4]@8 ~@2]/2", // C#5 D5 Esus4 F#5 Esus4 F#m
  E: "[e4,a4]@2 [e4,a4]!3 [e4,a4]@3", F: "[e4,g#4]", G: "~@2 [e4,a4]@2 [e4,a4] [d4,e4,a4]@3", H: "[c#4,e4]",
  I: "~@2 e4@2 e4 e4@3", J: "[e4,a4]@2 [e4,a4]!3 [e4,a4]@2 [e4,a4]", K: "g#4@3 a4, e4", L: "~@2 e4@2 e4 [d4,e4]@3",
  M: "[[c#4,e4]@3 ~]/2", // C#m
})).s("gm_pad_choir").gain(0.44)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  A@3 ~@8 B C D E B C D F A@3 G H I J K L M N B C D E B C D O P@2 ~@8 B C D E B C D O A@3 G H I J K L M N B C D E B C D
  O Q@3 ~
>`.pickRestart({
  A: "[[f#5,a5]@3 [e5,a5]@3 d5@2 c#5@16, ~ a5@3]/3", B: "[c#5,a5]", C: "~@3 g#5, [c#5,a5]", D: "[f#5,a5]",
  E: "[e5,a5] [e5,g#5]", F: "a5@2 g#5 a5, c#5", G: "[c#5,e5]", H: "[b4,e5]", I: "g5@2 f#5 e5, b4", J: "[a4,f#5]",
  K: "[a4,f5]", L: "[a4,e5]", M: "[a4,d5]", N: "[a4,d#5]", O: "g#5@3 a5, c#5",
  P: "[[f#5,a5]@3 [e5,a5]@3 d5@2 c#5@8, ~@3 a5@5]/2", Q: "[[f#5,a5]@3 [e5,a5]@3 d5@2 c#5@12 ~@4, ~ a5@2 ~]/3",
})).s("gm_string_ensemble_1").gain(0.56).pan(0.7)

// other · violin
const violin = note(`<
  A B@3 C D E F C G H ~@5 I ~@2 A J@2 K L M N@2 O G H C E N P C E N C A K@2 ~@7 C Q ~@3 I ~@2 A J@2 K R M S T U G H C E
  N ~ C ~@3 A V@2 ~
>`.pickRestart({
  A: "d4@3 c#4@3 b3@2", B: "a3/3", C: "e4", D: "g4", E: "f#4", F: "f4", G: "f#4 e4 d4 c#4", H: "b3", I: "~@3 g#5",
  J: "a3/2", K: "a3", L: "e5", M: "g5@2 f#5 e5", N: "d4", O: "c#4", P: "c#4 b3", Q: "f#4@2 ~ g#5", R: "[e4,e5]",
  S: "[d4,f#4]", T: "[d4,f4]", U: "[c#4,e4]", V: "[a3@3 ~]/2",
})).s("gm_violin").gain(0.35).pan(0.7)

// chords · harpsichord
const harpsichord = note(`<
  A B C D E F G@2 H I J K@4 L@2 M@3 B C D E F G@2 H I N K@4 L@2 O@2 A B P Q R S T U V W K@4 L@2 O@2 A B C D E F G@2 H I
  N K@4 L@2 O@2 A ~@3
>`.pickRestart({
  A: "f#4 d4 a3 e4 c#4 a3 b3 a3", B: "a2 a3 a4 a2!2 e3 a4 b4", C: "a2 a3 a4 a2!2 e3 a4 g#4",
  D: "a2 a3 ~ a2!2 ~ a3 e3, a4 ~, ~@3 e5@2 e5@2 ~", E: "g#2 e3 g#3 e5 g#2 e3 ~ g#2, ~@2 e5 [g#4,e5]",
  F: "g2 g3 ~ g2 [g2,b4] ~ g2 d5, ~@2 b4@2 ~ c#5@2 ~", // G
  G: "[f#2 f#3 ~ f#2!2 [f#4,a4,d5]@2 ~ f2 f3 ~ f2 [f2,a4] d3 ~ f2, ~@3 [f#4,b4]@2 d3 ~ [f#4,d5]@2 ~ g#4@2 ~ b4@3]/2", // D F B5 D
  H: "e2 e3 b4 e2!2 ~ e3 e2, c#5@2 ~ [a4,c#5]@2 c#5@2 ~", // A
  I: "f#2 f#3 ~ e3 [d3,d4] [a3,d4,f#4]@2 [c#3,a3,d4,f#4], d4@2 f#4@3 ~@3, ~@2 [a3,d4]@2 ~ d3 ~@2", // D Dmaj7 D5
  J: "[b2,d#4,f#4,b4]@2 [c#4,e4,a4] [d#4,f#4,b4]@2 [c#4,e4,a4] [d#4,f#4,b4]@2", // B A B A B
  K: "[a3!2 ~ a3!2 ~ a3 ~ f#3!2 ~ f#3!2 ~ f#3 ~ d3!2 ~ d3!2 ~ d3 ~ a2 ~ a2 [c#3,e4,a4,c#5] e3!4, ~@2 [e4,a4,c#5]@3 [e4,a4,c#5]@2 [e4,a4,c#5]@2 ~ [f#4,a4,c#5]@3 [f#4,a4,c#5]@2 [f#4,a4,c#5]@2 ~ [f#4,a4,d5]@3 [f#4,a4,d5]@2 [f#4,a4,d5]@2 [e4,a4,c#5]@2 ~ [e4,g#4,b4]@4]/4", // A F#m D A E
  L: "[a3!2 ~ a3!2 ~ a3 ~ f#3!2 ~ f#3!2 ~ f#3 [f#4,a4,c#5], ~@2 [e4,a4,c#5]@3 [e4,a4,c#5]@2 [e4,a4,c#5]@2 ~ [f#4,a4,c#5]@3 [f#4,a4,c#5]@2 ~]/2", // F#m A F#m
  M: "[[d3,f#4,a4,c#5] d3 ~ d3!2 ~ d3 ~ c#3 ~ c#3!2 [c#3,e4,b4] [e4,b4] [c#3,e4,a4] c#3 f#4 d4 a3 e4 c#4 a3 b3 a3, ~@2 [f#4,a4,d5]@3 [f#4,a4,d5]@2 [f#4,a4,d5]@2 ~@6 [e4,b4]@2 ~@7]/3", // Dmaj7 C#m7 E5 A D E5
  N: "[d#4,f#4,b4] ~ [c#4,e4,a4] [d#4,f#4,b4]@2 [c#4,e4,a4] [d#4,f#4,b4]@2, b2 ~@3, ~ [d#4,f#4,b4]@2 ~@5", // B A B A B
  O: "[[d3,f#4,a4,c#5] d3 ~ d3!2 ~ d3 ~ c#3 ~ c#3!3 [c#3,e4,b4] c#3!2, ~@2 [f#4,a4,d5]@3 [f#4,a4,d5]@2 [f#4,a4,d5]@2 ~@2 [e4,b4]@2 ~ [e4,a4]@2]/2", // Dmaj7 C#m7 D E5 A5
  P: "f#3 a3 c#4 a3 f#3 a3 c#4 a3", Q: "f3 a3 c#4 a3 f3 a3 c#4 a3", R: "e3 a3 c#4 a3 e3 a3 c#4 a3, ~ [e4,b4]!2 ~",
  S: "d#3 a3 c#4 a3 d#3 a3 c#4 a3, ~ [d#4,f#4,b4]!3", // B
  T: "~ g#3 b3 [d3,g#3] ~ g#3 b3 d3, d3@3 ~ d3@3 ~, ~ [e4,g#4,b4] ~ [e4,g#4,b4]", // Ddim E
  U: "~ e3 a3 c#3 ~ e3 a3 c#3, c#3@3 ~ c#3@3 ~, ~ [e4,a4] ~ [e4,a4]", // A5
  V: "~ f#3 a3 d3 ~ f#3 a3 d3, d3@3 ~ d3@3 ~, ~ [d4,f#4,a4] ~ [d4,f#4,a4]", // D
  W: "[d#4,f#4,b4] ~ [c#4,e4,a4] [d#4,f#4,b4]@2 [c#4,e4,a4] [d#4,f#4,b4]@2, ~ [d#4,f#4,b4]@2 ~@5", // B A B A B
})).s("gm_harpsichord").gain(0.45).pan(0.3)

// chords · clavinet · "Piano"
const clavinet = note("<~ A@2 ~@8 B ~@3 B ~@2 C@2 A@2 ~@17 A D E D F G H I J B ~@3 B ~@26>".pickRestart({
  A: "~ [c#4,e4,a4] ~ [c#4,e4,a4]", B: "[c#4,e4,a4] ~", C: "[~@4 [e4,b4]!2 [e4,a4] [e4,b4]@2 ~@7]/2",
  D: "~ [c#4,f#4,a4] ~ [c#4,f#4,a4]", E: "~ [c#4,f4,a4] ~ [c#4,f4,a4]",
  F: "~@3 b4@3 [c#4,f#4,a4]@2, ~ [c#4,f#4,a4] ~@2", G: "~ [e4,g#4,b4] ~ [e4,g#4,b4]", H: "~ [e4,a4] ~ [e4,a4]",
  I: "~ [d4,f#4,a4] ~ [d4,f#4,a4]", // D
  J: "[d#4,f#4,b4] ~ [c#4,e4,a4] [d#4,f#4,b4]@2 [c#4,e4,a4] [d#4,f#4,b4]@2, ~ [d#4,f#4,b4]@2 ~@5", // B A B A B
})).s("gm_clavinet").gain(0.32)

// bass · electric bass finger · "Bass"
const bass = note(`<
  A B@2 C D E F G H I J K L M N K L M O A B@2 C D E F G H I P K L M N K L M O A B Q R S T U V U W K L M N K L M O A B@2
  C D E F G H I P K L M N K L M O A X@3
>`.pickRestart({
  A: "d2@3 c#2@3 b1@2", B: "a1@3 a1 a1@2 e1!2", C: "a1@3 a1 a1@3 a1", D: "g#1@3 g#1 g#1@3 g#1", E: "g1@3 g1 g1@3 g1",
  F: "f#1@3 f#1 f#1@3 f#1", G: "f1@3 f1 f1@3 f1", H: "e1@3 e1 e1@3 e1", I: "~ e1 d1 c#1, f#1@3 ~@5",
  J: "b1@2 b0 b1@2 b0 b1 b0", K: "a1@3 a1 e1@2 e1@2", L: "f#1@3 f#1 c#1@2 c#1@2", M: "d1@3 d1 d1@3 d1",
  N: "a1@3 a1 e2@2 e1@2", O: "c#1@3 c#1 c#1@3 c#1", P: "b1@2 a1 b1@2 a1 b1 ~", Q: "f#2@3 f#2 f#2@3 f#2",
  R: "f2@3 f2 f2@3 f2", S: "e2@3 e2 e2@3 e2", T: "d#2@3 d#2 d#2@3 d#2", U: "d2@3 d2 d2@3 d2", V: "c#2@3 c#2 c#2@3 c#2",
  W: "b1@2 a1 b1@2 a1 b1@2", X: "a1/3",
})).s("gm_electric_bass_finger").gain(0.52).pan(0.4)

// drums · snare
const snare = s("sd").struct("<A B@9 ~ B@3 C B@14 ~ B@3 C B@3 D B@9 ~ B@3 C B@4 A B@9 ~ B@3 C B@4 A ~@3>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "~@4 x ~@3 x!3 ~ x ~ x ~",
})).gain(0.33).pan(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@10 A ~@3 B C ~@13 A ~@3 D ~@3 E C ~@8 A ~@3 B C ~@13 A ~@3 B C ~@7>".pickRestart({
  A: "~@2 x!6", B: "~@8 x ~@2 x!2 ~ x ~", C: "x", D: "~@8 x ~ x!3 ~ x ~", E: "~@11 x ~@4",
})).gain(0.44).pan(0.4)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@10 A ~@18 A ~@17 A ~@18 A ~@12>".pickRestart({
  A: "x!2 ~@6",
})).gain(0.27).pan(0.4)

// drums · crash
const crash = s("cr").struct("<~@11 A ~@3 A ~@14 A ~@3 A ~@3 A ~@9 A ~@3 A ~@14 A ~@3 A ~@7>".pickRestart({
  A: "x",
})).gain(0.55).pan(0.4)

// drums · ride
const ride = s("rd").struct("<A@10 ~ A@18 ~ A@17 ~ A@18 ~ A@8 B C ~@2>".pickRestart({
  A: "x!8", B: "x!4 ~@2 x ~", C: "x",
})).gain(0.49).pan(0.4)

stack(pad_choir, string_ensemble_1, violin, harpsichord, clavinet, bass, snare, low_tom, low_tom_soft, crash, ride)