Strudelify

Junger Adler

Tom Astor

KeyA majorTempo86 bpm
0:00/0:00
// Junger Adler — Tom Astor
// 86 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 8 "STEEL GTR" acoustic guitar steel (copy of ch 3 "HARPSICHRD" harpsichord)
// note: Full arrangement: all 76 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(86/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 · fretless bass · "FRETLESS"
const bass = note(`<
  ~@2 A B C D A E C D F B A G A E C D A E A G A E C D A E A G A E C D@2 A B C D A E C D F B A G A E C D A E A G A E C D
  A E A G A E C H A E A G A E C I ~
>`.pickRestart({
  A: "a1 ~ e1 ~ a1 ~ e1 ~", B: "a1@2 ~@4 e1@3 ~@3 a1@3 ~@3 e1@3 ~@3", C: "a1 ~ e1 ~ b1 ~ e1 ~",
  D: "a1@3 ~@3 e1@4 ~@2 a1@3 ~@3 e1@4 ~@2", E: "d1@2 ~@4 a1@3 ~@3 a1@3 ~@3 e1@3 ~@3", F: "d1 ~ a1 ~ d1 ~ d1 ~",
  G: "b1@3 ~@3 e1@4 ~@2 b1@3 ~@3 e1@4 ~@2", H: "a1@23 ~", I: "a1@3 ~@3 e1@4 ~@2 a1@12",
})).s("gm_fretless_bass").gain(0.43)

// chords · harpsichord · "HARPSICHRD"
const harpsichord = note("<A@8 B@8 C@16 D@8 E@8 F@24 G@3 ~>".pickRestart({
  A: "[[c#4,e4,a4]@3 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [b3,e4,g#4]@5 [b3,e4,g#4] [b3,e4,g#4]@2 [b3,e4,g#4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [d4,f#4,a4]@6 [d4,f#4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]]/8", // A E A D A
  B: "[~@3 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [b3,e4,g#4]@5 [b3,e4,g#4] [b3,e4,g#4]@2 [b3,e4,g#4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [d4,f#4,a4]@6 [d4,f#4,a4]@6 [d4,f#4,a4]@5 [d4,f#4,a4] [d4,f#4,a4]@2 [d4,f#4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [b3,e4,g#4]@6 [b3,e4,g#4]@6 [b3,e4,g#4]@5 [b3,e4,g#4] [b3,e4,g#4]@2 [b3,e4,g#4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [d4,f#4,a4]@6 [d4,f#4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]]/8", // A E A D A E A D …
  C: "[~@3 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [b3,e4,g#4]@5 [b3,e4,g#4] [b3,e4,g#4]@2 [b3,e4,g#4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [d4,f#4,a4]@6 [d4,f#4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [b3,e4,g#4]@6 [b3,e4,g#4]@6 [b3,e4,g#4]@5 [b3,e4,g#4] [b3,e4,g#4]@2 [b3,e4,g#4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [d4,f#4,a4]@6 [d4,f#4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]]/8", // A E A D A E A D …
  D: "[~@3 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [b3,e4,g#4]@5 [b3,e4,g#4] [b3,e4,g#4]@2 [b3,e4,g#4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [b3,e4,g#4]@5 [b3,e4,g#4] [b3,e4,g#4]@2 [b3,e4,g#4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]]/8", // A E A E A
  E: "[~@3 [d4,f#4,a4]@6 [d4,f#4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [b3,e4,g#4]@5 [b3,e4,g#4] [b3,e4,g#4]@2 [b3,e4,g#4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [d4,f#4,a4]@6 [d4,f#4,a4]@6 [d4,f#4,a4]@5 [d4,f#4,a4] [d4,f#4,a4]@2 [d4,f#4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [b3,e4,g#4]@6 [b3,e4,g#4]@6 [b3,e4,g#4]@5 [b3,e4,g#4] [b3,e4,g#4]@2 [b3,e4,g#4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]]/8", // D A E A D A E A
  F: "[~@3 [d4,f#4,a4]@6 [d4,f#4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [b3,e4,g#4]@5 [b3,e4,g#4] [b3,e4,g#4]@2 [b3,e4,g#4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [d4,f#4,a4]@6 [d4,f#4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [b3,e4,g#4]@6 [b3,e4,g#4]@6 [b3,e4,g#4]@5 [b3,e4,g#4] [b3,e4,g#4]@2 [b3,e4,g#4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]]/8", // D A E A D A E A
  G: "[~@3 [d4,f#4,a4]@6 [d4,f#4,a4]@6 [c#4,e4,a4]@5 [c#4,e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 [b3,e4,g#4]@5 [b3,e4,g#4] [b3,e4,g#4]@2 [b3,e4,g#4]@4 [c#4,e4,a4]@6 [c#4,e4,a4]@6 ~@9]/3", // D A E A
})).s("gm_harpsichord").gain(0.1).pan(0.3)

