Strudelify

Vita, storie e pensieri di un alieno

Raf

KeyE♭ majorTempo100 bpm
0:00/0:00
// Vita, storie e pensieri di un alieno — Raf
// 100 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 116 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · electric bass finger
const bass = note(`<
  ~@4 A B C D E F C G H I H J K J L M H I H J K N O P Q R S T U V W X A B C Y A B C Z AA H I H AB H I H J K N O P Q R AC
  AD U AE W X A B C D A B C Z AA AF AG AH AG A B C D A B C Z A B C D A B C Z A B C D A B C Z A B C D A B C Z AI@3 ~@3
>`.pickRestart({
  A: "eb1@3 ~@4 eb1!2 ~ eb1@3 ~@3", B: "eb1@2 ~@4 eb1@2 bb1 ~ bb1@2 eb1@2 bb1@2", C: "ab1@2 ~@5 eb1 f1 eb1 ab1@2 ~@4",
  D: "f1@2 ~@4 f1@2 bb1@4 eb2@3 ~", E: "eb1@4 ~ bb1 c2 eb2 ~ eb1@3 ~@4", F: "eb1@4 ~@2 eb1 ~ bb1@4 eb1@4",
  G: "f1 ~@2 f1@12 ~", H: "eb1 ~@3", I: "c1 ~@3", J: "c1@7 ~@9", K: "eb1@5 ~@11", L: "eb1@3 ~@5",
  M: "c1@3 ~@4 [f1,f2] [g1,g2] [bb1,bb2] [g1,g2] ~ [c2,c3] [g1,g2]@3", N: "c1@3 ~@10 c1 g1@2", O: "ab1@8 bb1@7 ~",
  P: "c2@2 c2@2 c2@2 c2 ~ c2@2 f2@2 bb2@2 f2@2", Q: "f1@3 ~@4 c1 eb1 c1 f1@5 ~", R: "bb1@5 ~@2 bb1 bb1@2 bb1@3 ~ bb1 ~",
  S: "ab1@3 ~@4 eb1 f1!2 ab1@6", T: "bb1@6 ~ g1 bb1 ~ bb1@2 c2@4", U: "f1@6 ~ f1 f1@2 f1@4 f1@2",
  V: "bb1@6 ~ bb1!2 ~ bb1@3 ~ bb1@2", W: "ab1@4 ~@3 eb1 f1 eb1 ab1@2 ~ eb1 f1 eb1",
  X: "bb1 ~@2 bb1 ~@2 bb1@2 eb2@2 ab2 ~ ab2 eb2 ab1 ~", Y: "f1 ~@2 f1 bb1@2 eb2@2", Z: "f1@5 ~ f1!2 ~ f1 f1@2 c2@4",
  AA: "bb1@7 ~", AB: "c1@8 ~ c3 bb2 g2 f2 eb2 c2 ab1", AC: "ab1@3 ~@4 eb1 f1!2 ab1@4 ~@2",
  AD: "bb1@6 ~ g1 bb1 ~ bb1@2 c2@3 ~", AE: "bb1@6 ~ bb1!2 ~ bb1@3 ~ bb1 ~", AF: "f1@6 ~ f1!2 ~ f1@3 ~ f1@2",
  AG: "bb1@6 ~ bb1 bb1@2 bb1@3 ~ bb1@2", AH: "ab1@6 ~ ab1 ab1@2 ab1@3 ~ ab1@2", AI: "[eb1@47 ~]/3",
})).s("gm_electric_bass_finger").gain(0.53)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@3 A B C D@2 B C E F ~@15 G H I J K H L M N O P Q R O P Q R S ~@11 T H I J K H L M N O P Q R O P Q R U V W X Y O P Q
  R O P Q R O P Q R O P Q R O P Q R O P Q R O P Q R O P Q R Z@5 ~
