Strudelify

Es ist so schon ein Musikant zu sein

Oberkrainer

KeyG majorTempo128 bpm
0:00/0:00
// Es ist so schon ein Musikant zu sein — Oberkrainer
// 128 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 71 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(128/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 · tuba
const bass = note(`<
  A B C D E F G H I F G H J K L M N O L C P Q L R S T L R U V W X Y Z W AA AB AC F AD AE F AF AD AG AH B AI AJ AK B C AL
  AM B C AN AO B C AP AQ AR AS AT AU AR AS AV AW ~
>`.pickRestart({
  A: "~@4 d2@3 ~ e2@2 ~@2 f#2@3 ~", B: "g2 ~@3 d2 ~@3 g2 ~@3 d2 ~@3", C: "a2 ~@3 d2 ~@3 a2 ~@3 d2 ~@3",
  D: "a2 ~@3 d2@2 ~@2 e2@2 ~@2 f#2@2 ~@2", E: "g2 ~@3 d2@2 ~@2 g2 ~@3 a1@3 ~", F: "d2 ~@3 a1 ~@3 d2 ~@3 a1 ~@3",
  G: "d2 ~@3 a1 ~@3 e2 ~@3 a1 ~@3", H: "c#2 ~@3 a1 ~@3 e2 ~@3 a1 ~@3", I: "c#2 ~@3 a1 ~@3 d2 ~@3 a1 ~@3",
  J: "c#2 ~ a1@2 b1 ~ c#2 ~ d2 ~@3 d2@3 ~", K: "e2@3 ~ f#2@2 ~@2 g2 ~@3 d2 ~@3", L: "g2 ~@3 d2 ~@3 a2 ~@3 d2 ~@3",
  M: "a2 ~@3 d2 ~@3 a2 ~@3 d2@3 ~", N: "e2@2 ~@2 f#2@3 ~ g2@2 ~@2 f#2 ~@2 e2", O: "d2 ~ c2 ~ b1 ~ a1 ~ g2 ~@3 d2 ~@3",
  P: "a2 ~ d2 ~ e2 ~ f#2 ~ g2 ~@3 d2@3 ~", Q: "g2 ~@7 g2 ~@3 d2 ~@3", R: "f#2 ~@3 d2 ~@3 a2 ~@3 d2@3 ~",
  S: "e2@3 ~ f#2@2 ~@2 g2@3 ~ f#2@2 ~ e2", T: "d2 ~ b1 ~ a1 ~ g1 ~ g2 ~@3 d2 ~@3",
  U: "e2@3 ~ f#2@2 ~@2 g2 ~@3 b2 ~ d3 ~", V: "g2 ~ f2 ~ e2 ~ d2 ~ c2 ~@3 g1 ~@3", W: "c2 ~@3 g1 ~@3 c2 ~@3 g1 ~@3",
  X: "d2 ~@3 g1 ~@3 b1 ~@3 g1 ~@3", Y: "d2 ~@3 g1 ~@3 b1 ~@3 g1@2 ~@2", Z: "c2 ~ b1@2 a1 ~ g1 ~ c2 ~@3 g1 ~@3",
  AA: "d2 ~@3 g1 ~@3 b1@2 ~@2 g1 ~@3", AB: "d2 ~@3 g1 ~@3 d2 ~ g1@2 a1 ~ b1 ~", AC: "c2 ~@3 a1@2 ~@2 d2 ~@3 a1 ~@3",
  AD: "e2 ~@3 a1 ~@3 c#2 ~@3 a1 ~@3", AE: "e2 ~@3 a1 ~@3 c#2 ~ a1@2 b1 ~ c#2 ~", AF: "d2 ~@3 a1 ~@3 d2 ~@3 a1@2 ~@2",
  AG: "e2 ~@3 a1 ~@3 c#2 ~ a1 ~ b1 ~ c#2 ~", AH: "[c#2,d2] ~@3 d2@2 ~@2 e2@2 ~@2 f#2@3 ~",
  AI: "a2 ~@3 d2 ~@3 f#2 ~@3 d2 ~@3", AJ: "a2 ~@3 d2 ~@3 f#2 ~ d2 ~ e2 ~ f#2 ~",
  AK: "g2@2 ~@2 f#2@2 ~ e2 d2 ~ b1 ~ a1 ~ g1 ~", AL: "a2 ~@3 d2 ~@3 a2 ~ d2@2 e2 ~ f#2 ~",
  AM: "g2 ~@3 d2@3 ~ g2 ~ d2@2 e2 ~ f#2 ~", AN: "f#2 ~@3 d2 ~@3 a2 ~ d2@2 e2@2 f#2@2",
  AO: "g2@3 ~ f#2@3 e2 d2 ~ b1 ~ a1 ~ g1 ~", AP: "a2 ~@3 d2@3 ~ e2@2 ~@2 f#2@3 ~",
  AQ: "g2 ~@3 d2@3 ~ g2 ~ d#2@2 f2 ~ g2 ~", AR: "g#2 ~@3 d#2 ~@3 g#2 ~@3 d#2 ~@3", AS: "a#2 ~@3 d#2 ~@3 g2 ~@3 d#2 ~@3",
  AT: "a#2 ~@3 d#2 ~@3 g2 ~@3 d#2@2 ~@2", AU: "g#2@3 ~ g2@2 ~ f2 d#2 ~ c2 ~ a#1 ~ g#1 ~",
  AV: "a#2 ~@3 d#2 ~@3 g2 ~ d#2@2 f2@2 g2@2", AW: "g#2 ~@3 d#2@3 ~ g#1 ~ g#1!2 g#1@2 ~@2",
})).s("gm_tuba").gain(0.66)

