Strudelify
Echo der Berge cover art

Echo der Berge

Henry Arland

KeyB♭ majorTempo90 bpm
0:00/0:00
// Echo der Berge — Henry Arland
// 90 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 61 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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@8 B C@2 D E@2 F G@2 H I@2 J C@2 D E@2 F G@2 H I@2 J C@2 D E@2 F G@2 H I@2 J C@2 D E@2 F G@2 H K@2 H L@4
>`.pickRestart({
  A: "[~@10 bb1@42 bb1@6 f1@24 f1@19 f1@2 ~ g1@2 a1@2 bb1@10 d2@2 f2@6 f1@2]/8", B: "g1 a1 bb1@5 f1",
  C: "[bb1@3 bb1 a1 g1 f1@5 a1 c2@3 a1]/2", D: "bb1 c2 f1@5 a1", E: "[c2@3 f1 g1 a1 bb1@5 d2 f2@3 d2]/2",
  F: "eb2 f2 bb1@5 f1", G: "[bb1@3 bb1 c2 d2 eb2@5 bb1 eb2@3 eb2]/2", H: "d2 c2 bb1@5 bb1",
  I: "[f1@3 f1 g1 a1 bb1@4 d2 f2 bb1@3 ~]/2", J: "~@2 bb1@5 f1", K: "[f1@3 f1 g1 a1 bb1@4 d2 f2 eb2@3 eb2]/2",
  L: "[f1@12 f1@2 ~ bb1@11 d2@2 f2@7 ~ f1@8 bb1@14 ~@6]/4",
})).s("gm_electric_bass_finger").gain(0.39)

// other · soprano sax · "SOPRAN SAX"
const soprano_sax = note(`<
  ~@5 A ~@8 B C@2 D E@2 F@2 G H@3 I@3 J K@2 ~@6 L M@2 N O@2 F@2 G P@3 I@3 J Q@2 J R@2 ~@2
