Strudelify

Longer

Dan Fogelberg

KeyG majorTempo85 bpm
0:00/0:00
// Longer — Dan Fogelberg
// 85 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 62 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(85/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 · piano
const piano = note(`<
  A B A C D E F@2 G H I J I K L@2 G H I J I K M N O P O Q O R S T G H I U V W X@2 Y@2 Z AA Z AA Z AB AC@2 G H AD AE AF
  AG AH@2 AI@2 AJ AK
>`.pickRestart({
  A: "b3 d3 g3 d4 ~ e3 g3 d4, g2 a2, d4@3 ~ c4@3 ~", B: "~ f#3 g3 d4 ~ g3!2 d4, b2 c3, d4@3 ~ e4@3 ~",
  C: "d4 e4 f#4 ~ g3 c4 e4 c4, b2@3 c3@5, ~@3 g4@3 g4@2",
  D: "g2 d3 ~ [d4,g4] a2 e3 ~ d4, [b3,b4]@3 ~ a4@4, ~@2 g3@2 c4@3 ~, ~@3 g3", // G5 B
  E: "[b2,d4] [f#3,e4] [g3,d4] g3 [c3,g3] g3 ~ d4, b4 c5, ~@3 g3", // Bm F#7 G5 C5
  F: "[[a#2,d4] [d3,c4] a#3 ~ a2 d3 a3 ~ g2 d3 g3 [g3,b3] g2 ~ f#3!2, d5@2 c5@2 b4@2 ~ d4, ~ f3 ~ f#3 ~@2 [e3,c4] ~, ~@3 c4@3 ~ g3@3 ~@3 g2@2 ~]/2", // A# D7 G C
  G: "g2@2 d3@2 d5@2 b4 ~ a2@2 e3@2 b4@2 [d4,c5]@2, d4@3 d4 c4@3 ~, ~@4 b3@3 a4@5 g3@4", // D7
  H: "[b2,d5]@2 ~ e5 d5@2 [d4,b4]@2 [c3,g4]@2 g3@2 ~@2 d4@2, d4@3 ~ e4@3 ~, ~ f#3 g3@2 ~ a4@2 ~, ~@3 g3", // Bm G C5
  I: "g2@2 d3@2 d5@2 b4 ~ a2@2 e3@2 b4@2 [d4,c5]@2, d4@3 d4 c4@3 ~, ~@4 g3@3 a4@5 g3@4", // D7
  J: "[b2,d5]@2 [f#3,e5]@2 f#5@2 d5 ~ c3@2 g3@2 ~@2 d4@2, d4@3 d4 e4@3 ~, ~@4 g3@3 e5@7 ~@2, ~@3 g3", // Bm F#7
  K: "b2@2 f#3@2 [g3,e5] ~ [d4,b4]@2 [c3,g4]@2 g3@2 ~@2 d4@2, d4@3 ~ e4@3 ~, d5@4 ~ [g3,d5]@3 ~@2 a4@4 ~@2, ~@3 g3", // C G C5 G5
  L: "[[a#2,d5] [f3,c5] a#4 d4 a2 d3 a4 ~ g2 d3 ~ b3 [g3,c4]@2 ~ f#3, d4@3 c5@3 f#3@2 ~@2 g3@2 g2@3 ~, ~@2 a#3@2 c4@4 b3@3 ~@3 [a3,d4]@2, ~@7 g4@5 ~@4]/2", // A# F5 C5 D5
  M: "[a#2,d5] [f3,c5] a#4 d4 a2 d3 a4 g4, d4@3 c5@3 f#3@2, ~ a#3 c4@2", // A# F5
  N: "g2 [d3,d4] g3 [b3,a4] [g4,b4] [g3,g4] [b3,d5] [g3,e5], g4!2 ~@2", // D B7 G Bm C
  O: "c3 a3 c4 [g4,e5] c3 g3 c4 d3, [c5,f5]@3 ~ [c5,e5]@2 ~@2", // C F5 C
  P: "[a#2,c5]@2 d5 ~@2 f5 f4@2 a#2@2 a#3@2 f3@2 a#2@2, ~ g3 a#3 ~@5, ~@3 d#5@2 ~ d5@4 a#4@4 ~@2", // A#sus2
  Q: "f5 ~@7 a#2@2 d5 c5 f3@2 a#2@2, a#2 g3 a#3 f4 ~ a#3 ~@2, ~ d#5@2 d5@2 c5@2 d#5@3 ~ a#4@3 ~@2",
  R: "c5 d5 g3@2 a#3@2 [f4,f5]@2 d5 ~ a#3@2 f3@2 [a#2,d4]@2, a#2 d#5@2 ~ a#2 ~@3, ~@9 a#4@3 ~@4", // F A#
  S: "g3@2 c4@2 d4@2 c4@2 f#3@2 c4@2 ~ c5 b4 a4, d5@6 d4 c4",
  T: "f3@2 c4@2 d4@2 c4@2 f#3@2 d5 e5 d5 c5 b4 a4, a4@4 ~ c4 d4 [f#3,a3]", // F#m
  U: "[b2,d5]@2 [f#3,e5]@2 f#5@2 d5 ~ c3@2 g3@2 ~@2 d4!2, d4@3 d4 e4@3 ~, ~@4 g3@3 e5@7 ~@2, ~@3 g3", // Bm F#7
  V: "g2@2 d3@2 b4@2 d4@2 a2@2 e3@2 ~ b4 c5!2, d4@3 a4@3 g3@2, d5@2 g3@2 c4@3 d4",
  W: "b2@2 f#3@2 [g3,e5] ~ d4@2 c3@2 g3@2 ~@2 d4@2, d4@3 g4@2 a4@2 ~, d5@4 ~ [g3,d5]@3 e4@6 ~@2, ~@3 g3", // C G5
  X: "[[a#2,d5] [f3,c5] a#4 d4 a2 d3 a4 ~ g2 d3 g3 b3 d4 g3@2 d3, d4@3 c5@3 f#3@2 ~@8, ~@2 a#3@2 c4@4 b3@3 ~@5, ~@7 g4@5 ~@4]/2", // A# F5
  Y: "[[a#2,d5] [f3,c5] a#4 d4 a2 d3 [a4,f#5] ~ g2 d3 g3 b3 g4 g3 b3 g3, d4@3 c5@3 ~ [b4,g5]@9, ~ a#3 c4 f#3 ~@4]/2", // A# F5 D Em
  Z: "c3@2 d5 e5 [c4,f5]@2 [g4,g5]@2 [c3,e5]@2 [g3,c5]@2 c4@2 d3@2, ~ a3 ~@4 g4@2", // F5 G C C5
  AA: "a#2@2 c5 d5 [a#3,d#5]@2 [f4,f5]@2 [a#2,d5]@2 [a#3,a#4]@2 f3@2 a#2@2, ~ g3 ~@4 f4@2", // D#5 F A#
  AB: "a#2@2 c5 d5 [a#3,d#5]@2 d5 c5 [a#2,d5]@2 [a#3,f5]@2 [f3,a#4]@2 [a#2,c5]@2, ~ g3 ~ f4 ~@4", // D#5 A# A#5 A#sus2
  AC: "[g3@2 c4@2 d4@2 c4@2 f#3@2 c4@2 d4@2 c4@2 f3@2 c4@2 d4@2 c4@2 f#3@2 d5 e5 d5 c5 b4 a4, d5@12 ~ c4 d4 c4]/2",
  AD: "g2@2 d3@2 d5@2 b4 ~ a2@2 e3@2 b4@2 [d4,c5]@2, b3@3 d4 c4@3 ~, ~@4 g3@3 a4@5 g3@4", // D7
  AE: "[b2,d5]@2 [f#3,g5]@2 f#5@2 d5 ~ c3@2 g3@2 ~@2 d4@2, d4@3 d4 e4@3 ~, ~@4 g3@3 e5@7 ~@2, ~@3 g3", // Bm Gmaj7
  AF: "g2@2 d3@2 [g3,d5,g5]@2 [b4,d5] ~ a2@2 e3@2 [g3,b4,d5]@2 [d4,c5,e5]@2, b3@2 ~ b3 ~@4, ~@7 [a4,c5]@5 ~@4", // G5 Bm G C Am
  AG: "b2@2 f#3@2 [e5,g5] [d5,g5] ~ [b4,g5] g4 g3 g3@2 d4@2 [a#2,f4,d5]@2, [d5,f#5]@4 g3@3 ~ c3@2 ~@6, ~@5 b3@2 ~@2 a4@5 ~@2", // Em G5 Em A# D
  AH: "[[f3,e4,c5] [d4,a#4] ~ a2 d3 [c4,a4] ~ g2 d3 g3 b3 d4 g3@2 d3 [a#2,f4,d5], ~ a#3@2 ~@2 f#3@2 ~@9, ~@2 [e4,c5]@3 ~ g4@5 ~@5, ~@3 b3@2 ~@3]/2", // Fmaj7 Gm F A# C
  AI: "[[f3,e4,c5] [d4,a#4] ~ a2 d3 [a4,f#5] ~ g2 d3 g3 b3 d4 g3@2 d3 [a#2,d4], ~ a#3@2 ~@2 f#3@2 ~@9, ~@2 [e4,c5]@3 ~ [b4,g5]@5 ~@5]/2", // Fmaj7 Gm D A# C Em
  AJ: "c4 a#3 ~ a2 ~ a3 g3 g2, f3@3 ~ f3@3 ~, ~@2 c4@3 ~@3", AK: "d3 ~ g4@5 ~, ~ [d3,b3]@6 ~",
})).s("gm_piano").gain(0.51)

stack(piano)

More by Dan Fogelberg