>`.pickRestart({
  A: "~@5 [f2,c3,f3]@3", // F5
  B: "[g3,bb3,eb4]@4 [g3,bb3,eb4]@2 ~@4 [g3,bb3,eb4]@3 ~ [bb2,eb3,g3,bb3,eb4] ~, [bb2,eb3]@7 [g3,bb3,eb4]@3 ~@6, ~@4 [bb2,eb3]@3 ~", // Eb Eb5 Eb Eb5
  C: "[bb2,eb3,bb3,d4,f4]@4 [bb2,eb3,bb3,d4,f4]@2 ~@4 [bb3,d4,f4]@4 [bb3,d4,f4] ~, ~@7 [bb3,d4,f4]@3 ~@6, ~@8 [bb2,eb3]@7 ~", // Bb Eb5
  D: "[[c4,eb4,ab4]@4 [c4,eb4,ab4]@3 ~@3 [c4,ab4]@3 ~ ab4@2 [eb4,ab4]@4 [eb4,ab4]@3 ~@3 c4@2 f2@2 c4 ~, [ab2,eb3]@7 [c4,eb4,ab4]@3 eb4@6 [f2,c3]@8 c3@7 ~, ~@8 [ab2,eb3]@6 c4@9 [c4,eb4,ab4]@3 [eb4,ab4]@5 ~, ~@6 f2 ~]/2", // Ab Fm Ab5 Ab F5 Ab5 Ab Ab5
  E: "[c4,eb4,ab4]@4 [c4,eb4,ab4]@3 ~@3 [c4,ab4]@3 ~ [c4,ab4]@2, [ab2,eb3]@7 [c4,eb4,ab4]@3 eb4@6, ~@8 [ab2,eb3]@7 ~", // Ab Fm Ab5 Ab Ab5
  F: "[f2,f3,ab3,eb4]@3 [f2,f3,ab3,eb4]@12 ~", G: "~@3 [g2,c3]",
  H: "[c3,f3]@4 [c3,f3]@3 ~ [c3,f3]@2 [c3,f3]@2 ~@2 [c3,f3]@2, f2@6 ~ f2@4 ~ f2@4", // F5
  I: "[bb2,f3,bb3]@5 ~ eb4@4 d4@2 c4@2 bb3@2", J: "[ab2,eb3,ab3]@7 ab2 bb3@7 ab3", K: "[bb2,f3], bb3 ~@7",
  L: "[bb2,bb3] [c3,c4] [d3,d4] [eb3,eb4]", // Bb C D Eb
  M: "[ab2,eb3,ab3]@7 ~ [eb3,ab3]@2 [eb3,ab3]@2 ~@2 [eb3,ab3]@2, ~@7 ab2@4 ~ ab2@4", // Ab5
  N: "[bb2,f3]@3 bb2 [bb2,f3]@8 [bb2,f3]@4", // Bb5
  O: "~ [bb3,eb4] eb4 ~ [bb3,eb4]@3 ~ [bb3,eb4] ~ [eb2,bb2,eb3] [bb3,eb4] bb3 [eb2,bb2,eb3] [bb3,eb4] [eb2,bb2,eb3], [eb2,bb2,eb3,bb3,eb4]@2 ~ [eb2,bb2,eb3]@5 ~@8", // Eb5
  P: "~ [bb3,d4] ~@2 [bb3,d4]@3 ~ [bb3,d4] ~ [eb2,eb3] [bb3,d4]!2 [eb2,eb3] [bb3,d4] [eb2,eb3], [eb2,eb3,bb3,d4]@2 ~ [eb2,eb3]@6 ~@7", // Bb Eb Bb Eb Bb Eb Ebmaj7 Eb
  Q: "~ [ab3,eb4] eb4 ~ [ab3,eb4]@3 ~ [ab3,c4,eb4] [c4,eb4] [ab2,eb3] [ab3,c4,eb4]!2 ~ [ab3,c4,eb4] ~, [ab2,eb3,ab3,eb4]@2 ~ [ab2,eb3]@5 ~@5 [ab2,eb3]@3", // Ab5 Ab Cm Ab5 Ab Ab5
  R: "[f2,c3,f3,ab3,c4] [f3,ab3,c4] ~@2 [f3,ab3,c4]@2 f3 ~ [f3,ab3,c4] ~ [f2,c3] [f3,ab3,c4]!2 [f2,c3] [f3,ab3,c4] [f2,c3], ~@3 [f2,c3]@6 ~@7", // Fm F5 Fm F5 Fm F5
  S: "[bb2,f3,bb3,eb4]@15 ~", T: "~@3 [c3,g3]", U: "[bb2,f3,bb3,eb4]",
  V: "[f2,c3,f3,c4]@7 ~ [f3,ab3,c4]@2 f3@2 ~@2 f3@2, ~@7 [f2,c3]@3 [ab3,c4]@6, ~@3 [f2,c3]", // F5 Fm F5 Ab F5
  W: "[bb2,f3,bb3]@7 ~ [f3,bb3]@2 f3@2 ~@2 f3@2, ~@7 bb2@3 bb3@6, ~@3 bb2", // Bb5
  X: "[ab2,eb3,ab3]@7 ~@5 eb3@4, ~@7 ab2@2 ~ ab2@6, ~ [ab3,eb4], ~@2 eb3 ~", // Ab5
  Y: "[bb2,f3,bb3]@7 ~ [f3,bb3]@4 ~@2 bb2@2, ~@7 bb2@5 [f3,bb3]@4", Z: "[[bb2,eb3,g3,bb3]@19 ~, eb2]/5",
})).s("gm_distortion_guitar").gain(0.31).pan(0.7)

// chords · synth brass 1
const synth_brass_1 = note(`<
  ~@28 A B C B A B D B E B D A E B D A F ~@12 A B C B A B D B E B D A E B D A F G B D B E B D A E B D A E B D A E B D A
  E B D A E B D A E B D A E B D H ~@6
