Strudelify

Via

Raf

KeyE majorTempo81 bpm
0:00/0:00
// Via — Raf
// 81 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 5 synth choir (copy of ch 6 choir aahs)
// note: Full arrangement: all 79 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(81/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 · rock organ
const rock_organ = note(`<
  ~@10 A B A C D E D E F G H I J K L M N@2 O@2 P Q R S T U V W A B A C D E X Y F G H I J K L M N@2 O@2 P Q R Z AA AB AC
  AD N@2 O@2 P Q R Z T U AE AF@2
>`.pickRestart({
  A: "e5@3 d#5@5, b4", B: "[a4,b4]@3 b4, e5", C: "[a4,b4,e5]@3 [b4,f#5]", D: "[e5,g#5]@3 [b4,d#5,f#5]@5",
  E: "[a4,b4,e5]@3 [b4,d#5,f#5]", F: "[b4,e5,g#5]@3 [b4,d#5,f#5]@5", G: "g#4@3 ~@3 [b4,e5]@2, b4@3 ~, ~@3 f#4@5",
  H: "[e5,g#5]@3 [c#5,f#5]@5", I: "g#4@3 f#4@3 [f#4,b4]@2, b4@3 ~", J: "[e5,g#5]@2 b5 [d#5,f#5]@5",
  K: "[e5,g#5]@2 b5 [d#5,f#5]@3 [b4,d#5]@2", L: "c#5@3 b4@5, e5", M: "[b4,e5]@3 [d#5,f#5,b5]@5",
  N: "[f#5@3 e5@13, b4]/2", O: "[[c#6,e6,g#6]@27 ~@2 [d#6,f#6]@3]/2", P: "c#6@3 b5@2 g#5@3, e6", Q: "e6@3 d#6@5, b5",
  R: "[e5,a5,b5]", S: "[b5,d#6]", T: "f#5@3 e5@5, b4", U: "[c#6,e6,g#6]@3 [d#6,f#6]", V: "[c#6,e6]@6 [b5,d#6]@9 ~",
  W: "[a5,e6]@12 d#6 d6 [f5,g5,a5,c6] [a4,b4,c5,d5,e5], ~@6 b5 ~", X: "[e5,g#5]@3 [d#5,f#5]@5", Y: "[b4,e5]@15 ~",
  Z: "[f#5,b5,d#6]", AA: "[g#4,c#5]@3 [f#4,b4]@5", AB: "[e4,a4]@3 [f#4,b4]@5", AC: "[e4,a4]@3 [g#4,c#5]@5",
  AD: "[b4,e5]", AE: "[g#4,c#5,e5]@3 [f#4,b4,e5]@5", AF: "[[a4,e5]@16 [d#5,e5]@15 ~, b4@31 ~]/2",
})).s("gm_rock_organ").gain(0.22)

