Strudelify
Rote Rosen cover art

1981 · Das Beste - In Erinnerung an Freddy Breck

Rote Rosen

BRECK,FREDDY

KeyD minorTempo180 bpm
0:00/0:00
// Rote Rosen — BRECK,FREDDY
// 180 bpm, 3/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 189 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(180/3)

// 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, A@4 for four bars: edit a riff to change every repeat.

// other · oboe · "M-Gesang"
const oboe = note(`<
  ~@15 A B@2 C@2 D E F@2 G@2 H@2 I J K A B@2 C@2 D E F@2 G@2 H@2 I L M ~@17 N O P@2 N O P@2 N ~@22 A B@2 C@2 D E F@2 G@2
  H@2 I J K A B@2 C@2 D E F@2 G@2 H@2 I L M ~@17 N O P@2 N O P@2 N ~@36
>`.pickRestart({
  A: "~@5 f4@8 e4@3", B: "[g4@5 f4@15 ~ bb4@8 a4@2 ~]/2", C: "[c5@5 bb4@16 d5@5 ~ c5@5]/2", D: "c5@5 bb4@6 a4@5",
  E: "a4@5 g4@6 f4@5", F: "[eb4@5 c4@16 eb4@8 d4@2 ~]/2", G: "[f4@5 eb4@16 a4@8 ab4@3]/2",
  H: "[bb4@5 a4@16 c5@5 ~ bb4@4 ~]/2", I: "bb4@5 a4@5 ~ g4@5", J: "g4@5 f4@6 eb4@5", K: "d4", L: "f4@5 g4@5 ~ a4@5",
  M: "bb4", N: "d5", O: "e5@5 gb5@5 ~ e5@5", P: "[d5@5 gb5@6 ~@5 a5@5 e5@6 gb5@5, ~@11 b5@7 ~@14]/2",
})).s("gm_oboe").gain(0.48)

// chords · string ensemble 1 · "M-String"
const string_ensemble_1 = note(`<
  ~@4 A B C D E@2 F G H@4 ~@30 I J K@2 L M N@2 O P K@2 L O N@2 Q@2 ~@8 R S T U V@2 O W X@2 Y@2 Z@2 AA O AB@2 AC@2 ~@34 I
  J K@2 L M N@2 O P K@2 L O N@2 Q@2 ~@8 R S T U V@2 O W X@2 Y@2 Z@2 AA O AB@2 AC@2 Z@2 AA O AB@2 AD@2 ~@9
>`.pickRestart({
  A: "~@5 [f3,f4,f5,f6]@3 ~@3 [eb3,eb4,eb5,eb6]@3 ~@2", // F Eb
  B: "[d3,d4,d5,d6]@3 ~@2 [c3,c4,c5,c6]@3 ~@3 [bb2,bb3,bb4,bb5]@3 ~@2", // D C Bb
  C: "[a2,a3,a4,a5]@4 ~ [g2,g3,g4,g5]@4 ~@2 [f2,f3,f4,f5]@4 ~", // A G F
  D: "[e2,e3,e4,e5]@4 ~ [f2,f3,f4,f5]@3 ~@3 [bb2,bb3,bb4,bb5]@4 ~", E: "[[f3,d4,f5,d6]@29 ~@3]/2",
  F: "[f3,d4,f5,d6]@15 ~", G: "[eb3,c4,eb5,c6]", H: "[[d3,bb3,d5,bb5]@51 ~@13]/4",
  I: "[bb3,d4]@5 [d4,f4]@5 ~ [d4,bb4]@5", J: "[bb4,d5]@5 [d5,f5]@5 ~ [d5,bb5]@5",
  K: "[[f5,a5]@21 [eb5,g5]@5 ~ [d5,f5]@5]/2", L: "[eb5,g5]@11 [eb5,g5]@5", M: "[d5,f5]",
  N: "[[eb5,g5]@21 [d5,f5]@5 ~ [c5,eb5]@5]/2", O: "[d5,f5]@11 [d5,f5]@5", P: "[bb4,d5]", Q: "[[bb4,d5]@3 ~]/2",
  R: "d3@5 db3@6 d3@2 ~@3", S: "[d3,d4]@5 [db3,db4]@6 [d3,d4]@3 ~@2",
  T: "[d3,e3]@5 [db4,db5]@4 ~@2 [d3,d5]@4 ~, [d4,d5]@4 ~ db3@6 d4@2 ~@3", // Dsus2 Db D
  U: "[d3,d4,d6]@5 [db5,db6,d6]@3 ~@3 [d3,d4,d5,d6]@3 ~@2, d5@3 ~@2 [db3,db4]@5 ~ c6 ~@4", // D Dmaj7 D Db
  V: "[[c5,eb5]@21 [bb4,d5]@5 ~ [a4,c5]@5]/2", W: "[d5,f5]@11 [d5,g5]@5", X: "[[gb5,a5]@21 [d5,g5]@5 ~ [gb5,a5]@5]/2",
  Y: "[g5,bb5]/2", Z: "[[g5,bb5]@21 [f5,a5]@5 ~ [eb5,g5]@5]/2", AA: "[f5,a5]@11 [eb5,g5]@5",
  AB: "[[g5,eb6]@21 [f5,d6]@5 ~ [eb5,c6]@5]/2", AC: "[[d5,bb5]@21 ~@11]/2", AD: "[[d5,bb5]@29 ~@3]/2",
})).s("gm_string_ensemble_1").gain(0.52)

