Strudelify
Trompeten-Echo cover art

Trompetenecho

Trompeten-Echo

Oberkrainer

KeyC majorTempo140 bpm
0:00/0:00
// Trompeten-Echo — Oberkrainer
// 140 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 7 "BariDopp" synth brass 1 (copy of ch 4 "Bariton" trombone)
// note: Full arrangement: all 83 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/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.

// other · clarinet · "Klarinet"
const clarinet = note(`<
  ~ A B C D E F C D G H C D E F C D G I J@7 K ~@4 J@3 K L@2 M N O@2 M P J@7 K ~@4 J@3 K Q@2 M N R@2 M P C D E F C D G I
  C D E F C D G S
>`.pickRestart({
  A: "~@2 g4@2 b4 ~ f5 ~ b4 ~ a5@2 g5@2 f5@2", B: "e5 ~@3 f5@4 e5 ~@7", C: "e5!2 e5@2 e5 ~ e5 ~ e5!2 e5@2 e5 ~ e5 ~",
  D: "e5!2 e5@2 e5 ~ e5 ~ d5@5 ~@3", E: "f5!2 f5@2 f5 ~ f5 ~ f5!2 f5@2 f5 ~ f5 ~", F: "f5!2 f5@2 f5 ~ f5 ~ c5@4 ~@4",
  G: "f5!2 f5@2 f5 ~ f5 ~ f5!2 f5@2 f5@2 ~@2", H: "g5@2 ~ g5 f5 g5 ~@2 e5 ~@7", I: "g5@2 ~ g5 f5 ~ g5 ~ e5 ~@7",
  J: "~@2 c5 ~@3 c5 ~@3 c5 ~@3 c5 ~", K: "c5@2 ~ c5 a#4 ~ c5 ~ a4 ~@7", L: "[~@10 a#5@10 a5@2 g5 ~ g5@3 f5 f5@3 ~]/2",
  M: "~@14 f5!2", N: "f5@2 g5@2 f5@2 d#5@2 d#5@3 d5 d5@3 ~", O: "[~@10 a#5@10 a5@2 g5@2 g5@3 f5 f5@2 ~@2]/2",
  P: "f5@3 g5 f5 ~ d#5 ~ d5 ~@7", Q: "[~@10 a#5@10 a5@2 g5 ~ g5@3 f5 f5@4]/2",
  R: "[~@10 a#5@10 a5@2 g5@2 g5@3 f5 f5@3 ~]/2", S: "g5@2 ~ g5 f5 g5 ~@2 e5 ~ e5!3 ~@3",
})).s("gm_clarinet").gain(0.43).pan(0.7)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~ A B C D E F C D E G C D E F C D E H I J C K I J C L I J C K I J C L M N I O M P I Q I J C R I J C L I J C K I S C T
  M N I O M N I U C D E V C D E W C D E F C D E X
>`.pickRestart({
  A: "~@5 g1 a1 b1", B: "c2 ~@3 g1@4 c2 ~@7", C: "c2 g1 c2 g1", D: "c2@4 g1@3 ~ g1@4 d2@4", E: "g1 d2 g1 d2",
  F: "g1@2 a1 b1 c2@2 g1@2", G: "g1@4 d2@4 c2 ~@7", H: "g1@4 a1@2 b1@2 c2 ~@7", I: "f1 c2 f1 c2",
  J: "f1@4 c2@3 ~ c2@4 g1@4", K: "c2 g1 f1 c2", L: "c2@4 g1@4 f1 ~@7", M: "a#1 f1 a#1 f1", N: "a#1@4 f1@3 ~ f1@4 c2@4",
  O: "f1@2 g1 a1 a#1@2 f1@2", P: "a#1 f1!2 c2", Q: "f1@4 g1@2 a1@2 a#1 ~@7", R: "c2 a1 f1 c2", S: "f1 c2!2 g1",
  T: "c2@2 g1@2 f1 ~@3", U: "f1@2 g1 a1 a#1@2 ~@2", V: "g1@2 a1 b1 c2 b1 a1 g1",
  W: "g1@3 ~ a1@2 b1@2 c2 ~@3 g1@4, ~@3 g1@2 ~@11", X: "g1@4 a1@2 b1@2 c2 ~@3 c2 ~@3",
})).s("gm_acoustic_bass").gain(0.56)

// other · trombone · "Bariton"
const trombone = note(`<
  A B C D E F G D E F H D E F G D E F I J K L M J K L N J K L M J K L O P Q R S P Q R S J K L M J K L N J K L M J K L O
  P Q R S P Q R S D E F G D E F H D E F G D E F T