>`.pickRestart({
  A: "~@3 c5!2 a4 d5 ~", B: "~@2 d5@4 bb4 f4", C: "[d5@4 eb5 f5 f5@3 eb5@5 ~ eb5]/2", D: "d5 c5 bb4@4 a4 bb4",
  E: "[c5@8 f4@2 eb4@2 d4@11 ~@5 d5@2 d5@2]/2", F: "[bb4@2 eb5@2 d5@5 ~ bb4@10 bb4@2 bb4@2 a4@2 g4@2 f4@4]/2",
  G: "~ g4 a4@9 ~ c5@2 c5@2", H: "[a4@2 d5@2 c5@5 ~ a4@10 a4@2 a4@2 g4@2 a4@2 bb4 d5 bb4@9 ~@5 d5@2 d5@2]/3",
  I: "[bb4@2 eb5@2 d5@5 ~ bb4@10 d5@2 d5@2 eb5@2 f5@2 eb5@13 ~@3 eb5@2 eb5@2]/3", J: "f5@2 g5@2 d5@5 ~ bb4@6",
  K: "[~@4 g4@2 g4@2 f4@2 eb4@2 d4@11 ~@9]/2", L: "~@2 d4@4 bb3 f3", M: "[d4@4 eb4 f4 f4@3 eb4@5 ~ eb4]/2",
  N: "d4 c4 bb3@4 a3 bb3", O: "[c4@8 f3@2 eb3@2 d3@11 ~@5 d5@2 d5@2]/2",
  P: "[a4@2 d5@2 c5@5 ~ a4@10 a4@2 a4@2 g4@2 a4@2 bb4@13 ~@3 d5@2 d5@2]/3",
  Q: "[~@4 c5@2 c5@2 bb4@2 a4@2 d5@11 ~@5 eb5@2 eb5@2]/2", R: "[~@5 g4@3 g4@2 f4@2 eb4@2 ~ d4@12 ~@5]/2",
})).s("gm_soprano_sax").gain(0.48).pan(0.3)

// other · soprano sax · "SOPRAN SAX" · soft notes
const soprano_sax_soft = note("<~@5 A@2 ~@13 B ~ C D ~@2 B ~@2 B ~@14 B ~ C D ~@2 B ~@2 B ~@2 B ~@4>".pickRestart({
  A: "[~@7 c5@5 ~@4]/2", B: "~@9 [c5,db5] ~@6", C: "~@2 ab4 ~@13", D: "~@9 [bb4,b4] ~@6",
})).s("gm_soprano_sax").gain(0.32).pan(0.3)

// chords · pad halo · "HALO PAD"
const pad_halo = note("<A@8 B@6 C@4 D@2 B@6 E@4 D@2 B@6 C@4 D@2 B@6 C@4 F@3 G@4>".pickRestart({
  A: "[~@5 [f4,bb4,d5]@24 [f4,a4,c5]@25 [d4,f4,bb4]@10]/8", // Bb F Bb
  B: "[~ [d4,f4,bb4]@6 [c4,f4,a4]@6 [c4,f4,a4]@6 [d4,f4,bb4]@5]/6", // Bb F Bb
  C: "[~ [d4,f4,ab4]@6 [eb4,g4,bb4]@6 [d4,f4,bb4]@3]/4", D: "[[c4,f4,a4]@6 [d4,f4,bb4]@9 ~]/2",
  E: "[~ bb4@3 ab4@3 [eb4,g4,bb4]@6 [d4,f4,bb4]@3, ~ [d4,f4]@6 ~@9]/4", // Eb Bb Dm
  F: "[[c4,f4,a4] [d4,f4,bb4] [eb4,g4,bb4] [d4,f4,bb4]]/3", // F Bb Eb Bb
  G: "[[c4,f4,a4]@10 ~@5 [d4,f4,bb4]@29 [bb4,f5,bb5]@14 ~@6]/4", // F Bb Bb5
})).s("gm_pad_halo").gain(0.18).pan(0.4)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  ~@6 A B C D E F G B C H I J G K L D E F G B C H I J G B M N O P Q R S T U V W X L D E F G B C H I J G Y J Z ~@3
>`.pickRestart({
  A: "~@12 [d4,f4,bb4] ~ [d4,f4,bb4]!2", B: "[d4,f4,bb4]!3 ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4]!5 ~",
  C: "[d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4]!5 ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~", // Bb
  D: "[d4,f4,bb4] ~ [d4,f4,bb4]!2 d4 [d4,f4,bb4]!2 ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [c4,f4,a4] ~ [c4,f4,a4]!2", // Bb F
  E: "[c4,f4,a4]!3 ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4]!5 ~", // F
  F: "[c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4]!5 ~ [c4,f4,a4] ~ [c4,f4,a4] ~", // F
  G: "[c4,f4,a4] ~ [c4,f4,a4]!5 ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [d4,f4,bb4] ~ [d4,f4,bb4]!2", // F Bb
  H: "[d4,f4,bb4] ~ [d4,f4,bb4]!4 [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4]!2", // Bb Ddim Eb
  I: "[eb4,g4,bb4]!3 ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4]!5 ~", // Eb
  J: "[eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4]!5 ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~", // Eb Bb
  K: "[d4,f4,bb4]!3 ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~@7", // Bb
  L: "~@4 [d4,f4,bb4] ~ [d4,f4,bb4]!5 ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~", // Bb
  M: "[d4,f4,bb4] ~ [d4,f4,bb4] ~ bb3@2 f3@2 bb3@2 d4@2 bb3@2 f3@2", N: "f3 bb3 f3 d4 bb3 f3!2 a3",
  O: "f3 c4 a3 f3!2 a3 f3 c4", P: "a3 f3!2 a3 f3 c4 a3 f3", Q: "f3 a3 f3 f4 c4 a3 f3 bb3",
  R: "f3 d4 bb3 f3!2 bb3 f3 d4", S: "bb3 f3!2 bb3 f3 d4 bb3 f3", T: "f3 ab3 bb3 f3 bb3 f3 g3 bb3",
  U: "g3 eb4 bb3 g3!2 bb3 g3 eb4", V: "d4 bb3 f3 bb3 f3 d4 bb3 f3", W: "f3 a3 c4 f4 c4 a3 f3 bb3",
  X: "f3@2 d4@2 bb3@2 f3@2 [f3,bb3,d4]@7 ~", // Bb
  Y: "[d4,f4,bb4]!3 ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4]!5 ~", Z: "[c4,f4,a4] ~@3",
})).s("gm_piano").gain(0.26).pan(0.6)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A@2 ~ B@2 C@2 D E F G H I D J K L M I N O F G H I D J K L M I D E F G H I D J K L M I N O F G H I D J K L M I P M Q@4
>`.pickRestart({
  A: "[~@10 [f2,bb2,d3,f3,bb3,d4]@19 ~@3]/2", B: "[~@11 [c4,f4]@21, ~@5 [f2,c3,f3,a3]@11]/2",
  C: "[~@2 [f2,c3,f3,a3,c4,f4]@24 ~@2 [d4,f4,bb4]@2 [d4,f4,bb4]!2]/2", // F Bb
  D: "[d4,f4,bb4]!2 [d4,f4,bb4]@2 [d4,f4,bb4]!2 [d4,f4,bb4]@2 [d4,f4,bb4]@2 [d4,f4,bb4]!4 [d4,f4,bb4]@2", // Bb
  E: "[d4,f4,bb4]!2 [d4,f4,bb4]@2 [d4,f4,bb4]@2 [d4,f4,bb4]!4 [d4,f4,bb4]@2 [d4,f4,bb4]@2 [d4,f4,bb4]@2", // Bb
  F: "[d4,f4,bb4]@2 [d4,f4,bb4]!4 [d4,f4,bb4]@2 [d4,f4,bb4]!2 [d4,f4,bb4]@2 [c4,f4,a4]@2 [c4,f4,a4]!2", // Bb F
  G: "[c4,f4,a4]!2 [c4,f4,a4]@2 [c4,f4,a4]!2 [c4,f4,a4]@2 [c4,f4,a4]@2 [c4,f4,a4]!4 [c4,f4,a4]@2", // F
  H: "[c4,f4,a4]!2 [c4,f4,a4]@2 [c4,f4,a4]@2 [c4,f4,a4]!4 [c4,f4,a4]@2 [c4,f4,a4]!2 [c4,f4,a4]@2", // F
  I: "[c4,f4,a4]@2 [c4,f4,a4]!4 [c4,f4,a4]@2 [c4,f4,a4]!2 [c4,f4,a4]@2 [d4,f4,bb4]@2 [d4,f4,bb4]!2", // F Bb
  J: "[d4,f4,bb4]!2 [d4,f4,bb4]@2 [d4,f4,bb4]@2 [d4,f4,bb4]!4 [d4,f4,bb4]@2 [d4,f4,bb4]!2 [d4,f4,bb4]@2", // Bb
  K: "[d4,f4,bb4]@2 [d4,f4,bb4]!4 [d4,f4,bb4]@2 [d4,f4,bb4]!2 [d4,f4,bb4]@2 [eb4,g4,bb4]@2 [eb4,g4,bb4]!2", // Bb Eb
  L: "[eb4,g4,bb4]!2 [eb4,g4,bb4]@2 [eb4,g4,bb4]!2 [eb4,g4,bb4]@2 [eb4,g4,bb4]@2 [eb4,g4,bb4]!4 [eb4,g4,bb4]@2", // Eb
  M: "[eb4,g4,bb4]!2 [eb4,g4,bb4]@2 [d4,f4,bb4]@2 [d4,f4,bb4]!4 [d4,f4,bb4]@2 [d4,f4,bb4]!2 [d4,f4,bb4]@2", // Eb Bb
  N: "[d4,f4,bb4]!2 [d4,f4,bb4]@2 [d4,f4,bb4]!2 [d4,f4,bb4]@2 [d4,f4,bb4]@2 ~@6", // Bb
  O: "~@4 [d4,f4,bb4]@2 [d4,f4,bb4]!4 [d4,f4,bb4]@2 [d4,f4,bb4]@2 [d4,f4,bb4]@2", // Bb
  P: "[d4,f4,bb4]!2 [d4,f4,bb4]@2 [d4,f4,bb4]!2 [d4,f4,bb4]@2 [eb4,g4,bb4]@2 [eb4,g4,bb4]!4 [eb4,g4,bb4]@2", // Bb Eb
  Q: "[[c4,f4,a4]@4 ~@11 [bb3,d4,f4]@2 [bb3,d4,f4]!4 [bb3,d4,f4]@2 ~ [bb3,d4,f4]!3 ~ [bb3,d4,f4]@3 [bb3,d4,f4] [d4,f4] ~@3 f4@2 [bb3,d4,f4]!2 ~@4 f4@16 ~@4, ~@27 bb2@6 [d4,f4]@2 [bb3,d4]@3 ~@3 [bb3,d4,f4]@2 ~@21, ~@28 f3@6 bb2@8 bb2@17 ~@5, ~@32 bb3@3 f3@8 [f3,bb3,d4]@16 ~@5]/4", // F Bb Dm Bb Dm Bb
})).s("gm_acoustic_guitar_steel").gain(0.22).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@6 A B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C E A@2 ~
>`.pickRestart({
  A: "~@3 x", B: "~ x", C: "~ x ~@2", D: "x ~@2 x", E: "x ~@14 x",
})).gain(0.7)