>`.pickRestart({
  A: "[f2,c3]", B: "[bb2,f3]", C: "[eb3,ab3]", D: "[ab2,eb3]", E: "[bb2,eb3]", F: "[bb3,eb4,f4]",
  G: "[f2,c3]@12 [c3,f3]@2 f2 ~", H: "[f2,c3]@15 ~",
})).s("gm_synth_brass_1").gain(0.4).pan(0.3)

// chords · rock organ
const rock_organ = note(`<
  ~@12 A@4 B@2 C D A@4 E@2 F G H@2 I J K L M J N@8 ~ O D O D O D O D O P F G H@2 I J H@2 M J Q@4 R@4 ~ S@4 N@32 T@6
>`.pickRestart({
  A: "[bb4 c5 bb4 c5, eb5]/4", B: "[bb4 c5, g4]/2", C: "[bb4,eb5]", D: "c5", E: "[bb4 [c5,e5], g4]/2",
  F: "~@2 g5@2 ~ bb5 g5@2, [ab3,c6] [bb3,eb5], eb5@3 ~@5, ~@2 bb5@5 ~ c6@4 ~@4", G: "[c5,g5]", H: "[c5 d5, f5]/2",
  I: "eb5 ab5 [eb5,ab5]@6", J: "[f5,bb5]", K: "[c5,f5]", L: "[d5,f5]", M: "[eb5,ab5]",
  N: "[eb5 [d5,f5] eb5 f5, bb5@3 ~, ~ [c5,ab5]]/4", O: "bb4", P: "[c5,e5]",
  Q: "[eb5 [d5,f5] [eb5,ab5] [f5,ab5], bb5@3 ~, ~@32 c5@31 ~]/4", // Dm Ab5 Fm
  R: "[eb5 [d5,f5] [eb5,ab5] [f5,ab5], bb5@3 ~, ~ c5]/4", S: "[bb4 c5 bb4 c5, [g4,eb5]]/4", T: "[[eb5,g5,bb5]@23 ~]/6",
})).s("gm_rock_organ").gain(0.28)

// chords · rock organ · soft notes
const rock_organ_soft = note("<~@12 A@4 B C ~ D A@4 B ~@20 E@8 F@2 ~@61>".pickRestart({
  A: "g4/4", B: "eb5", C: "e5", D: "f5", E: "[g4,eb5]/4", F: "[g4, eb5 ~]/2",
})).s("gm_rock_organ").gain(0.17)

// other · distortion guitar
const distortion_guitar_2 = note("<A@2 B@2 C@3 D@6 ~@18 E ~@2 F G H ~@23 I ~@2 F G J ~@9 K ~@40>".pickRestart({
  A: "[f2,c3]/2", B: "[[f1,c2,f2]@7 ~]/2", C: "[ab3@3 g3@2 eb3@2 bb2@7 c3 c3@2 eb3@4 g3 bb3 c4]/3",
  D: "[~@2 eb4@6 c4@2 eb4@2 f4 eb4 f4@6 f4 eb4 c4 eb4@7 eb4@7 d4 bb3 eb4 d4 bb3 f3@4 c4@6 eb4 c4 eb4 f4!2 g4 f4 g4 c5 g4 bb4@23 ~@11]/6",
  E: "~@8 bb2 c3 d3 f3 c4 bb3 g3 f3", F: "~@10 bb3@5 ab3", G: "bb3@8 f3 g3 bb3 ~ g4 f4 eb4@2", H: "eb4@7 ~@9",
  I: "~@7 bb2 c3 d3 f3 ~ c4 bb3 g3 f3", J: "eb4@9 ~@7", K: "g4 ~",
})).s("gm_distortion_guitar").gain(0.45).pan(0.3)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@2 A B ~@32 C@3 D C@3 D E F G H I J K@2 ~@13 C@3 D C@3 D L M N O P C@3 D C@3 D C@3 D C@3 D Q@3 R S@3 T U V W X Y Z AA
  AB AC@6
>`.pickRestart({
  A: "~@5 c2 f1 [c2,f2] f1 [c2,f2] f1 [c2,f2] f1 [f1,c2,f2] [c2,f2] f1", // F5
  B: "[c2,f2] f1 [c2,f2] f1 [c2,f2] f1 ~@4 [c2,f2]@6", C: "[eb4 d4 c4, bb3]/3", D: "[ab3,c4]", E: "[ab3,eb4]@15 ~",
  F: "bb4 g4@2 bb4 g4@6 f4 g4 bb4@3 f4", G: "bb4 f4@2 bb4 f4@5 bb4 [f4,bb4]!2 f4@2 ~ bb4",
  H: "g4 f4 g4 bb4 g4 f4 eb4 g4 f4 c4 eb4 f4 eb4@4", I: "eb4@5 ~@5 d4@2 c4@2 bb3 ~", J: "g3@2 f3 ~ eb3 ~@11",
  K: "[~@5 [bb4,bb5]@7 ~@4]/2", L: "~@4 bb4@11 ~", M: "f2@7 ~ f3 g3 eb3 f3 g3 bb3 c4 eb4",
  N: "f4@7 eb4 d4@2 eb4@2 d4@2 bb3@2", O: "d4@3 eb4 d4 bb3 c4@2",
  P: "[f3,f4] [g3,g4] [eb3,eb4] [f3,f4]@3 [bb2,bb3]@2 [f3,f4] [g3,g4] [eb3,eb4] [f3,f4] [bb2,bb3] [c3,c4] [eb3,eb4]!2", // F G Eb F Bb F G Eb …
  Q: "[[bb3,eb4]@11 ~ [bb3,eb4]@2 [bb3,d4]@13 ~ [bb3,d4]@2 c4@16 ~@2]/3", R: "g3@2 ab3 f3@2 ab3@2 eb3 ab3@2 eb3@5 ~",
  S: "[[bb3,eb4]@11 ~ [bb3,eb4]@2 [bb3,d4]@13 ~ d4@2 c4@17 ~, ~@14 bb3@9 ~]/3", T: "eb4!4 eb4@2 eb4 eb4@2 eb4!5 eb4@2",
  U: "eb4@6 [d4,f4]@9 bb3, bb3@7 ~", V: "ab4 g4@2 eb4@3 ab4 g4@2 eb4@2 bb3 ab4 g4 eb4 bb3",
  W: "bb3 c4@2 eb4@3 ~@3 c4@6 ~, ~@6 eb4@9 ~", X: "[eb4,ab4]@3 ~ ab4@2 g4@3 ~ g4@2 f4@4, ~@3 eb4@9 ~@4",
  Y: "g4@3 ~ g4@2 ab4@4 g4@2 f4@4, bb4, eb4@2 ~ eb4@13", Z: "g4@3 ab4@3 g4@2 f4 g4@2 [g4,bb4] [g4,bb4]@3 ~, bb4@11 ~@5",
  AA: "bb3@2 eb4 c4@3 bb3!2 eb4 c4@6 ~", AB: "[ab4,eb5]@3 ~ eb5@4 eb5!3 [ab4,eb5]!3 ~ eb5, ~@3 ab4@8 ~@3 [ab4,eb5]@2",
  AC: "[[eb4,bb4]@23 ~]/6", // Eb5
})).s("gm_overdriven_guitar").gain(0.45)