>`.pickRestart({
  A: "~@10 g2@2 b2 ~ f3 ~", B: "b2@8 ~@2 f3@2 e3@2 d3 ~", C: "c3 ~@3 g2@4 c3 ~ g2!2 a2!2 b2!2",
  D: "c3 ~@3 g2 ~@3 c3 ~@3 g2 ~@3", E: "c3 ~@3 g2@2 f#2@2 g2 ~@3 d2 ~@3", F: "g2 ~@3 d2 ~@3 g2 ~@3 d2 ~@3",
  G: "g2@2 ~ g2 a2 ~ b2 ~ c3 ~ b2 ~ a2 ~ g2 ~", H: "g2@2 ~ g2 a2 ~ b2 ~ c3 ~ g2 ~ a2 ~ b2 ~",
  I: "g2@2 ~ g2 a2 ~ b2 ~ c3 ~@3 c2@3 ~", J: "f2 ~@3 c3 ~@3 f2 ~@3 c3 ~@3", K: "f2 ~@3 c3 ~@3 g2 ~@3 c3 ~@3",
  L: "g2 ~@3 c3 ~@3 g2 ~@3 c3 ~@3", M: "c2 ~@2 c2 d2 ~ e2 ~ f2 ~ e2 ~ d2 ~ c2 ~",
  N: "c2@2 ~ c2 d2 ~ e2 ~ f2 ~@3 c2@3 ~", O: "c2@2 ~ c2 d2 ~ e2 ~ f2 ~@5 f2!2", P: "f2 ~ d3 ~ a#2 ~ g2 ~ f2@6 ~@2",
  Q: "a#2 ~@3 f2 ~ b2@2 c3 ~@3 f2 ~@3", R: "d#3 ~ c3 ~ a2 ~ g2 ~ f2@4 ~@4", S: "f2 ~@2 f2 g2 ~ a2 ~ a#2 ~@7",
  T: "g2@2 ~ g2 a2 ~ b2 ~ c3 ~ c3!3 ~@3",
})).s("gm_trombone").gain(0.64)

// chords · bandoneon · "Accordeo"
const bandoneon = note(`<
  ~ A B C D E F G H I J C D E F K L I J M N O P M N O Q R S T U M N O V W X Y Z AA X Y Z M N O P M N O AB R S T U M N O
  V W AC Y Z AA X Y Z C D E AD AE H I J C D E F AE AF AG AH