// other · clarinet
const clarinet = note(`<
  A B C D E ~@16 F G H I J ~@3 K L M N O P Q R S ~@15 T U V W X ~@3 Y Z AA AB AC Z AD AE AF ~
>`.pickRestart({
  A: "~@4 d5@4 c#5@4 c5@3 ~", B: "b4@9 ~ d5@2 e5@2 d5@2", C: "f#5 ~@2 d5 c5@5 ~ f#4@2 a4@2 d5 ~",
  D: "f#5@4 d5@3 ~ e5@2 ~ e5 d5 ~ c5 ~", E: "b4 ~ c5@2 b4@2 ~@2", F: "~ d5 c#5 c5 b4@4",
  G: "~@2 d5@2 e5@2 d5@2 f#5 ~@2 d5 c5@4", H: "~@2 d4@2 f#4@2 a4 ~ f#5@4 f#5@3 ~", I: "f#5@4 e5@3 ~ e5@3 d5!2 ~ c#5 ~",
  J: "d5@3 ~@13", K: "~@12 e5 ~ e5 ~", L: "e5@7 ~ e5 ~@3 e5 ~ g5@2", M: "f5 ~ f5 ~ f5@2 ~@2 f5@3 ~ f5 ~ f5 ~",
  N: "f5@6 ~@2 f5@3 ~ f5 ~ f5 ~", O: "e5@6 ~@2 e5@3 ~ e5 ~ e5 ~", P: "e5@6 ~@2 e5@4 g5 ~ c5 ~",
  Q: "f5@7 ~ f5@3 ~ f5 ~ f5 ~", R: "f5@8 a5@4 g5 ~ f5 ~", S: "e5 ~@7", T: "~@5 d5 c#5 c5", U: "b4@4 ~ d5 e5 d5",
  V: "f#5 ~@2 d5 c5@6 d4@2 f#4@2 a4@2, ~@10 c4 ~@5", W: "f#5@3 ~ f#5@3 ~ f#5@3 ~ e5@3 ~",
  X: "e5@2 ~ d5!2 ~ c#5 ~ d5@5 ~@3", Y: "~@5 d#5 d5 c#5", Z: "c5@9 ~ d#5@2 f5@2 d#5@2",
  AA: "g5 ~@2 d#5 c#5@5 ~ d#4@2 g4@2 a#4 ~", AB: "g5@3 ~ g5@3 ~ g5@3 ~ f5@3 ~",
  AC: "f5@2 ~ d#5!2 ~ d5 ~ d#5 ~ d#5@2 d5 ~ c#5 ~", AD: "g5 ~@2 d#5 c#5@4 ~@2 d#4@2 g4@2 a#4@2",
  AE: "d#5@4 a#4@3 ~ c#5 ~@2 c#5 c5 ~ a#4 ~", AF: "g#4@2 ~@2 g4@4 g#4 ~ g#4!3 ~@3",
})).s("gm_clarinet").gain(0.45)