// other · bandoneon · "BANDNEON"
const bandoneon = note(`<
  A@4 B@2 C@2 B@2 D E F G C@2 B@2 H@2 I@2 J@2 K@2 H@2 I@2 J@2 L@2 ~ C@2 B@2 C@2 B@2 D E F G C@2 B@2 H@2 I@2 J@2 K@2 H@2
  I@2 J@2 K@2 H@2 I@2 J@2 K@2 ~
>`.pickRestart({
  A: "[~@3 a2 a4@4, ~@23 a3@48 ~@25]/4", B: "[[c#4,c#5]@9 [e4,e5]@3 [c#4,c#5]@6 [b3,b4]@5 [a3,a4]@24 ~]/2",
  C: "[a3,a4]/2", D: "[d4,d5]", E: "[a3,a4,c#5]", F: "[c#4,c#5]@3 [e4,e5] [c#4,c#5]@2 [b3,b4]@2", G: "[e4,e5]",
  H: "[c#5@5 ~ c#5@4 ~ e5 c#5@6 b4@6 a4@5 ~ a5@4 ~ f#5 f#5@3 e5@9, a3, a4 ~]/2",
  I: "[[c#5,c#6]@9 [e5,e6]@3 [c#5,c#6]@6 [b4,b5]@5 [e5,e6]@24 ~]/2", // C# E C# B E
  J: "[c#5@6 c#5@3 e5@3 c#5@6 b4@3 a4@3 b4@6 a4@4 ~ f#5 f#5@2 ~ e5@9, a3, a4@7 ~@9]/2",
  K: "[c#6@5 ~ c#6@3 [e4,e5,e6]@3 [c#4,c#5,c#6]@6 [b3,b4,b5]@5 ~ a5@22 ~@2, [c#4,c#5]@9 ~@14 [a3,a4]@24 ~]/2", // E C# B C# A
  L: "[c#6@5 ~ c#6@3 [e4,e5,e6]@3 [c#4,c#5,c#6]@6 [b3,b4,b5]@5 ~ a5@12 ~@12, [c#4,c#5]@9 ~@14 [a3,a4]@24 ~]/2", // E C# B C# A
})).s("gm_bandoneon").gain(0.2).pan(0.3)

// chords · electric guitar jazz · "+HAWAIIGTR"
const electric_guitar_jazz = note(`<
  ~@3 A@2 B ~ C@2 D E F ~ G H C@2 ~@2 C@2 ~@6 C@2 ~@7 A@2 B ~ C@2 D E F ~ G H C@2 ~@2 C@2 ~@6 C@2 ~@6 C@2 ~@6
>`.pickRestart({
  A: "[~@17 a3 b3@2 e4@17 ~@11, ~@20 c#4@15 ~@13]/2", B: "~@8 a3 b3@2 c#4@12 ~",
  C: "[~@18 b3@2 e4@17 ~@11, f#3 e3 ~@2, ~@6 a3@11 a3@11 ~@20, ~@20 c#4@15 ~@13]/2",
  D: "~@11 c#4@2 ~@2 b3@2 ~ a3@4 ~@2", E: "~ a3@6 ~@5, ~ f#3@14 ~@9", F: "~ c#4@11 ~@12, ~ a3@8 ~@15",
  G: "~@16 b3 ~ e3@3 f#3@3", H: "a3 ~@11",
})).s("gm_electric_guitar_jazz").gain(0.17).pan(0.7)

// drums · kick
const kick = s("bd").struct("<[x!2]!66 ~ [x!2]!8 ~>").gain(0.44)

// drums · snare
const snare = s("sd").struct("<~@2 [~ x ~ x]!48 [~@6 x ~@10 x!2 ~@2 x ~ x] [~ x ~ x]!15 ~ [~ x ~ x]!7 [~ x ~@2] ~>")
  .gain(0.44)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@2 A B@2 C A B@2 C D E F G A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C H A B@2 C A B@2 C D E F G A B@2 C A B@2 C A B@2 C
  A B@2 C A B@2 C A B@2 C A B@2 I ~
>`.pickRestart({
  A: "x!2 ~ x!3 ~ x", B: "x!8", C: "x!2 ~ x ~ x!3", D: "x ~@2 x ~@5 x ~ x!2 ~@2 x ~@4 x!2 ~ x",
  E: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x!2 ~@2 x ~@2", F: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x!2 ~ x",
  G: "x ~@2 x ~@5 x ~@4 x!2 ~@2 x ~@2 x ~@2", H: "~ x ~ x ~ x!3", I: "x!2 ~ x ~@4",
})).gain(0.31)

// drums · pedal hat · soft notes
const pedal_hat_soft = s("hh").struct(`<
  ~@2 A ~@2 B A ~@2 B A ~ C B A ~@2 B A ~@2 B A ~@2 B A ~@2 B A ~@2 B@2 A ~@2 B A ~@2 B A ~ C B A ~@2 B A ~@2 B A ~@2 B
  A ~@2 B A ~@2 B A ~@2 B A ~@2 B ~
>`.pickRestart({
  A: "~ x ~ x", B: "~ x!2 ~", C: "~@11 x ~@12",
})).gain(0.12)

// drums · mid tom
const mid_tom = s("mt").struct("<[~ x ~ x]!66 [x!4] [~ x ~ x]!7 [~ x ~@2] ~>").gain(0.44)

// drums · crash
const crash = s("cr").struct("<~@74 [~ x] ~>").gain(0.19)

stack(bass, harpsichord, bandoneon, electric_guitar_jazz, kick, snare, pedal_hat, pedal_hat_soft, mid_tom, crash)

More by Tom Astor