Strudelify

60 Lessons for 2 Guitars Op.168

Joseph Küffner

KeyA majorTempo80 bpm
0:00/0:00
// 60 Lessons for 2 Guitars Op.168 — Joseph Küffner
// 80 bpm, 3/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5887256; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 73 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · acoustic guitar nylon · "Classical Guitar"
const acoustic_guitar_nylon = note(`<
  ~ A B C D E F G H I J K L M N O P Q@2 R S T U V W B C D E F X Y Z Y Z Y AA AB AC AD AE I J K L M N O P Q@2 R S T U V W
  B C D E F X Y Z Y Z Y AA AB AC AD AE
>`.pickRestart({
  A: "[a2,a3,c#4]@6 c#4 d4 b3@2 b3 c#4", B: "a3 c#4 e3@2 ~@2", C: "[e2,b3,d4]@3 [g#3,b3] [a3,c#4] [b3,d4]",
  D: "[a3,c#4]@2 [g#3,b3]!2 [a3,c#4] [b3,d4], e2", E: "[a2,c#4,e4]@3 [a3,c#4] [b3,d4] [c#4,e4]",
  F: "[d3,d4,f#4]@4 a4@8 g#4 ~ f#4 ~ e4 ~ d4 ~ c#4 ~ b3 ~", G: "a3 c#4 e4@3 a4 g#4 f#4 e4 d4 c#4 b3, e2 ~@2",
  H: "[e2,g#3,b3]@2 [a2,a3]", I: "[b3,g#4]@3 [b3,g#4] [a3,f#4] [g#3,e4]", J: "[g#3,e4]@3 [f#3,d#4] [f#3,d#4]@4 ~@4",
  K: "[f#4,a4]@3 [f#4,a4] [e4,g#4] [d#4,f#4]", L: "[d#4,g4]@3 [e4,g#4] [e4,g#4]@4 ~@4",
  M: "b4@10 a4 ~ g#4 ~ f#4 ~ e4 ~ d#4 ~ c#4 ~ c4 ~",
  N: "c#4@2 ~@2 f#4 ~ f4 ~ g#4 ~ f#4 ~ a4 ~ g#4 ~ b4 ~ a4 ~ g#4 ~ f#4 ~",
  O: "b4 ~ a#4 ~ a4 ~ g#4 ~ f#4 ~ e4 ~ d#4 ~ c#4 ~ b3 ~ a3 ~ g#3 ~ f#3 ~", P: "e3 ~@2", Q: "~@4 f4@3 e4 e4@4 ~@12",
  R: "d5 ~ d5 ~ d5 ~", S: "d5@6 b4 ~ g#4 ~ e4 ~", T: "f4@6 d4 ~ b3 ~ a3 ~",
  U: "g#3@2 b3 ~ f4@2 e4@2 d#4 ~ e4 ~ g#4 ~ f#4 ~ e4 ~ d4 ~ c#4 ~ b3 ~",
  V: "a3 ~ g#3 ~ f#3 ~ e3 ~ d#3 ~ e3 ~ f#3 ~ g#3 ~ a3 ~ a#3 ~ b3 ~ c4 ~", W: "[a2,a3,c#4]@6 c#4 d4 b3 ~ b3 c#4",
  X: "a3@2 c#4@2 e4@6 a4 ~ g#4 ~ f#4 ~ e4 ~ d4 ~ b3 ~ g#3 ~, e2 ~@2",
  Y: "~ c#4 ~ c#4 ~ c#4 ~ c#4 ~ c#4 ~ c#4, a3 e3 a3 e3 a3 e3",
  Z: "~@2 g#3 ~ b3 ~ g#3 ~ e4 ~ b3 ~ g#4 ~ f#4 ~ e4 ~ d4 ~ c#4 ~ b3 ~, e2@2 ~",
  AA: "~@2 a3 ~ d4 ~ a3 ~ f#4 ~ f4 ~ g#4 ~ f#4 ~ e4 ~ d4 ~ c#4 ~ b3 ~, d3@2 ~",
  AB: "~ a3 c#4 e4 a4 g#4 f#4 e4!2 d4 c#4 b3, e2@2 ~", AC: "a3@4 e3 a3 ~ c#4 e4@4 a3 c#4 ~ e4 a4@4 [e2,b3,d4,g#4]@4",
  AD: "[a2,c#4,e4,a4]@4 e3 a3 ~ c#4 e4@4 a3 c#4 ~ e4 a4@4 [e2,b3,d4,g#4]@4", AE: "[a2,c#4,e4,a4] [a2,a3] ~",
})).s("gm_acoustic_guitar_nylon").gain(0.3).pan(0.6)