// bass · acoustic bass · "M-Bass"
const bass = note(`<
  A@2 B C D@4 A@2 E@2 F@2 B G H I H I H B J K J K J K@2 L H I H I H I H B J K J K J K@2 L H I M N O P J Q O P J Q O P J
  Q O@2 R S R S R S R S T@3 R G@2 O@2 R@2 U V W@2 G O G@2 H@2 F@2 B G H I H I H B J K J K J K@2 L H I H I H I H B J K J
  K J K@2 L H I M N O P J Q O P J Q O P J Q O@2 R S R S R S R S T@3 R G@2 O@2 R@2 U V W@2 G O G@2 H@2 W@2 G O G@2 X@6
  Y@5
>`.pickRestart({
  A: "[bb1@15 ~]/2", B: "bb1", C: "f1@15 ~", D: "[bb1@63 ~]/4", E: "f2@15 ~", F: "[bb1@26 ~ f2@5]/2", G: "f2@10 ~ f2@5",
  H: "bb1@9 ~@2 bb1@3 ~@2", I: "bb1@13 ~@3", J: "f1@10 ~ f1@4 ~", K: "f1@7 ~", L: "~@5 g1@6 a1@5, f1@7 ~@9",
  M: "f1@8 ~@3 f1@4 ~", N: "~@5 g1@5 ~ a1@5, f1 ~", O: "bb1@9 ~@2 bb1@5", P: "bb1@5 f1@6 bb1@5", Q: "f1@5 g1@6 a1@5",
  R: "d2@9 ~@2 d2@5", S: "a1@9 ~@2 a1@5", T: "d2@7 ~", U: "g1@9 ~@2 g1@5", V: "g1@5 a1@6 bb1@5", W: "eb2@9 ~@2 eb2@4 ~",
  X: "[bb1@26 ~@6 bb1@26 ~@6 bb1@26 ~ f1@5, ~@27 f1@7 ~@25 f1@7 ~@30]/6",
  Y: "[bb1@58 ~@6 bb1@5 ~@11, ~@59 f1@7 ~@14]/5",
})).s("gm_acoustic_bass").gain(0.56)