// chords · acoustic guitar nylon · "A.GUITAR"
const acoustic_guitar_nylon = note(`<
  A B C D E F G H I J G K L M N@2 O P Q@2 R S T U V W X@2 Y Z AA AB@2 AA@2 AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP
  AM AQ AR AS B C@2 AT AM AU AR AV AW AX@2 AY AZ BA BB BC@2
>`.pickRestart({
  A: "~@4 [d4,d5]@3 ~ [e4,c#5]@3 ~ [f#4,c5]@4", B: "~ d5 b4 d5 ~ d5 b4 d5, d4 g4 d4 g4",
  C: "~@2 d5 ~ c5@2 d5@2 ~@2 d5@2 c5@2 d5@2, d4 f#4 d4 f#4",
  D: "~@2 d5@2 c5@2 d5@2 ~@2 d5@2 [f#4,c5]@2 d5 ~, d4 f#4 d4 ~", E: "[g4,b4] ~@3 [f#4,a4]@3 ~ [d4,b4]@2 ~@6",
  F: "a4@3 b4 a4@2 f#4@2 a4@2 f#4@2 d4@3 ~", G: "a4@2 ~ a4 b4@2 f#4@2 a4@2 g4@2 e4@3 ~",
  H: "a4@3 b4 a4@2 g4@2 a4@2 g4@2 e4@3 ~", I: "a4@2 ~ a4 b4@2 f#4@2 a4@2 f#4@2 d4@3 ~",
  J: "a4@3 b4 a4@2 b4@2 a4@2 f#4@2 d4@3 ~", K: "a4@2 ~ a4 a4@2 b4@2 a4@2 g4@2 e4@3 ~",
  L: "a4@3 g4 f#4 ~ e4 ~ d4@2 ~@2 d4@3 ~", M: "e4@3 ~ f#4@3 ~ [g4,b4]@8",
  N: "[~@2 [b4,d5]@2 [c5,e5]@2 [b4,d5] ~ [d5,f#5]@2 ~ [c5,e5] [f#4,c5]@6 d4@2 f#4@2 a4@2 [d5,f#5]@3 ~ [d5,f#5]@3 ~]/2", // Bm C Bm D C F#dim D
  O: "[d5,f#5]@3 ~ [c5,e5]@3 ~ [c5,e5]@2 ~ [b4,d5]!2 ~ [a#4,c#5] ~", // D C Bm A#m
  P: "[b4,d5] ~ [d4,d5]@2 [e4,c#5] ~ [f#4,c5] ~ [g4,b4]@8", // Bm D C#m F#dim G
  Q: "[~@2 [b4,d5]@2 [c5,e5]@2 [b4,d5] ~ [d5,f#5]@2 ~ [c5,e5] f#4@5 ~ d4@2 f#4@2 a4@2 [d5,f#5]@4 [f#4,d5]@4, ~@3 c5@2 ~@3]/2", // Bm C Bm D C D
  R: "[c5,e5]@2 ~ [c5,e5] [b4,d5] ~ [a4,c5] ~ [g4,b4] ~@3 [c4,f#4]@3 ~", S: "[b3,g4]@2 ~@3 d5 b4 d5, ~@2 d4 g4",
  T: "~ d5 b4 d5 ~ d5 c5 d5, d4 g4 d4 f#4", U: "~ d5 c5 d5 ~ d5 c5 d5, d4 f#4 d4 f#4",
  V: "~@2 d5@2 c5@2 d5@2 d4 ~ d5@3 ~ d5@2, d4@4 f#4@4 ~@6 d4 ~", W: "d4 ~ [d4,d5]@2 [e4,c#5] ~ [f#4,c5] ~ [g4,b4]@8",
  X: "[~@2 [b4,d5]@2 [c5,e5]@2 [b4,d5] ~ [d5,f#5]@2 ~ [c5,e5] f#4@6 d4@2 ~@2 a4@2 [d5,f#5]@3 ~ [f#4,d5]@4, ~@3 c5@2 f#4 ~@2]/2", // Bm C Bm D C D
  Y: "[c5,e5]@2 ~ [c5,e5] [b4,d5] ~ [a4,c5] ~ [g4,b4]@8", Z: "~@5 c5 g4 c5, ~@2 c4 e4",
  AA: "~ c5 g4 c5 ~ c5 g4 c5, c4 e4 c4 e4", AB: "~ b4 g4 b4 ~ b4 g4 b4, d4 f4 d4 f4",
  AC: "~@2 b4@2 g4@2 b4@2 ~@2 b4@2 [f4,g4]@2 b4 ~, d4 f4 d4 ~", AD: "[e4,c5]@2 ~@6 a4@3 b4 a4 ~ f#4 ~",
  AE: "a4 ~ f#4 ~ d4@3 ~ a4@3 b4 a4 ~ f#4 ~", AF: "a4 ~ g4 ~ e4@3 ~ a4@3 b4 a4 ~ g4 ~",
  AG: "a4 ~ g4 ~ e4@3 ~ a4@2 ~ a4 b4 ~ a4 ~", AH: "a4@2 f#4@2 [d4,f#4]@3 ~ a4@3 b4 a4 ~ f#4@2",
  AI: "a4@2 f#4@2 d4@4 a4@3 b4 a4 ~ g4 ~", AJ: "a4 ~ g4 ~ e4@3 ~ a4@3 b4 a4 ~ g4@2",
  AK: "a4@2 g4@2 e4@4 a4@3 g4 f#4 ~ e4 ~", AL: "d4 ~@3 d4@3 ~ e4@3 ~ f#4@4",
  AM: "[g4,b4]@9 ~ [b4,d5]@2 [c5,e5]@2 [b4,d5] ~", AN: "[d5,f#5]@2 ~ d5 [f#4,c5]@6 d4@2 ~@2 a4@2, ~@3 f#4",
  AO: "[d5,f#5]@3 ~ [d5,f#5]@3 ~ [d5,f#5]@3 ~ [c5,e5]@3 ~", // D C
  AP: "[g4,c5,e5]@2 ~ [b4,d5]!2 ~ [a#4,c#5]@2 [b4,d5] ~ [d4,d5]@2 [e4,c#5] ~ [f#4,c5] ~", // C Bm A#m Bm D C#m F#dim
  AQ: "[d5,f#5]@3 [c5,e5] f#4@6 d4@2 ~@2 a4@2, ~@2 c5@5 ~, ~@3 f#4", // D C
  AR: "[d5,f#5]@4 [f#4,d5]@4 [c5,e5]@2 ~ [c5,e5] [b4,d5] ~ [a4,c5] ~", AS: "[g4,b4]@5 ~@11",
  AT: "~@2 d5@2 b4@2 d5@2 d4 ~ [d4,d5]@2 [e4,c#5] ~ [f#4,c5] ~, d4 g4 ~@2", // D C#m F#dim
  AU: "[d5,f#5]@3 [c5,e5] f#4@5 ~ d4@2 ~@2 a4@2, ~ c5@2 f#4", AV: "[g4,b4]@3 ~ [d4,d5]@4 [g4,b4] ~@7",
  AW: "~ d#5 c5 d#5 ~ d#5 c5 d#5, d#4 g#4 d#4 g#4", AX: "~ d#5 c#5 d#5 ~ d#5 c#5 d#5, d#4 g4 d#4 g4",
  AY: "~@2 d#5@2 c5@2 d#5@2 [d#4,c5] ~ [d#4,d#5] ~ [f4,d5] ~ [g4,c#5] ~, d#4 g#4 ~@2", // Cm D# Dm Gdim
  AZ: "[g#4,c5]@9 ~ [c5,d#5]@2 [c#5,f5]@2 [c5,d#5] ~", BA: "[d#5,g5]@3 [c#5,f5] [g4,c#5]@6 d#4@2 ~@2 a#4@2, ~@3 g4",
  BB: "[d#5,g5]@4 [a#4,d#5]@3 ~ [f4,c#5]@2 ~ [f4,c#5] [d#4,c5] ~ [c#4,a#4] ~", // D# D#5 C# Cm F#
  BC: "[[c4,g#4] ~@3 [c#4,g4]@3 ~ [c4,g#4] ~ [c4,g#4]!2 [c4,g#4]@12 ~@8]/2", // Fm C#dim Fm
})).s("gm_acoustic_guitar_nylon").gain(0.56)