// chords · acoustic guitar nylon · "Guitare classique"
const acoustic_guitar_nylon_2 = note(`<
  A B C D E F G H I J K L M N O P Q R@2 S T ~@3 B C D E F G H U V W V X Y Z AA AB AC J K L M N O P Q R@2 S T ~@3 B C D E
  F G H U V W V X Y Z AA AB AC
>`.pickRestart({
  A: "~ [e3,a3,c#4]!5, a2", B: "~ [e3,a3,c#4]!3 ~ [e3,g#3,d4], a2@2 e2",
  C: "~ e3 a3 c#4 e4 c#4 a4 g#4 f#4 e4 d4 c#4, a2", D: "~ g#3 b3 g#3 ~ g#3 b3 g#3 ~ a3 d3 d4, e2@2 e3@2 a2 ~",
  E: "e2 e3 e2 e3 e2 e3 e4 e3 e2 e3 e4 e3", F: "~ e3 a3 c#4 a2@4 ~@4, a2 ~@2", G: "~ a3 d4 f#4 d3@4 ~@4, d3 ~@2",
  H: "~ [e3,a3,c#4]!3 ~ [e3,g#3,d4], e2@2 e2", I: "~ e3 g#3 e3 d4 e3 g#3 e3 [a2,e3,a3,c#4]@4, e2@2 ~",
  J: "e2 e3 e4 e3 e2 e3 e4 e3 e2 e3 e4 e3", K: "b2 b3!3 b2 b3 c#4 b3 f#3 b3 d#3 b3",
  L: "b2 b3 b2 b3 b2 b3 b2 b3 b2 b3 b2 b3", M: "~ e3 g#3 b3 e4 b3 g#4 e4 b3 e4 g#3 b3, e2@2 ~", N: "[g#3,b3,e4]@2 ~",
  O: "[a2,a3,c#4,e4] ~ [a2,a3,c#4,f#4]", P: "[b2,g#3,b3,e4] ~ [b2,a3,b3,f#4]",
  Q: "~ g#3 b3 e4 e2@2 [e2,a#3,c#4,e4]@2 [e2,b3,d4,e4]@2 [e2,a#3,c#4,e4]@2, e2 ~@2", // A#dim E7 A#dim
  R: "[e2,b3,d4,e4]@2 ~ [e2,a#3,c#4,e4] [e2,b3,d4,e4] [e2,a#3,c#4,e4]", // E7 A#dim E7 A#dim
  S: "[e2,b3,d4,e4] [e2,a#3,c#4,e4] [e2,b3,d4,e4] [e2,a#3,c#4,e4] [e2,b3,d4,e4] [e2,a#3,c#4,e4]", T: "[e2,b3,d4,e4] ~",
  U: "[a2,e3,a3,c#4]@2 ~ [c#4,a4]!3", V: "[b3,g#4]@2 ~ [e2,b3,d4]!3", W: "[a2,a3,c#4]@2 ~ [c#4,a4]!3",
  X: "[a2,a3,c#4]@2 ~ [a2,c#4,e4]!3", Y: "[d3,d4,f#4]@2 ~ [d3,b3,d4]!3", Z: "[e2,a3,c#4] ~ [e2,g#3,b3]",
  AA: "[a2,a3]@2 ~@3 [e2,g#3,d4,e4]", AB: "[a2,a3,c#4,e4]@2 ~@3 [e2,g#3,d4,e4]", AC: "[a2,a3,c#4,e4] [a3,c#4,e4,a4] ~",
})).s("gm_acoustic_guitar_nylon").gain(0.17).pan(0.4)

stack(acoustic_guitar_nylon, acoustic_guitar_nylon_2)