Strudelify

Reif fur die Insel

Peter Cornelius

KeyC majorTempo144 bpm
0:00/0:00
// Reif fur die Insel — Peter Cornelius
// 144 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 160 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 25.
setcpm(144/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.

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@9 A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~@16 E@2 F@2 ~@3 A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~@16
  E@2 F@2 ~@3 A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~@16 G H I J K L ~ A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~ A ~ B ~ C
>`.pickRestart({
  A: "~ e4 ~@2 [g3,c4,e4] ~@3", B: "~ e4 ~@2 [a3,c4,e4] ~@3", C: "~ f4 ~@2 [a3,d4,f4] ~@3",
  D: "~ d4 ~@2 [b3,d4,g4] ~@3", E: "[~ [a3,d4]@31, [d3,f3]@31 ~]/2", F: "[~ [b3,e4]@30 ~, [e3,g3]@31 ~]/2",
  G: "~ [c4,f4]@15, [f3,a3]@15 ~", H: "~ [d4,g4]@15, [g3,b3]@15 ~", I: "~ [e4,g4]@14 ~, [g3,c4]@15 ~",
  J: "~ e4@15, [e3,a3,c4]@15 ~", K: "~ f4@15, [f3,a3,c4]@15 ~", L: "[g3,b3,d4,g4]@15 ~",
})).s("gm_acoustic_guitar_steel").gain(0.17).pan(0.1)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@7 A B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J K F H J G F@2 ~@2 L@2 M N B@2 C@2 D@2 E@2 B@2
  C@2 D@2 E@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J K F H J G F@2 ~@2 L@2 M N B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2
  I@2 J K F H J G F@2 ~@6 B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 B@2 C@2 O@2
>`.pickRestart({
  A: "~@5 [g3,b3,d4]!3", // G
  B: "[[g3,c4,e4]!3 ~ [g3,c4,e4] ~ [g3,c4,e4] g3 [g3,c4]!2 g3 [g3,c4,e4]@2 [g3,c4,e4] [g3,c4,e4,g4] [g3,e4], ~@2 g4@4 g4@5 g4@3 ~@2, ~@4 e4 ~@3]/2", // C C5 C
  C: "[[a3,c4,e4]!3 ~ [a3,c4,e4] ~ [a3,c4,e4] a3 [a3,c4]!2 a3 [a3,c4,e4]@2 [a3,c4,e4] [a3,c4,e4,a4] [a3,e4], ~@2 a4@4 a4@5 a4@3 ~@2, ~@4 e4 ~@3]/2", // Am A5
  D: "[[a3,d4,f4]!3 ~ [a3,d4,f4] ~ [a3,d4,f4] a3 [a3,d4]!2 a3 [a3,d4,f4]@2 [a3,d4,f4] [a3,d4,f4,a4] [a3,f4], ~@2 a4@4 a4@5 a4@3 ~@2, ~@4 f4 ~@3]/2", // Dm D5 Dm
  E: "[[g3,b3,d4]!3 ~ [g3,b3,d4] ~ [g3,b3,d4] g3 [g3,b3]!2 g3 [g3,b3,d4]@2 [g3,b3,d4] [g3,b3,d4,g4] [g3,d4], ~@2 g4@4 g4@5 g4@3 ~@2, ~@4 d4 ~@3]/2", // G G5
  F: "~@4 [c4,e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4] ~@3", G: "~@4 [d4,g4,b4] ~ [d4,g4,b4] ~@5 [d4,g4,b4] ~@3",
  H: "~@4 [c4,e4,a4] ~ [c4,e4,a4] ~@5 [c4,e4,a4] ~@3", I: "~@4 [e4,g4,b4] ~ [e4,g4,b4] ~@5 [e4,g4,b4] ~@3",
  J: "~@4 [c4,f4,a4] ~ [c4,f4,a4] ~@5 [c4,f4,a4] ~@3", K: "~@4 [d4,g4,b4] ~ [d4,g4,b4] ~@5 [d4,g4,b4]@2 ~@2",
  L: "[~@17 e4@14 ~, ~@15 [e3,g3]@16 ~, ~@16 b3@15 ~]/2", M: "[a3,c4,f4]!3 ~ [a3,c4,f4] ~ [a3,c4,f4] a3, ~ a4@2 a4",
  N: "[b3,d4,g4]!3 ~ [b3,d4,g4] ~ [b3,d4,g4] b3, ~ b4@2 b4", // G
  O: "[[a3,d4,f4]!3 ~ [a3,d4,f4] ~ [a3,d4,f4] a3 [a3,d4]!2 a3 [a3,d4,f4]@2 [a3,d4,f4] ~@2, ~@2 a4@4 a4@5 a4@3 ~@2, ~@4 f4 ~@3]/2", // Dm D5 Dm
})).s("gm_electric_guitar_clean").gain(0.17).pan(0.7)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note(`<
  ~@8 A B C D E F G H A B C D E F G H A B C D E F G H ~@20 I J A B C D E F G H A B C D E F G H A B C D E F G H ~@20 I J
  A B C D E F G H A B C D E F G H ~@22 A B C D E F G H A B C D E F G H A B C D E K
>`.pickRestart({
  A: "~@3 [g3,c4,e4] ~ [g3,c4,e4] ~ [c4,e4]", B: "~@2 [c4,e4] ~@4 [c4,g4]", C: "~@3 [a3,c4,e4] ~ [a3,c4,e4] ~ [c4,e4]",
  D: "~@2 [c4,e4] ~@4 [c4,a4]", E: "~@3 [a3,d4,f4] ~ [a3,d4,f4] ~ [d4,f4]", F: "~@2 [d4,f4] ~@4 [d4,a4]",
  G: "~@3 [g3,b3,d4] ~ [g3,b3,d4] ~ [b3,d4]", H: "~@2 [b3,d4] ~@4 [b3,g4]", I: "~@3 [a3,c4,f4] ~ [a3,c4,f4] ~ [c4,f4]",
  J: "~@3 [b3,d4,g4] ~ [b3,d4,g4] ~ [d4,g4]", K: "~@2 [d4,f4] ~@5",
})).s("gm_electric_guitar_clean").gain(0.1).pan(0.7)