// other · lead 1 square
const lead_1_square = note("<A@2 B ~@113>".pickRestart({
  A: "[~@4 a4@22 ~ a4!5]/2", B: "a4!7 ~@9",
})).s("gm_lead_1_square").gain(0.16)

// other · guitar harmonics
const guitar_harmonics = note("<~@12 A B A B C D C E A B A B C D F ~@18 A B A B A B A B C D F ~@60>".pickRestart({
  A: "bb2@2 eb3@2 f3@2 bb2@2 eb3@2 g3@2 f3@2 eb3 ~", B: "eb2@2 g2@2 ~@2 g2@2 [g2,bb2]@2 g2 ~ [g2,c3]@3 ~, ~ c3 ~@2",
  C: "~@2 eb3@2 f3@2 eb3@2 g3@2 eb3@2 f3 ~ f3 ~, bb2@15 ~", D: "c3@2 g3@2 bb2@2 c3@2 f3@2 bb2@2 c3@2 bb2 ~",
  E: "c3@2 f3@2 f3@2 c3@2 f3@2 c3@2 g3@2 c3 ~", F: "eb3 c3 f3 c3 eb3 c3 g3 eb3",
})).s("gm_guitar_harmonics").gain(0.29).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B C D A B C E F@16 C@2 D@2 G H G F G H G H G@2 C A I F@12 C@2 D@2 G H G F G H G H G@2 C A J G@2 C J G H G H G@2
  C J G H G H G@2 C J G H G H G@2 C J G H G H G@2 C K L ~@5