// chords · french horn · "M-Horn"
const french_horn = note(`<
  A@2 B C D@4 E@2 F G H@4 ~@32 I J K L I J K L I J K L I J M@2 ~@8 N@2 O@2 P Q R S T U V W X Y P S P Q Z@2 H@4 ~@32 I J
  K L I J K L I J K L I J M@2 ~@8 N@2 O@2 P Q R S T U V W X Y P S P Q Z@2 X Y P S P Q AA AB AC S K AD K AD@2 L AE
>`.pickRestart({
  A: "[[bb3,d4]@23 ~@4 [bb3,d4]@2 d4@2 ~, ~@29 bb3 ~@2]/2", B: "[bb3,d4]@8 ~@3 [d4,f4] ~ d4@2 ~, ~@13 f4 ~@2",
  C: "[d4,f4]@9 ~@2 [d4,bb4]@2 [d4,bb4]@2 ~", D: "[[d4,bb4]@31 ~]/4", E: "[[f4,d5]@29 ~@3]/2", F: "[f4,d5]",
  G: "[eb4,c5]", H: "[[d4,bb4]@53 ~@11]/4", I: "a3@2 ~@3 [a3,f4] ~@2 a3@2 ~ [a3,f4]@2 ~@3, f4 ~@7 f4 ~@7",
  J: "[a3,f4]@2 ~@3 [a3,f4]@2 ~@4 [a3,f4]@2 ~@3", K: "[d4,f4]@2 ~@3 f4@2 ~ f4@2 ~ [d4,f4]@2 ~@3, ~@5 d4 ~@2 d4 ~@7",
  L: "[d4,f4]@2 ~@3 [d4,f4]@2 ~@4 [d4,f4]@3 ~@2", M: "[[d4,f4]@7 ~]/2", N: "[d4@23 ~@4 d4 ~ d4 ~@2]/2",
  O: "[d4@25 ~@2 d4 ~ d4@2 ~]/2", P: "[f4,a4]@8 ~@3 [f4,a4] ~ [f4,a4] ~@2",
  Q: "a4@2 ~@3 [f4,a4]@2 ~@4 [f4,a4]@2 ~@3, f4 ~@15", R: "[d4,bb4]@10 ~ d4@2 bb4@2 ~, ~@11 bb4 ~ d4 ~@2",
  S: "[d4,bb4]@2 ~@3 [d4,bb4]@2 ~@4 [d4,bb4]@2 ~@3", T: "[gb4,a4]@9 ~@2 [gb4,a4]@2 a4@2 ~, ~@13 gb4 ~@2",
  U: "gb4@2 ~@3 [gb4,a4]@2 ~@4 [gb4,a4]@2 ~@3, a4 ~@15", V: "[bb3,g4]", W: "[bb3,f4]",
  X: "[eb4,g4]@9 ~@2 [eb4,g4]@2 g4@2 ~, ~@13 eb4 ~@2", Y: "[eb4,g4]@2 ~@3 [eb4,g4]@2 ~@4 [eb4,g4]@2 ~@3",
  Z: "[[d4,bb4]@7 ~]/2", AA: "[bb3,d4] ~@4 [bb3,d4] ~@2 d4@2 ~ [bb3,d4]@2 ~@3, ~@8 bb3 ~@7",
  AB: "d4@2 ~@3 [bb3,d4]@2 ~@4 bb3@2 ~@3, bb3 ~@10 d4 ~@4", // Bb
  AC: "bb4@2 ~@3 [d4,bb4] ~@2 [d4,bb4]@2 ~ [d4,bb4]@2 ~@3, d4 ~@15", AD: "[d4,f4]@2 ~@3 [d4,f4]@2 ~@4 [d4,f4]@2 ~@3",
  AE: "[d4,f4]@3 ~@13", // Dm
})).s("gm_french_horn").gain(0.5)

// other · string ensemble 2 · "M-SlowSt"
const string_ensemble_2 = note(`<
  ~@32 A@4 B C D@2 E@4 F@2 G@2 H@2 I@2 H@2 I@2 H@2 I@2 H@2 J@2 C K C K C K C K L@4 D@2 G@2 M@3 N O@2 N B P@2 B C ~@20
  A@4 B C D@2 E@4 F@2 G@2 H@2 I@2 H@2 I@2 H@2 I@2 H@2 J@2 C K C K C K C K L@4 D@2 G@2 M@3 N O@2 N B P@2 B C O@2 N B P@2
  Q@2 R@2 S@2 T@5
>`.pickRestart({
  A: "bb3/4", B: "bb3", C: "d4", D: "f3/2", E: "f3/4", F: "[f3@21 g3@5 ~ a3@5]/2", G: "bb3/2", H: "[a5,c6]/2",
  I: "[bb5,d6]/2", J: "[[bb5,d6]@15 ~]/2", K: "a3", L: "[~ d3, d4]/4", M: "[d4@2 g4]/3", N: "f4", O: "eb4/2", P: "a3/2",
  Q: "[d4@21 eb4@6 g4@5]/2", R: "[f4@21 bb4@6 eb5@5]/2", S: "[d5@21 eb5@6 g5@5]/2", T: "[f5@67 ~@13]/5",
})).s("gm_string_ensemble_2").gain(0.35)