// bass · fretless bass
const bass = note(`<
  A B@6 C D E F G H I J K D E F G H I J K D E F G H I J L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH D E F G H
  I J K D E F G H I J K D E F G H I J L AI AJ O AK AL AM S T U V W X Y Z AA AB AC AD AE AF AN AH D E F G H I J K D E F G
  H I J K AI AO O AK AL AM S T U V W X Y Z AA AB AP AQ AR AS AT AU D E F G H I J K D E F G H I J K D E F G H AV
>`.pickRestart({
  A: "c1 ~ c1@2 ~@2 c1 ~ c1@2 ~@6", B: "c1 ~ c1 ~@3 c1 ~ c1 ~@7", C: "c1 ~ c1 ~@3 c1 ~ c1 ~ g1@2 g1@2 g1@2",
  D: "c2@5 ~ c2 ~ c2@5 ~ c2@2", E: "~@2 c2@3 ~ c2 ~ c2@2 c2@2 d2@2 e2@2", F: "a1@5 ~ a2 ~ a2@5 ~ a2@2",
  G: "~@2 a2@3 ~ a2 ~ a2@2 e2@2 g2@2 a2@2", H: "d2@5 ~ d2 ~ d2@5 ~ d2@2", I: "~@2 d2@3 ~ d2 ~ d2@2 b1@2 c2@2 d2@2",
  J: "g1@5 ~ g1 ~ g1@5 ~ g2@2", K: "~@2 g1@3 ~ g2 ~ g2@2 g1@2 b1@2 d2@2", L: "~@2 g1@3 ~ g1 ~ d2@4 g1@4",
  M: "~@10 g2!3 ~ g2@2", N: "e2 ~ e2 ~ d2@2 c2@6 ~@4", O: "~@10 g1 ~ g1 ~ g1@2", P: "b1 ~ b1@2 d2 ~ d2 ~ g1@6 ~@2",
  Q: "~@10 a2!3 ~ a2 ~", R: "g2 ~ g2 ~ e2 ~ a1@8 ~@2", S: "~@2 e2 ~ e2 ~ e2 ~ b1 ~ b1@2 d2@2 e2@2", T: "e1@7 ~@9",
  U: "~@2 f1 ~ f1@2 f1@2 a1@2 a1@2 c2@2 ~@2", V: "~@4 g2 ~ g2@2 d2@2 g1@2 d2@2 ~@2", W: "c2@9 ~ b1@6",
  X: "~@4 a2 ~ a2 ~ e2@2 g2@2 a2@2 ~@2", Y: "~@4 f1 ~ f1 ~ a1 ~ a1 ~ c2@2 ~@2", Z: "~@2 g2 ~ g2 ~ d2@2 g1@4 d2@2 ~@2",
  AA: "c2@3 ~ c2 ~ c2@2 e2 ~ e2 ~ g2@2 ~@2", AB: "~@2 c2 ~ c2 ~ c2@2 g2@4 c2@3 ~", AC: "d2@5 ~ d2 ~", AD: "d2@15 ~",
  AE: "e2@3 b1", AF: "e1@7 ~", AG: "f1 ~ f1 ~ a1 ~ a1 ~ c2 ~ c2 ~@5", AH: "~@2 g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ d2@3 ~",
  AI: "~@10 c3!3 ~ c3@2", AJ: "a2 ~ a2@2 g2@2 e2@5 ~ c2@2 d2@2", AK: "b1 ~ b1@2 d2 ~ g1@6 ~@4",
  AL: "~ a1 e1 g1 a1!2 ~@2", AM: "~@3 c2@3 d2@2", AN: "f1@5 ~ f1 ~ a1 ~ a1 ~ c2@4",
  AO: "a2 ~ a2 ~ g2@2 e2@5 ~ c2@2 d2@2", AP: "f1@5 ~ f1 ~", AQ: "g1@5 ~ g1 ~", AR: "c2 b1", AS: "a1@3 g1", AT: "f1",
  AU: "g1", AV: "~@2 d2@3 ~ d2 ~ d2@2 b1@2 c2@2 ~@2",
})).s("gm_fretless_bass").gain(0.38)