// bass · electric bass finger
const bass = note(`<
  ~@18 A B C D E F G H I J K L E M N O I P Q R ~@3 S T U V W X Y C D E F G H I J K L E M N Z AA AB AC AD I J K L E M N Z
  I P Q AE@2
>`.pickRestart({
  A: "e1@4 ~@2 e1@8 ~ b1", B: "e2@5 ~ e1@6 b1@4", C: "a1@5 ~ a1@9 a1", D: "a1@2 e2 a2 ~ e1 a1@6 b1@4",
  E: "c#2@2 g#2 b2@2 b2 c#3@2", F: "b1@4 ~@2 b1@2 ~ b1@3 ~@2 f#1 g#1", G: "a1@6 a1@5 ~ a1 a1@3",
  H: "b1 ~ b1 ~ b1@2 a1 b1@2 b1 b1@2 b1 c#2 e2 f#2", I: "e1@5 ~@2 b1 e2 b1 e2@2 ~ b1 ~ b1",
  J: "e1@4 ~@2 e1@4 g#2 a2 g#2 b2@3", K: "a1@4 ~@3 e1 a1 e1 a1@3 a1 ~ a1", L: "a1@2 e2@2 a2@2 a1@3 ~ a1@2 ~ b1@2 ~",
  M: "b1@4 ~@2 b1 f#1 b1 f#1 b1@3 b1@3", N: "a1@6 ~ e1 a1 ~ a1@4 ~ a1", O: "b1 ~ b1 ~ b1@2 b1 b1@2 b1 b1@2 b1 c#2 e2@2",
  P: "a1@4 ~@3 e1 a1 ~ a1@2 b1@3 ~", Q: "c#2@2 g#2 b2@3 b1@2", R: "a1@4 ~@3 a1 b1@2 a2 e2 b2@3 ~", S: "~@13 f#2@3",
  T: "c#3@2 d#3 d#3@3 b2@2", U: "a2@3 ~", V: "c#3@3 b2@5", W: "a2@3 g#2@3 f#2@3 e2@3 c#2 b1 a1@2", X: "e1@4 ~@2 e1@9 ~",
  Y: "b1@2 e2@2 b1@2 e1@5 ~ b1@4", Z: "b1 ~ b1 ~ b1@2 b1 b1@2 ~ b1 c#2 e2 c#2 e2@2",
  AA: "c#2 ~ c#2 ~ c#2@2 b1!2 ~ b1!2 ~ b1@2 b1@2", AB: "a1 ~ a1 ~ a1@2 b1!2 ~ b1 b1@2 b1 c#2 e2@2",
  AC: "a1@2 a1!2 a1@2 c#2!2 ~ c#2 c#2@2 e2 c#2 e2 f#2", AD: "b1 ~ b1 ~ b1@2 b1!2 ~ b1 b1@2 b2 c#3 e3 f#3",
  AE: "[a1@31 ~]/2",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B A C A B A B D E A B A B D E D E F G H I J K L M N@2 O@2 P Q O R N S T U A B A B D E D V F G H I J K L M N@2 O@2 P
  Q O R ~@4 N@2 O@2 P Q O R N S W X@2
>`.pickRestart({
  A: "[e3,g#3,b3,e4]@3 [b3,e4,g#4] [g#3,b3,e4,g#4]@2 [g#3,b3,d#4,g#4]@3 [b3,d#4] [g#3,b3,d#4]@2 [g#3,b3,d#4]@2 [e3,g#3,b3,d#4]@2, g#4 ~ e3@5 ~, ~@9 g#4@3 g#4@4", // E G#m B G#m Emaj7
  B: "[e3,a3,c#4,e4,a4]@3 ~ [a2,e3,a3]@2 [a2,e3,a3,c#4,e4,a4]@3 ~ [a2,e3,a3] ~ [b2,f#3,b3,d#4,f#4,b4]@2 ~@2, ~@3 [c#4,e4,a4]@3 ~@3 [a3,c#4,e4,a4]@2 ~@5", // A A5 A A5 B A
  C: "[e3,a3,c#4,e4,a4]@3 ~ [a2,e3,a3]@2 [a2,e3,a3,c#4,e4,a4]@3 ~ [a2,e3,a3] ~ [b2,f#3,b3,d#4,e4,f#4]@4, ~@3 [c#4,e4,a4]@3 ~@3 [a3,c#4,e4,a4]@2 ~@5", // A A5 A A5 B A
  D: "[c#3,g#3,b3,e4]@3 [g#3,b3,e4,g#4] [c#3,g#3,b3,e4,g#4] ~ [b2,g#3,b3,e4]@3 [b2,g#3,b3,e4] [b2,g#3,b3,e4]@2 [b2,g#3,b3,e4]@2 [b2,g#3,b3,e4]@2, g#4 ~@7", // C#m7 E C#m7 E
  E: "[a2,e3,b3,c#4,e4]@3 ~ [a2,e3,b3]@2 [a2,e3,b3,c#4,e4]@3 [b3,c#4,e4] [a2,e3,b3] ~ [b2,f#3,b3,d#4,f#4]@2 ~@2, ~@3 [c#4,e4]@3 ~@10", // A Asus2 A C#m7 Asus2 B C#m
  F: "[e3,g#3,b3,e4]@3 [b3,e4,g#4] [g#3,b3,e4,g#4]@2 [g#3,b3,d#4,f#4]@3 [b3,d#4] [g#3,b3,d#4]@2 [g#3,b3,d#4]@2 [e3,g#3,b3,d#4]@2, g#4 ~ e3@5 ~, ~@9 f#4@3 f#4@4", // E G#m7 B G#m Emaj7
  G: "[e3,g#3,b3,e4]@3 [b3,e4] [g#3,b3,e4]@2 [g#3,b3,e4]@3 [g#3,b3,e4] [g#3,b3,e4]@2 [g#3,b3,e4]@2 [e3,g#3,b3,e4]@2, ~@2 e3@5 ~", // E E5 E
  H: "[e3,a3,c#4,e4,a4]@3 ~ [e3,a3]@2 [a2,e3,a3,c#4,e4,a4]@3 ~ [a2,e3,a3]@2 [a2,e3,a3,c#4,e4,a4]@3 ~, ~@3 [c#4,e4,a4]@3 ~@3 [a3,c#4,e4,a4]@2 ~@5", // A A5 A A5 A
  I: "[e3,a3,b3,e4,a4]@3 ~ [e3,a3]@2 [a2,e3,a3,b3,e4,a4]@3 ~ [a2,e3,a3]@2 [b2,f#3,b3,f#4]@3 ~, ~@3 [b3,e4,a4]@3 ~@3 [a3,b3,e4,a4]@2 ~@5", // Esus4 A5 Asus2 A5 B5 Esus4 Asus2
  J: "[g#3,c#4,e4,g#4]@3 [c#4,e4,g#4] [g#3,c#4,e4,g#4]@2 [g#3,b3,d#4,f#4]@3 [b3,d#4] [g#3,b3,d#4]@2 [g#3,c#4,e4,g#4]@4, ~@9 f#4@3 ~@4", // C#m G#m7 B G#m C#m
  K: "[b2,f#3,b3,e4]@3 b3 [f#3,b3]@2 [b2,f#3,b3,d#4]@3 [b2,b3,d#4] [b2,f#3,b3]@2 [b2,f#3,b3,d#4]@4, ~@3 e4@3 ~@10", // Bsus4 B5 B B5 B
  L: "[e3,a3,c#4,e4]@3 ~ [e3,a3]@2 [a2,e3,a3,b3,e4,a4]@3 ~ [a2,e3,a3]@2 [e3,a3,b3]@4, ~@3 [e4,a4]@3 ~@3 [a3,b3,e4,a4]@2 ~@5", // A A5 Asus2 A5 Esus4 A5 Asus2
  M: "[b2,f#3,b3,e4]@2 [b2,f#3,b3,e4] [b3,e4] [b2,f#3,b3]@2 [b2,f#3,b3,d#4]@3 [b2,b3,d#4] [b2,f#3,b3]@2 [b2,f#3,b3,d#4]@4", // Bsus4 E5 B5 B B5 B
  N: "[e3,b3,e4,g#4]@3 [b3,e4,g#4] [e3,b3,e4,g#4]@2 [e3,b3,e4,g#4]@3 [b3,e4] [e3,b3,e4]@2 [e3,b3,e4,g#4]@4, ~@9 g#4@3 ~@4", // E E5 E
  O: "[e3,a3,c#4,e4]@3 ~ [e3,a3]@2 [e3,a3,c#4,e4]@3 [a3,c#4,e4] [e3,a3]@2 [e3,a3,c#4,e4]@4, ~@3 [c#4,e4]@3 ~@10", // A A5 A A5 A C#m
  P: "[g#3,c#4,e4]@3 [g#3,c#4,e4] [g#3,c#4,e4]@2 [g#3,c#4,e4]@3 [c#4,e4] [c#4,e4]@2 [g#3,c#4,e4]@4, ~@9 g#3@3 ~@4", // C#m
  Q: "[f#3,b3,e4]@3 [f#3,b3,e4] [f#3,b3,e4]@2 [f#3,b3,d#4]@3 [b3,d#4] [b3,d#4]@2 [f#3,b3,d#4]@4, ~@9 f#3@3 ~@4", // Esus2 B
  R: "[f#3,b3,e4,f#4]@3 ~ [f#3,b3]@2 [f#3,b3,d#4,f#4]@3 [b3,d#4,f#4] [f#3,b3,d#4]@2 [f#3,b3,d#4,f#4]@4, ~@3 [e4,f#4]@3 ~@10", // Esus2 B5 B Esus2
  S: "[e3,a3,c#4,e4]@3 ~ [e3,a3]@2 [e3,a3,c#4,e4]@3 [a3,c#4,e4] [e3,a3]@2 [f#3,b3,d#4]@4, ~@3 [c#4,e4]@3 ~@10", // A A5 A A5 B C#m
  T: "[c#4,e4,g#4]@3 ~ g#4@2 [b3,d#4,f#4]@3 [b3,d#4,f#4] f#4@2 [b3,d#4,f#4]@4, ~@3 [c#4,e4]@3 ~@10", // C#m B C#m
  U: "[c#4,e4,g#4]@3 [e4,g#4] [e4,g#4]@2 [c#4,e4,g#4]@4 [c#4,e4,g#4]@2 [b3,d#4,f#4]@4, ~@3 c#4@3 ~@10", // C#m E C#m B
  V: "[e3,b3,c#4,e4]@3 ~ [e3,b3]@2 [e3,b3,c#4,e4]@3 [b3,c#4,e4] [e3,b3] ~ [e3,a3,c#4,e4]@2 [e3,c#4,e4]@2, ~@3 [c#4,e4]@3 ~@10", // C#m7 E5 C#m7 E5 A C#m
  W: "[g#3,c#4,e4]@3 [g#3,c#4,e4] [g#3,c#4,e4]@2 [f#3,b3,e4]@3 [f#3,b3,e4] [f#3,b3,e4]@2 [f#3,b3,e4]@4", // C#m Esus2
  X: "[[a3,c#4,e4]@23 ~@9]/2", // A
})).s("gm_acoustic_guitar_steel").gain(0.39)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@25 A B@2 C@2 D E F E G H I J ~@15 A B@2 C@2 D E F E K L M N B@2 C@2 D E F E G H O F E
>`.pickRestart({
  A: "~@12 [d#3,e3] [b2,c#3] [e2,f#2,g#2,a2] [c#2,d#2]", B: "[e3,b3,e4]/2", C: "[[a2,e3,a3]@29 [b2,f#3,b3]@3]/2",
  D: "g#3@3 g#3, [c#3,c#4]", E: "[b2,f#3,b3]", F: "[a2,e3,a3]", G: "[e3,b3,e4]",
  H: "a2@3 c#4@3 [b2,f#3,b3]@2, [e3,a3]@3 ~", I: "[c#3,g#3,c#4]@3 [b2,f#3,b3]@3 [b2,f#3,b3]@2", J: "[a2,e3,a3]@3 b2",
  K: "[c#3,g#3,c#4]@3 [b2,f#3,b3]@5", L: "[a2,e3,a3]@3 [b2,f#3,b3]@5", M: "[a2,e3,a3]@3 [c#3,g#3,c#4]@5",
  N: "[b2,f#3], b3 ~@15", O: "c#3@3 b2@5, [g#3,c#4]",
})).s("gm_distortion_guitar").gain(0.46)

// other · distortion guitar
const distortion_guitar_2 = note("<~@34 A B A C ~@24 D E F G H I J@2 ~@4 A B K@3>".pickRestart({
  A: "g#4@5 ~ f#4@6 e4@4", B: "a4@3 g#4@3 f#4@2", C: "e4@3 ~", D: "~@2 g#4 c#4 g#4 c#5@2 g#4@2 ~@2 g#4@5, ~@9 c#4@6 ~",
  E: "~@3 g#4@2 c#5@2 g#4@2 c#4@2 g#4@2 ~@3, ~@2 c#4@5 ~@9",
  F: "[c#4,g#4] ~ c#4 [g#4,c#5] ~ c#4 [c#4,g#4]@2 ~ [c#4,g#4] ~@2 [c#4,g#4] ~ g#4 ~, ~@13 [g#4,c#5]@2 ~", // C#5
  G: "[f#4,b4] ~@2 [f#4,b4]@2 ~ [f#4,b4] [f#4,b4]@2 [f#4,b4]@2 ~ [f#4,b4]@2 [f#4,b4]@2", // B5
  H: "~@2 [g#4,e5] ~@2 e5@2 [g#4,e5]@2 e4 f#4@6, ~@3 f#4@4 ~@9", // C#m
  I: "g#4@2 e4 f#4@2 [e4,e5]@2 g#4@2 e4 f#4@2 ~@2 f#4@2, ~@3 e4", J: "g#4@2 e4 f#4@2 [e4,e5]@2 g#4@2 e4 f#4@2 e4@4",
  K: "[g#4@5 ~ f#4@6 e4@34 ~@2]/3",
})).s("gm_distortion_guitar").gain(0.56).pan(0.3)

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

// drums · snare
const snare = s("sd").struct("<~@10 A B A B A B A B@9 A@13 B A B A B A B@8 C A@7 D A@3 E A@7 D A@2 ~@3>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x ~@2 x ~@3", C: "~@2 x ~ x!3 ~", D: "~ x ~@2 x ~@2 x ~ x ~@2 x ~@3",
  E: "x ~@3 x ~@3 x ~@3 x!4",
})).gain(0.56)

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