// chords · bassoon
const bassoon = note(`<
  ~ A B@2 C D E F G H I F J K L B M A L B N O L B M A L B P Q R S@2 R@2 S@2 T H F@2 U H F@2 V A B@2 A@2 B@2 W A B@2 A@2
  B@2 X Y Z@2 AA@2 Z@2 AB ~
>`.pickRestart({
  A: "~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~", // G
  B: "~@2 [c4,d4,f#4] ~@3 [c4,d4,f#4] ~@3 [c4,d4,f#4] ~@3 [c4,d4,f#4] ~", // D7
  C: "[b3,d4,g4] ~@3 [c4,d4,f#4]@4 [b3,d4,g4] ~@7", // G D7 G
  D: "~@2 [b3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [b3,d4,f#4] ~@3 [a3,d4,f#4] ~", // Bm D Bm D
  E: "~@2 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,c#4,g4] ~@3 [a3,c#4,g4] ~", // D A7
  F: "~@2 [a3,c#4,g4] ~@3 [a3,c#4,g4] ~@3 [a3,c#4,g4] ~@3 [a3,c#4,g4] ~", // A7
  G: "~@2 [a3,c#4,g4] ~@3 [a3,c#4,g4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~", // A7 D
  H: "~@2 [a3,d4,f#4] ~@3 [b3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~", // D Bm D
  I: "~@2 [a3,d4,f#4] ~@3 [b3,d4,f#4] ~@3 [a3,c#4,g4] ~@3 [a3,c#4,g4] ~", // D Bm A7
  J: "~@2 [a3,c#4,g4] ~@3 [a3,c#4,g4] ~ [a3,d4,f#4] ~@3 d4@3 ~", K: "~@10 [b3,d4,g4] ~@3 [b3,d4,g4] ~",
  L: "~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [c4,d4,f#4] ~@3 [c4,d4,f#4] ~", // G D7
  M: "~@2 [c4,d4,f#4] ~@3 [c4,d4,f#4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~", // D7 G
  N: "~@2 [c4,d4,f#4] ~@3 [c4,d4,f#4] ~ [b3,d4,g4] ~@3 [c4,d4,f#4]@3 ~", // D7 G D7
  O: "[b3,d4,g4] ~@9 [b3,d4,g4] ~@3 [b3,d4,g4] ~", P: "~@2 [c4,d4,f#4] ~@3 [c4,d4,f#4] ~ [b3,d4,g4] ~@3 [c4,d4,f#4]@4",
  Q: "[b3,d4,g4] ~@9 [c4,e4,g4] ~@3 [c4,e4,g4] ~", R: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~",
  S: "~@2 [b3,f4,g4] ~@3 [b3,f4,g4] ~@3 [b3,f4,g4] ~@3 [b3,f4,g4] ~", // G7
  T: "[c4,e4,g4] ~@3 [c#4,e4,a4] ~@5 [a3,d4,f#4] ~@3 [b3,d4,f#4] ~", // C A D Bm
  U: "~@2 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~", // D
  V: "[a3,d4,f#4] ~@3 d4 ~@3 e4@2 ~@2 f#4@2 ~@2", W: "[b3,d4,g4] ~@3 [c4,d4,f#4] ~@3 [b3,d4,g4] ~@7",
  X: "[b3,d4,g4] ~@3 [c4,d4,f#4]@2 ~@2 [b3,d4,g4] ~@7", // G D7 G
  Y: "~@2 [c4,d#4,g#4] ~@3 [c4,d#4,g#4] ~@3 [c4,d#4,g#4] ~@2 g#4 [c4,d#4,g#4] ~", // G#
  Z: "~@2 [c#4,d#4,g4] ~@3 [c#4,d#4,g4] ~@3 [c#4,d#4,g4] ~@3 [c#4,d#4,g4] ~", // D#7
  AA: "~@2 [c4,d#4,g#4] ~@3 [c4,d#4,g#4] ~@3 [c4,d#4,g#4] ~@3 [c4,d#4,g#4] ~", // G#
  AB: "[c4,d#4,g#4] ~@3 [c#4,d#4,g4] ~@3 [c4,d#4,g#4] ~ [c4,d#4,g#4]!3 ~@3", // G# D#7 G#
})).s("gm_bassoon").gain(0.35)

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

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

// drums · ride
const ride = s("rd").struct("<A B@3 C B@16 D B@7 D B@23 C B@7 C B@8 ~>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x!3 ~", D: "x ~ x!2",
})).gain(0.36)

stack(bass, clarinet, acoustic_guitar_nylon, bassoon, kick, snare, ride)

More by Oberkrainer