>`.pickRestart({
  A: "~@2 g4@2 b4 ~ f5 ~ b4@2 [a4,f5] ~ [g4,e5] ~ [f4,d5] ~", B: "[e4,c5] ~@3 [d4,b4]@4 [e4,c5] ~@3 [b4,d5,f5]@3 ~",
  C: "[g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!3 ~ [g4,c5,e5]!3 ~ [g4,c5,e5]!3 ~", // C
  D: "[g4,c5,e5]!2 [g4,e5] ~ [g4,c5,e5]!2 [g4,e5]@2 [g4,b4,d5]!3 ~ [g4,b4,d5]!2 [g4,b4] ~, ~@2 c5@2 ~@2 c5 ~@7 d5@2", // C G
  E: "[g4,b4,d5]!2 [g4,b4] ~ [g4,b4,d5]!2 [g4,b4] ~ [g4,b4,d5]!2 [g4,b4] ~ [g4,b4,d5]!2 [g4,b4] ~, ~ d5 ~ d5 ~ d5 ~ d5", // G
  F: "[g4,b4,d5]!2 [g4,b4,d5]@2 [g4,b4,d5]!2 [g4,d5]@2 [g4,c5,e5]!2 [g4,c5] ~ [g4,c5,e5]!2 [g4,e5] ~, ~@6 b4 ~@3 e5@2 ~@2 c5@2", // G G5 C C5 C
  G: "[g4,c5,e5]!2 [g4,e5] ~ [g4,c5,e5]!2 [c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2 [c5,e5]@2, ~@2 c5@2 ~@2 g4 ~@7 g4 ~", // C
  H: "[g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2 [g4,e5]@2 [g4,b4,d5]!2 [g4,d5]@2 [g4,b4,d5]!2 [g4,d5]@2, ~@6 c5 ~@3 b4 ~@3 b4 ~", // C G G5 G G5
  I: "[g4,b4,d5]!2 [g4,b4,d5]@2 [g4,b4,d5]!2 [g4,d5]@2 [g4,b4,d5]!2 [g4,b4] ~ [g4,b4,d5]!2 [g4,b4,d5]@2, ~@6 b4 ~@3 d5@2 ~@4", // G G5 G
  J: "[g4,b4,d5]@2 ~ [g4,b4,d5]!2 ~ [g4,b4,d5] ~ [g4,c5,e5] ~@7", // G C
  K: "[g4,c5,e5] [g4,c5] c5@2 [g4,c5,e5]!2 [c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2 [c5,e5]@2, ~ e5@3 ~@12, ~@2 g4 ~@3 g4 ~@7 g4 ~", // C C5 C
  L: "[g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5] ~ [g4,b4,d5]!2 [g4,d5]@2 [g4,b4,d5]!2 [g4,d5]@2, ~@6 e5@2 ~@2 b4 ~@3 b4 ~", // C C5 G G5 G G5
  M: "[a4,c5,f5]!3 ~ [a4,c5,f5]!3 ~ [a4,c5,f5]!3 ~ [a4,c5,f5]!3 ~", // F
  N: "[a4,c5,f5]!3 ~ [a4,c5,f5]!3 ~ [g4,c5,e5]!3 ~ [g4,c5,e5]!3 ~", // F C
  O: "[g4,c5,e5]!3 ~ [g4,c5,e5]!3 ~ [g4,c5,e5]!3 ~ [g4,c5,e5]!3 ~", // C
  P: "[g4,c5,e5]!3 ~ [g4,c5,e5]!3 ~ [a4,c5,f5]!3 ~ [a4,c5,f5]!3 ~", // C F
  Q: "[g4,c5,e5]@2 ~ [g4,c5,e5]!2 ~ [g4,c5,e5] ~ [a4,c5,f5] ~ [e4,g4,c5]!3 [g4,c5] ~@2", // C F C C5
  R: "~@2 c5 ~@3 c5 ~ f4 c5 f4 c5 ~@2 c5 ~, c4 a4 ~ d4", S: "f4 c5 f4 c5 d4@2 c5 ~ e4 c5 e4 c5 d4@2 c5 ~",
  T: "c4@2 c5 ~ a#4@2 c5 ~ e4 c5 e4 c5 d4@2 c5 ~", U: "e4 c5 e4 c5 d4@2 c5 ~ f4 c5 f4 c5 d4@2 c5 ~",
  V: "[g4,c5,e5]@2 ~ [g4,c5,e5]!2 ~ [g4,c5,e5] ~ [a4,c5,f5] ~@7", W: "f4 ~ d5 ~ a#4 ~ g4 ~ f4@6 ~@2",
  X: "[f4,a#4,d5]!3 ~ [f4,a#4,d5]!3 ~ [f4,a4,c5]!3 ~ [f4,a4,c5]!3 ~", // A# F
  Y: "[f4,a4,c5]!3 ~ [f4,a4,c5]!3 ~ [f4,a4,c5]!3 ~ [f4,a4,c5]!3 ~", // F
  Z: "[f4,a4,c5]@2 ~ [f4,c5] [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a#4,d5] ~@7", // F F5 F A#
  AA: "[f4,a#4,d5]!3 ~ [f4,a#4,d5]!3 ~ [f4,a#4,d5]!3 ~ [f4,a#4,d5]!3 ~", // A#
  AB: "[g4,c5,e5]@2 ~ [g4,c5,e5]!2 ~ [g4,c5,e5] ~ [a4,c5,f5] ~ [e4,g4,c5]!4 ~@2", // C F C
  AC: "d5 [f4,a#4,d5]!2 ~ [f4,a#4,d5]!3 ~ [f4,a4,c5]!3 ~ [f4,a4,c5]!3 ~", // A# F
  AD: "[g4,b4,d5]!2 [g4,b4,d5]@2 [g4,b4,d5]!2 [g4,b4] ~ [g4,c5,e5]!2 [g4,c5] ~ [g4,c5,e5]!2 [g4,e5] ~, ~@3 d5 ~ e5 ~ c5", // G C C5 C
  AE: "[g4,c5,e5]!2 c5@2 [g4,c5,e5]!2 [c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2 [c5,e5]@2, ~@2 g4 ~@3 g4 ~@7 g4 ~", // C
  AF: "[g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5] ~ [b4,d5] [g4,b4,d5] [g4,d5]@2 [g4,b4,d5]!2 [g4,d5]@2, ~@6 e5@2 ~@2 b4 ~@3 b4 ~", // C C5 Bm G G5 G G5
  AG: "[g4,b4,d5]!3 ~ [g4,b4,d5]!2 [g4,d5]@2 [g4,b4,d5]!2 [g4,b4] ~ [g4,b4,d5]!2 [g4,b4,d5]@2, ~@6 b4 ~@3 d5@2 ~@4", // G G5 G
  AH: "[g4,b4,d5]@2 ~ [g4,b4,d5]!2 ~ [g4,b4,d5] ~ [g4,c5,e5] ~ [e4,g4,c5]!2 [e4,g4,c5]@2 ~@2", // G C
})).s("gm_bandoneon").gain(0.19)

// chords · acoustic guitar nylon · "Gitarre"
const acoustic_guitar_nylon = note(`<
  ~@3 A B C D A B C E A B C D A B C F G H A I G H A J G H A I G H A J ~ K G L M K G N G H A I G H A J G H A I G H A J ~
  K G L M K G N A B C D A B C F A B C D A B C F