// other · lead 5 charang
const lead_5_charang = note(`<
  ~@7 A B C D E F G H ~@2 C I E J G K ~@2 C I E J G K ~@23 B C D E F G H ~@2 C I E J G K ~@2 C I E J G K ~@23 B C D E F
  G H ~ B C D E F G H ~@23 B C D E F G H ~ B C D E F G H ~ B C D E F L
>`.pickRestart({
  A: "~@5 g2!3", B: "c2@2 c2@2 ~@2 c2 ~@9, ~ c3 ~@2", C: "~@5 c3 b2 a2", D: "a1!2 ~ a1 ~@4, ~ a2 ~@2",
  E: "~@5 a2 b2 c3", F: "d2!2 ~ d2 ~@4, ~ d3 ~@2", G: "~@5 d3 e3 d3", H: "g2!2 ~ g2 ~@4, ~ g3 ~@2", I: "a1 ~@3",
  J: "d2 ~@3", K: "g2 ~@3", L: "~@5 d3 e3 ~",
})).s("gm_lead_5_charang").gain(0.34).pan(0.4)

// chords · pad poly
const pad_poly = note(`<
  ~@8 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 ~@16 F@2 G@2 H I A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2
  ~@16 F@2 G@2 H I A B C@2 D@2 E@2 A B C@2 D@2 E@2 ~@16 J K L@2 M N A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 O@2
>`.pickRestart({
  A: "~@4 [c4,e4,g4]@3 ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", B: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4]@4 ~@2 [c4,e4,g4]@2 ~@2",
  C: "[~@4 [c4,e4,a4]@2 ~@4 [c4,e4,a4] ~@3 [c4,e4,a4]@5 ~ [c4,e4,a4]@2 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~]/2", // Am
  D: "[~@4 [a3,d4,f4] ~ [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4]@5 ~ [a3,d4,f4] ~ [a3,d4,f4]@3 ~ [a3,d4,f4] ~ a3 ~ [a3,d4,f4] ~]/2", // Dm
  E: "[~@4 [b3,d4,g4] ~ [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4]@5 ~ [b3,d4,g4]@2 [b3,d4,g4] ~@3 [b3,d4] ~ [b3,d4,g4]@3 ~]/2", // G Bm G
  F: "[a3,d4,f4,a4]/2", G: "[b3,e4,g4,b4]/2", H: "[a3,c4,f4]", I: "[b3,d4,g4]", J: "[a3,c4,f4,a4]", K: "[b3,d4,g4,b4]",
  L: "[g4 a4, [c4,e4,c5]]/2", M: "[c4,f4,a4]", N: "[d4,g4,b4]",
  O: "[~@4 [a3,d4,f4] ~ [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4]@5 ~ [a3,d4,f4] ~ [a3,d4,f4]@3 ~ [a3,d4,f4] ~ a3 ~@3]/2", // Dm
})).s("gm_pad_poly").gain(0.25).pan(0.7)