>`.pickRestart({
  A: "x ~@6 x!2 ~ x ~@5", B: "x ~@5 x!2 ~ x!2 ~@3 x ~", C: "x ~@6 x ~ x ~@6", D: "x ~@6 x ~ x ~@4 x ~",
  E: "x ~@2 x ~@12", F: "x ~@4 x ~@2", G: "x ~@6 x ~ x!2 ~@5", H: "x ~@6 x ~ x!2 ~@3 x ~", I: "x ~@10 x ~@4",
  J: "x ~@2 x ~@3 x!2 ~ x ~@5", K: "x ~@2 x ~@3 x!4 ~@5", L: "x",
})).gain(0.64)

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

// drums · hihat
const hihat = s("hh").struct("<~@4 A@7 ~ B@16 A@7 B A@8 ~ B@12 A@7 B A@8 C A@36 ~@6>".pickRestart({
  A: "x!5 ~ x!2", B: "x ~ x ~ x ~ x!3 ~@3 x ~ x ~", C: "~ x!4 ~ x!2",
})).gain(0.56)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@10 A ~@16 A ~@7 A ~@7 A B ~@11 A ~@7 A ~@7 A C ~@3 A ~@7 A ~@7 A ~@7 A ~@7 D ~@6
>`.pickRestart({
  A: "~@7 x", B: "~@3 x", C: "~@13 x!2 ~", D: "~@15 x",
})).gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@10 A ~@16 B ~@7 B ~@7 C D ~@11 B ~@7 B ~@7 C@2 ~@3 A ~@7 A ~@7 A ~@7 A ~@14
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@10 x ~@2 x ~@2", C: "~@3 x", D: "~@9 x ~@6",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A@7 ~ A@32 ~ A@28 B A@36 ~@6>".pickRestart({
  A: "~@5 x ~@2", B: "x ~@4 x ~@2",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@3 A ~@2 B ~@16 A ~@3 A ~@3 A ~@3 A ~@3 A@2 ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 C A ~@2 C A ~@3 A ~@2 C A ~@3 A
  ~@2 C A ~@3 A ~@2 C A ~@3 A ~@3 A ~@5
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@12", C: "~ x ~@2",
})).gain(0.48)

// drums · ride bell
const ride_bell = s("rd").struct("<~@74 [~ x!3] [x!4]!2 ~@39>").gain(0.56)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 [x!8]!7 ~ [x!8]!32 ~ [x!8]!65 ~@6>").gain(0.48)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@4 A@7 ~ B@16 A@7 B A@8 ~ B@12 A@7 B A@9 C@4 A@7 C A@7 C A@7 C A@7 C ~@6
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", C: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2",
})).gain(0.4)

stack(
  bass, distortion_guitar, synth_brass_1, rock_organ, rock_organ_soft, distortion_guitar_2, overdriven_guitar,
  lead_1_square, guitar_harmonics, kick, snare, hihat, low_tom, mid_tom, open_hat, crash, ride_bell, tambourine, shaker
)

More by Raf