// drums · rim
const rim = s("rim").struct("<~@7 A B ~ A B ~ A B ~ A B ~@14 B ~ A B ~ A B ~ A B ~@19>".pickRestart({
  A: "~ x ~@6", B: "~@5 x ~@2",
})).gain(0.7)

// drums · snare
const snare = s("sd").struct(`<
  ~@7 A B C A ~ C A ~ C A ~ C D E C F E C G H C F I C F ~ C A ~ C A ~ C A ~ C D E C F E C G H C F I C F E ~ J K ~
>`.pickRestart({
  A: "~@7 x", B: "x ~ x!2 ~@12", C: "~@3 x ~@4", D: "~@2 x ~@3 x!2 ~@8", E: "~@5 x ~@2", F: "~ x ~@5 x",
  G: "~ x ~@4 x!2", H: "x ~ x!2 ~@6 x ~@5", I: "~ x ~@3 x ~@2", J: "~@5 x ~@10", K: "~@4 x ~@4 x ~@6",
})).gain(0.56)

// drums · low tom
const low_tom = s("lt").struct("<~@6 A ~@13 B ~@11 C ~@11 B ~@14 D ~>".pickRestart({
  A: "~@5 x ~@2", B: "~@2 x!2 ~@12", C: "~ x ~@6", D: "~@9 x ~@6",
})).gain(0.49)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@6 A B C D B E D B E D B E D F G D B E D H C D B E D I G D B E D B E D B E D F G D B E D H C D B E D B J K L ~@2
>`.pickRestart({
  A: "~@7 x", B: "x!8", C: "x ~@2 x!5", D: "x!5 ~ x!2", E: "x ~ x!6", F: "x!4 ~@4", G: "~@3 x!5", H: "x!4 ~ x!3",
  I: "x!7 ~", J: "x ~ x!5 ~", K: "~@15 x", L: "~ x ~ x ~ x ~@2 x ~@3 x ~@3",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@6 A ~@13 B ~@10 C B ~@11 B ~@14 D ~>".pickRestart({
  A: "~@5 x ~@2 x!2 ~@6", B: "x", C: "~@7 x", D: "~@2 x!2 ~@4",
})).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A B ~ A B ~ A B ~ A B ~@2 B ~ A B ~ A B ~ A B C ~ B ~ A B ~ A B ~ A B ~@2 B ~ A B ~ A B ~ A B ~ D ~ E ~@2
>`.pickRestart({
  A: "~ x ~@6", B: "~@5 x ~@2", C: "~@7 x", D: "~ x ~@5 x", E: "~@10 x ~@4 x",
})).gain(0.28)