// other · lead 1 square
const lead_1_square = note("<~@25 A B@2 C@2 D@2 ~@31 A B@2 C@2 D@2 ~ A B@2 C@2 D@2 ~@82>".pickRestart({
  A: "~@3 c5 d5 e5 d5 c5", B: "[a4@9 ~@2 a4 b4 c5 b4 a4]/2", C: "[f4@10 ~@4 g4 a4]/2", D: "[g4@5 ~@3]/2",
})).s("gm_lead_1_square").gain(0.29).pan(0.3)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@32 A B C D E F G H I D A J K L A B ~@30 A B C D E F G H I D A J K L A B ~@22 A B C D E F G H I D A J K L A B ~@28
>`.pickRestart({
  A: "~@10 c3!3 ~ g3 ~", B: "~@10 e3 ~ g3 ~ e3 ~", C: "~@10 g2!3 ~ d3 ~", D: "~@10 b2 ~ d3 ~ b2 ~",
  E: "~@10 a2!3 ~ e3 ~", F: "~@10 c3 ~ e3 ~ c3 ~", G: "~@10 e2!3 ~ b2 ~", H: "~@10 g2 ~ b2 ~ g2 ~",
  I: "~@10 f2!3 ~ c3 ~", J: "~@10 c3!3 ~ e3 ~", K: "~@10 c3!3 ~ a2 ~", L: "~@10 g2!2 b2 ~ d3 ~",
})).s("gm_electric_guitar_muted").gain(0.34).pan(0.2)

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

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

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@8 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~@5 A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A ~@5 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A ~@7 A B A B A B A ~ A B A B A B A ~ A B A B A B
>`.pickRestart({
  A: "~ x ~ x ~@4", B: "~ x ~@6",
})).gain(0.17)

// drums · low tom
const low_tom = s("lt").struct("<~@47 [~@5 x!2 ~] ~@45 [~@5 x!2 ~] ~@66>").gain(0.46)

// drums · mid tom
const mid_tom = s("mt").struct("<~@51 [~@4 x!4] ~@45 [~@4 x!4] ~@62>").gain(0.4)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@15 A B ~@6 A B ~@7 B ~@15 B ~@3 B ~@8 A B ~@6 A B ~@7 B ~@15 B ~@3 B ~ B ~@7 B ~@6 A B ~@15 B ~@3 B@3 ~@7 B ~@7 B
  ~@5
>`.pickRestart({
  A: "~@3 x", B: "x",
})).gain(0.29)

// drums · ride
const ride = s("rd").struct("<~@48 A B@2 C ~@42 A B@2 C ~@34 A B@2 D ~@24>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x!4 ~@4", D: "x!6 ~@2",
})).gain(0.23)

stack(
  acoustic_guitar_steel, electric_guitar_clean, electric_guitar_clean_2, bass, lead_5_charang, pad_poly, lead_1_square,
  electric_guitar_muted, kick, snare, hihat, hihat_soft, low_tom, mid_tom, open_hat, crash, ride
)