// drums · low tom
const low_tom = s("lt").struct("<~@53 [~@7 x] ~@25>").gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@37 A ~@15 B ~@7 C ~@2 D E ~@7 F ~@5>".pickRestart({
  A: "~@9 x!2 ~@5", B: "~@13 x ~@2", C: "~@13 x!3", D: "~@3 x ~@12", E: "~@5 x ~@2", F: "~@13 x!2 ~",
})).gain(0.56)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@26 A ~@3 A ~@2 B A ~@2 C ~@16 A ~@3 A ~@2 D ~@2 E A@2 ~@2 C A ~@3 A F G A ~
>`.pickRestart({
  A: "x", B: "~@13 x ~@2", C: "~@3 x", D: "~@15 x", E: "x ~@2 x ~@4", F: "x ~@2 x", G: "x ~@12 x ~@2",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct("<~@76 [~@9 x!7] ~@2>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@26 [x!7 ~ x!8]!12 ~@16 [x!7 ~ x!8]!22 ~@3>").gain(0.48)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@26 [~@7 x ~@8]!12 ~@16 [~@7 x ~@8]!22 ~@3>").gain(0.32)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@19 A ~ A ~ A ~ A ~@21 A ~ A ~ A ~ A ~@25>".pickRestart({
  A: "x",
})).gain(0.81)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct("<~@19 A ~ A ~ A ~ A ~@21 A ~ A ~ A ~ A ~@25>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.81)

// drums · triangle
const triangle = s("triangles:30").struct("<~@17 A B ~ B ~ B ~ B ~@21 B ~ B ~ B ~ B ~@26>".pickRestart({
  A: "~@15 x", B: "~@3 x ~@3 x ~@7 x",
})).gain(4.88)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<~@18 [~@5 x ~@10]!8 ~@20 [~@5 x ~@10]!8 ~@25>").gain(4.88)

stack(
  rock_organ, bass, acoustic_guitar_steel, distortion_guitar, distortion_guitar_2, kick, snare, hihat, low_tom, mid_tom,
  open_hat, crash, ride, tambourine, tambourine_soft, woodblocks, woodblocks_2, triangle, triangle_2
)

More by Raf