// chords · synth strings 1 · "M-SynStr"
const synth_strings_1 = note(`<
  A@5 B C D E@3 F G@4 H@6 I@8 J@2 H@6 I@8 J@2 K@2 J@2 L@2 M@2 L@2 J@2 L@2 J@2 N O N O N O N O P@4 Q@2 R@2 S@2 R@2 T@2 U
  V W@2 X@2 Y@4 H@6 I@8 J@2 H@6 I@8 J@2 K@2 J@2 L@2 M@2 L@2 J@2 L@2 J@2 N O N O N O N O P@4 Q@2 R@2 S@2 R@2 T@2 U V W@2
  X@2 T@2 U V W@2 Z@8 ~@3
>`.pickRestart({
  A: "[[f3,bb3,d4]@69 [f3,f4]@6 [eb3,eb4]@5]/5", B: "[d3,d4]@5 [c3,c4]@6 [bb2,bb3]@5",
  C: "[a2,a3]@5 g3@5 ~ [f2,f3]@5, ~@5 g2@3 ~@8", D: "[e2,e3]@5 [f2,f3]@6 [bb2,bb3]@5", E: "[[bb3,d4]@2 [a3,c4], f3]/3",
  F: "[f3,a3,c4]", G: "[f3,bb3,d4]/4", H: "[f3,bb3,d4]/6", I: "[f3,a3,c4]/8", J: "[f3,bb3,d4]/2",
  K: "[[a3,c4]@31 ~, f3@27 ~@5]/2", L: "[[f3,a3,c4]@31 ~]/2", M: "[[f3,bb3,d4]@31 ~]/2", N: "[a3,d4,gb4]",
  O: "[a3,db4,e4]", P: "[~@3 [d2,d3], [a3,d4,gb4]]/4", Q: "[a3,f4]/2", R: "[bb3,d4]/2", S: "[a3,d4]/2",
  T: "[bb3, g3@15 ~]/2", U: "[f3,a3]", V: "[f3,bb3]", W: "[f3,a3]/2", X: "[~ d4, [f3,bb3]@31 ~]/2",
  Y: "[[f3,bb3], d4@3 ~]/4", Z: "[f3,bb3,d4]/8",
})).s("gm_synth_strings_1").gain(0.24)