>`.pickRestart({
  A: "~@2 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~", // C
  B: "~@2 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // C G
  C: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // G
  D: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~", E: "~@4 [d4,g4,b4] ~ [d4,g4,b4] ~ [e4,g4,c5] ~@7",
  F: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~ [e4,g4,c5] ~@7", // G C
  G: "~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,a4,c5] ~", // F
  H: "~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~", // F C
  I: "~@2 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [f4,a4,c5] ~@3 [f4,a4,c5] ~", // C F
  J: "~@2 [e4,g4,c5] ~@3 [e4,g4,c5] ~ [f4,a4,c5] ~@7", // C F
  K: "~@2 [f4,a#4,d5] ~@3 [f4,a#4,d5] ~@3 [f4,a4,c5] ~@3 [f4,a4,c5] ~", // A# F
  L: "~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,a#4,d5] ~@3 [f4,a#4,d5] ~", // F A#
  M: "~@2 [f4,a#4,d5] ~@3 [f4,a#4,d5] ~@3 [f4,a#4,d5] ~@3 [f4,a#4,d5] ~", // A#
  N: "~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~ [f4,a#4,d5] ~@7", // F A#
})).s("gm_acoustic_guitar_nylon").gain(0.2)

// drums · kick
const kick = s("bd").struct("<~@3 A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B ~ A C A@4 B A@7 B A@8>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "x",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B@7 C B D B@3 D B E B@7 C B@7 C F B F B F B F G B@7 C B@7 C F D F D B D B C B@7 E B@7 H
>`.pickRestart({
  A: "~@10 x!3 ~ x ~", B: "~ x ~ x ~ x ~ x", C: "~@3 x!2 ~ x ~ x ~@7", D: "~@2 x ~@3 x ~@3 x!3 ~ x ~",
  E: "x ~@2 x!2 ~ x ~ x ~@7", F: "~@2 x ~@3 x ~@3 x!3 ~@3", G: "~ x ~ x!2 ~@3", H: "x ~@2 x!2 ~ x ~ x ~ x!3 ~@3",
})).gain(0.28)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B@7 C B D B@3 D B E B@7 C B@7 C F B F B F B F G B@7 C B@7 C F D F D B D B C B@7 E B@7 H
>`.pickRestart({
  A: "~@10 x!3 ~ x ~", B: "~ x ~ x ~ x ~ x", C: "~@3 x!2 ~ x ~ x ~@7", D: "~@2 x ~@3 x ~@3 x!3 ~ x ~",
  E: "x ~@2 x!2 ~ x ~ x ~@7", F: "~@2 x ~@3 x ~@3 x!3 ~@3", G: "~ x ~ x!2 ~@3", H: "x ~@2 x!2 ~ x ~ x ~ x!3 ~@3",
})).gain(0.28)

// drums · crash
const crash = s("cr").struct("<~@35 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A B>".pickRestart({
  A: "x", B: "~ x",
})).gain(0.28)

stack(clarinet, bass, trombone, bandoneon, acoustic_guitar_nylon, kick, snare, hihat, crash)

More by Oberkrainer