// drums · high tom
const high_tom = s("ht").struct("<~@19 A ~@11 B ~@11 A ~@14 C D ~>".pickRestart({
  A: "~@7 x", B: "~@5 x!2 ~", C: "~@15 x", D: "~ x ~@14",
})).gain(0.49)

// drums · crash
const crash = s("cr").struct(`<
  ~@6 A ~ B ~@10 C B ~@4 C B ~@2 B ~@2 B ~@8 B ~ C B ~@4 C B ~@2 B ~@2 B D ~ A ~
>`.pickRestart({
  A: "~@3 x", B: "~ x ~@2", C: "~ x", D: "x",
})).gain(0.28)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@7 A B C A ~ C A ~ C A ~ C ~ D C A ~ C A ~ C A ~ C ~@2 C A ~ C A ~ C A ~ C ~ D C A ~ C A ~ C A ~ C A ~@2 E ~@2
>`.pickRestart({
  A: "~@7 x", B: "x!2 ~@6", C: "~@3 x ~@4", D: "~@5 x ~@2", E: "~@5 x ~@10",
})).gain(0.49)

stack(
  bass, soprano_sax, soprano_sax_soft, pad_halo, piano, acoustic_guitar_steel, kick, rim, snare, low_tom, hihat,
  mid_tom, open_hat, high_tom, crash, tambourine
)

More by Henry Arland