// other · acoustic guitar steel · "M-RhyGit"
const acoustic_guitar_steel = note(`<
  ~@16 A B A B A B C D C D C D E F G H A B A B A B C D C D C D E F G H I J K L M@2 K L N O K L N O K L P Q R S T S T S T
  U V W E F G H X Y Z AA AB AA C G C D G H ~@4 A B A B A B C D C D C D E F G H A B A B A B C D C D C D E F G H I J K L
  M@2 K L N O K L N O K L P Q R S T S T S T U V W E F G H X Y Z AA AB AA C G C D G H AB AA C G C D B AC B AD AE B AC AF
  AE B AG
>`.pickRestart({
  A: "d4@5 f4@6 bb4@5", B: "d5@5 bb4@6 f4@5", C: "a4@5 f4@6 c4@5", D: "f4@5 a4@6 f4@5", E: "c4@5 f4@6 a4@5",
  F: "f4@5 c4@6 a4@5", G: "bb4@5 f4@6 d4@5", H: "f4@5 bb4@6 f4@5", I: "f3@5 a3@6 c4@5", J: "~@5 c4@6 a3@5, f4@7 ~@9",
  K: "d4@5 bb3@6 f3@5", L: "bb3@5 d4@6 bb3@5", M: "[c4@5 f3@6 ~@5 c4@5 f4@6 c4@5, ~@11 a3@7 ~@14]/2",
  N: "c4@5 a3@6 f3@5", O: "a3@5 c4@6 f4@5", P: "d3@5 gb3@6 a3@4 ~", Q: "a3@5 e3@6 db4@5", R: "a3@5 gb3@6 d4@5",
  S: "db4@5 a3@6 e3@5", T: "d4@5 a3@5 ~ gb3@5", U: "a3@5 d4@6 a3@5", V: "gb3@5 d3@5 ~ gb3@5", W: "a3@5 d4@5 ~ a3@4 ~",
  X: "a4@5 gb4@5 ~ d4@5", Y: "gb4@5 a4@6 gb4@5", Z: "bb4@5 g4@6 d4@5", AA: "g4@5 bb4@6 g4@5", AB: "bb4@5 g4@6 eb4@5",
  AC: "bb4@5 d5@6 bb4@5", AD: "bb4@5 f4@6 d5@5", AE: "bb4@5 f4@5 ~ bb4@5", AF: "f4@5 bb4@5 ~ d5@5", AG: "bb4@3 ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.43)

// drums · kick
const kick = s("bd").struct(`<
  A ~ A@2 B@4 A ~ A B A@4 C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A
  C@2 A@11 C@2 A C A C A C@3 A C A C A C@2 A@4 C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C
  A C A C A C A C A C@2 A@11 C@2 A C A C A C@3 A C A C A C@3 A C A C A@2 D A D A D A D A D A
>`.pickRestart({
  A: "x", B: "x ~@4 x ~@5 x ~@4", C: "x ~@10 x ~@4", D: "~@11 x ~@4",
})).gain(0.35)

// drums · snare
const snare = s("sd").struct(`<
  A@4 B@4 C ~@4 C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C A B ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ D ~
  C ~ C ~ C ~ C ~ C D B ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ D ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C
  ~ C A B ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ D ~ C ~ C ~ C ~ C ~ C D B ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ D ~ C ~ C ~ C ~ C ~ C ~
  C ~ C ~ E C
>`.pickRestart({
  A: "x ~@4 x ~@2 x ~@2 x ~@4", B: "x ~@4 x ~@5 x ~@4", C: "x", D: "x ~@10 x ~@4", E: "~@11 x ~@4",
})).gain(0.35)

// drums · low tom
const low_tom = s("lt").struct("<~@11 A ~@63 A ~@79 A ~@15 B ~@17>".pickRestart({
  A: "~@11 x ~@4", B: "~@5 x ~@2",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@11 C B C D C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B E B C@8 B@3
  F C B C B C B G@2 C B C F C B G F C B C D C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B
  C B C B C B C B E B C@8 B@3 F C B C B C B G@2 C B C F C B G F C B C F C B C B C B C B C B C B ~
>`.pickRestart({
  A: "~ x ~@3 x ~@5 x ~@4", B: "x ~@4 x ~@5 x ~@4", C: "x ~@4 x ~@2 x ~@2 x ~@4", D: "x ~@4 x ~@3 x ~@6",
  E: "~@5 x ~@2 x ~@2 x ~@4", F: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", G: "x ~@4 x ~@2 x ~@2 x ~ x ~@2",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@75 [~@5 x ~@10] ~@79 [~@5 x ~@10] ~@15 [~@5 x ~@10] ~@17>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@188 x>").gain(0.35)

// drums · high tom
const high_tom = s("ht").struct("<~@11 A ~@63 B ~@79 B ~@14 C B ~@17>".pickRestart({
  A: "~@5 x ~@10", B: "x", C: "x ~@4 x ~ x ~@2 x ~@2 x ~@2",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<A ~@3 A ~@3 A ~ A@3 ~@49 A ~@12 A ~@16 A ~@49 A ~@12 A ~@33>".pickRestart({
  A: "x",
})).gain(0.4)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@16 A ~@15 A ~@63 A ~@15 A ~@76>".pickRestart({
  A: "x",
})).gain(0.25)

// drums · ride
const ride = s("rd").struct("<~@46 x [x ~@4 x ~@5 x ~@4] ~@78 x [x ~@4 x ~@5 x ~@4] ~@61>").gain(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@49 A ~ B ~ B ~ B ~ B ~ B ~ B ~@14 C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~@38 A ~ B ~ B ~ B ~ B ~ B ~ B ~@14 C ~ C ~ C ~ C ~
  C ~ C ~ C ~ C ~ C ~ C ~ C ~@2 D E D E D E ~@2 D E
>`.pickRestart({
  A: "x ~@2 x ~ x ~@10", B: "~@5 x ~@2 x ~@2 x ~@4", C: "x ~@4 x ~@2 x ~@2 x ~@4", D: "~@11 x ~@4", E: "x",
})).gain(1.51)

stack(
  oboe, string_ensemble_1, bass, french_horn, string_ensemble_2, synth_strings_1, acoustic_guitar_steel, kick, snare,
  low_tom, hihat, mid_tom, open_hat, high_tom, crash, crash_soft, ride, cabasa
)