Strudelify

Iperbole

Raf

KeyA♭ majorTempo120 bpm
0:00/0:00
// Iperbole — Raf
// 120 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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(`<
  ~@28 A B C D E F G F E F G H E I J K L B M B N O P B M Q L B R S P B M Q L B R B R T U V W X E F G F E F G H E I J K L
  B M B N O P B M Q L B R S P B M Q L B R B P B M Q L B R S P B M Q L B R B M Q Y@2 Z@2 Y@2 AA@4 ~@3
>`.pickRestart({
  A: "f1@2 ~ c2@5", B: "eb1", C: "db1@2 ~ bb1@5", D: "~ ab4 g4 ab4 [eb4,g4] [f4,ab4] [eb4,g4] ~, f1@3 f1@5",
  E: "f1@7 ~", F: "eb1@7 ~", G: "db1@7 ~", H: "eb1@3 ~ c2 bb1 c2@2", I: "db1@3 bb1@4 ~", J: "bb1@7 ~",
  K: "eb1@3 eb2@3 eb1@2", L: "f1", M: "db1", N: "f1@3 c2@5", O: "eb1@3 bb1@2 eb2@3", P: "ab1", Q: "eb1@3 eb2@3 bb1@2",
  R: "db1@3 ab1@5", S: "bb1@3 bb2 f2 ab2@3", T: "eb2@3 bb2 ~ bb2 eb2 bb2", U: "f2@7 ~", V: "eb2@3 bb2@3 eb2 ~",
  W: "db2@7 ~", X: "eb2@2 ~ eb3 c4 ~ eb3 f3", Y: "[f1@2 ~ f2 ~ c2 eb2@10]/2", Z: "[db1@2 ~ f2 ~ c2 eb2@10]/2",
  AA: "[db1@2 ~ f2 ~ c2 eb2@26]/4",
})).s("gm_electric_bass_finger").gain(0.69)

// chords · synth strings 2
const synth_strings_2 = note(`<
  ~@29 A@3 ~@8 B@6 ~@4 C@2 D E F G D H C@2 D E F G D E D G F E D E ~@8 B@6 ~@4 I@2 J K L M J N I@2 J K L M J K I@2 J K L
  M J N I@2 J K L M J K J K L M J K L M J O@5 ~
>`.pickRestart({
  A: "[ab5@19 ~@5]/3", B: "[f4@7 ~, c4 ~]/6", C: "[[ab2,ab3,ab4] [eb2,eb3,g4], eb4]/2", D: "[db2,db3,f4,ab4]",
  E: "ab4@3 g4@5, [eb2,eb3,eb4]", F: "[f2,f3,f4,ab4]", G: "[eb2,eb3,eb4,g4]", H: "[bb2,bb3,d4,f4]",
  I: "[[ab2,ab3,ab4,c5] [eb2,eb3,g4,bb4], eb4]/2", J: "[db2,db3,f4,ab4,c5]", K: "ab4@3 g4@5, [eb2,eb3,eb4,bb4]",
  L: "[f2,f3,f4,ab4,c5]", M: "[eb2,eb3,eb4,g4,bb4]", N: "[bb2,bb3,d4,f4,bb4]", O: "[eb2,eb3,eb4,ab4,bb4]/5",
})).s("gm_synth_strings_2").gain(0.43)

// chords · synth strings 2 · soft notes
const synth_strings_2_soft = note("<~@29 A@3 ~@11 B@7 ~@33 B@7 ~@47>".pickRestart({
  A: "db5/3", B: "[bb3@9 ab4@10 bb4@9, ~@9 db4@19]/7",
})).s("gm_synth_strings_2").gain(0.21)

// chords · pad warm
const pad_warm = note(`<
  A@20 B@4 A@16 B@4 A@4 C D E@2 F G H I J K L@2 J M N I J M J I N M J M A@8 B@4 A@4 ~@2 E@2 F G H I J K L@2 J M N I J M
  E@2 F G H I J K L@2 J M N I J M J M N I J M N I J O@4 ~@2
>`.pickRestart({
  A: "[[f2,f3,ab3] [eb2,eb3,g3] [db2,f3,ab3] [eb2,eb3,g3], [c4,f4]]/4", // Fm Eb Db Eb F5
  B: "[[f2,ab3] [db2,db3,ab3] [bb1,ab3] [eb2,eb3,f3,bb3,eb4], f4, c4@3 ~]/4", C: "[f2,f3,ab3,c4,f4]",
  D: "[eb2,eb3,ab3,bb3,eb4]", E: "[[ab2,ab3,ab4,c5] [eb2,eb3,g4,bb4], eb4]/2", F: "[db2,db3,f4,ab4,c5]",
  G: "ab4@3 g4@5, [eb2,eb3,eb4,bb4]", H: "[f2,f3,f4,ab4,c5]", I: "[eb2,eb3,eb4,g4]", J: "[db2,db3,f4,ab4]",
  K: "[bb2,bb3,d4,f4]", L: "[[ab2,ab3,ab4] [eb2,eb3,g4], eb4]/2", M: "ab4@3 g4@5, [eb2,eb3,eb4]", N: "[f2,f3,f4,ab4]",
  O: "[eb2,eb3,eb4,g4]/4", // Eb
})).s("gm_pad_warm").gain(0.33)

// other · ocarina
const ocarina = note(`<
  ~@6 A B ~@50 C@2 D E@2 F G H I J ~@20 K L ~@8 C@2 D E@2 F G H ~@8 M@2 N@3 O@2 P ~@15
>`.pickRestart({
  A: "~@6 f6 ~@5 ab6 ~@3", B: "~@2 bb6 ~@4 f7 ~@3 c7 ~@4", C: "[f6@31 ~]/2", D: "c6", E: "[bb5@6 ab5@7 f5@17 eb5@2]/2",
  F: "c5@6 bb4@7 ab4@3", G: "bb4@14 c5 bb4",
  H: "f4@2 bb4@2 ~ f5@2 c5 ~@2 f4@5 ~, ab4 ~ ab4 ~ c5@2 ~@2 bb4@2 ~@6, ~@9 ab4@2 ~@5",
  I: "~@4 eb5 ~ g5 ~ eb5 ~ g5 ~ eb5@2 g5 ~", J: "eb5@2 g5 ~ eb5@2 ~@10", K: "[f2,f3,ab3,c4,f4]",
  L: "[eb2,eb3,ab3,bb3,eb4]", M: "[~ f6@31]/2", N: "[~@2 c6@16 bb5@6 ab5@6 f5@17 ~]/3",
  O: "[~ c5@6 ~ bb4@6 ab4@4 bb4@14, eb5 ~@15]/2",
  P: "c5 [ab4,bb4] f4@2 ab4 c5@2 f5@2 bb4@2 f4@5, ~@4 bb4@2 ~@3 c5 ~ ab4@2 ~@3", // Absus2
})).s("gm_ocarina").gain(0.27)

// other · ocarina · soft notes
const ocarina_soft = note(`<
  ~@6
  [~@8 f6 ~@5 ab6 ~]
  [~@4 bb6 ~@3 f7 ~@3 c7 ~@3]
  [~ b5 ~ b5 ~ eb5 ~ eb5 ~@4 bb4 ~ bb4 ~]
  ~@58
  [~@6 g5 ~ eb5 ~@7]
  ~@69
>`).s("gm_ocarina").gain(0.11)

// chords · rock organ
const rock_organ = note(`<
  ~@50 A@2 B C B D B E A@2 B C B D B C B D B C B C ~@18 A@2 B C B D B E A@2 B C B D B C A@2 B C B D B E A@2 B C B D B C
  B C B D B C B D B C ~@5
>`.pickRestart({
  A: "[[ab5,c7] [g5,bb6], eb5]/2", B: "[f5,ab5,c7]", C: "ab5@3 g5@5, [eb5,bb6]", D: "[eb5,g5,bb6]", E: "[d5,f5,bb6]",
})).s("gm_rock_organ").gain(0.43).pan(0.7)

// chords · pad sweep
const pad_sweep = note("<~@8 A@4 ~@18 A@4 ~@6 B@5 ~@4 C ~@30 B@5 ~@4 C ~@47>".pickRestart({
  A: "[f4,ab4,c5,eb5]/4", B: "[f4@48 eb4@17 ~@15, [ab3,c4]@33 ~@7]/5", C: "[ab4,bb4,eb5]",
})).s("gm_pad_sweep").gain(0.27).pan(0.7)

// chords · piano
const piano = note("<~@67 A@2 B@2 C@2 ~@64>".pickRestart({
  A: "[~@2 bb4 c5@5 bb4@8 ~@16, ~@2 eb5@19 ~@11]/2", B: "[~@2 bb4 c5@5 bb4@24, ~ eb5@11 ~@4]/2",
  C: "[~@6 c5@4 g4@3 ~ eb4@18]/2",
})).s("gm_piano").gain(0.64).pan(0.7)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@50 A B C D E F G H I@2 J K L M N O P Q R S T U@2 V W X@2 V W V Y Z AA V Y V W V Y V AB B C D E F G H I@2 J K L M N
  AC@2 B C D E F G H I@2 J K L M N O AD K L M N O AE M AF AG@3 ~@3
>`.pickRestart({
  A: "[ab2,eb3,ab3,c4,eb4]@2 [ab2,eb3,ab3,c4,eb4] [ab2,eb3,ab3,c4]@2 [ab2,eb3,ab3,c4] [ab2,eb3,ab3]!2, ~@3 eb4@3 [c4,eb4]@2", // Ab Ab5 Cm
  B: "[bb2,eb3,g3,bb3,eb4]@2 [eb3,bb3,eb4] [bb2,eb3,g3,bb3]@2 [eb3,bb3] [bb2,eb3,bb3]!2, ~@3 eb4@3 [g3,eb4]@2", // Eb Eb5 Eb Eb5 Cm
  C: "[db3,f3,ab3]@2 [db3,f3,ab3] [db3,f3,ab3,db4]@2 [db3,f3,db4] [db3,f3,ab3,db4,f4]!2, [db4,f4]@3 f4@3 ~@2", // Db
  D: "[bb2,eb3,ab3,bb3]@2 [ab3,bb3] [bb2,eb3,bb3]@2 [bb2,eb3,g3,bb3]!2 [bb2,eb3,bb3], eb4@3 ab3@5, ~@3 eb4@3 eb4@2", // Ebsus4 Absus2 Eb5 Eb Eb5
  E: "[c3,f3]@2 c3 [c3,f3]@2 [c3,f3] [c3,f3,ab3] [c3,f3], [ab3,c4,f4]@3 [ab3,c4,f4]@3 [c4,f4]@2", // F5 Fm F5 Fm F5
  F: "[bb2,eb3,g3,bb3]@2 [bb2,eb3,g3,bb3] [bb2,eb3,g3,bb3]@2 [bb2,eb3,g3,bb3] [bb2,eb3,bb3]!2, eb4@3 eb4@3 [g3,eb4]@2", // Eb Eb5 Cm
  G: "db3@2 db3 db3@2 [db3,f3] [f3,ab3]!2, [ab3,db4,f4]@3 [ab3,db4,f4]@3 [db3,db4,f4]@2", // Db Fm Db
  H: "bb2@2 bb2 bb2@2 bb2 [bb2,bb3]!2, [f3,bb3,d4]@3 [f3,bb3,d4]@3 [f3,d4]@2", // Bb Dm
  I: "[[ab2,eb3,ab3,c4]@2 [eb3,ab3,c4] [eb3,ab3,c4]@2 [ab2,eb3,ab3,c4] [ab2,ab3,c4]!2 [bb2,eb3,g3,bb3]@2 [bb2,eb3,g3,bb3] [bb2,eb3,g3,bb3]@2 [bb2,eb3,g3,bb3] [bb2,eb3,bb3]!2, eb4@3 eb4@3 eb4@5 eb4@3 ~@2, ~@2 ab2@3 ~ eb3@2 ~@6 [g3,eb4]@2]/2", // Ab Eb Eb5 Cm
  J: "[db3,f3,ab3,c4]@2 c4 [db3,f3,ab3,c4]@2 [db3,f3,ab3,c4] [db3,f3,ab3]!2, f4@3 f4@3 [c4,f4]@2", // Dbmaj7 Db F5
  K: "[eb3,ab3,bb3,eb4]@2 [bb2,eb3,bb3,eb4] [bb2,eb3,g3,bb3]@2 [bb2,eb3,g3,bb3] [eb3,bb3]!2, ~ ab3@3, ~@3 eb4@3 [bb2,g3,eb4]@2", // Ebsus4 Eb5 Eb Eb5 Eb
  L: "[f3,ab3]@2 f3 [f3,ab3,c4,f4]@2 [c3,f3,ab3,c4,f4] [c3,ab3] c3, [c4,f4]@3 ~@3 [f3,c4,f4]@2", // Fm F5
  M: "[eb3,g3,bb3]@2 [bb2,eb3,g3,bb3] [bb2,eb3,g3,bb3]@2 [bb2,eb3,g3,bb3] [bb2,eb3,bb3]!2, eb4@3 eb4@3 [g3,eb4]@2", // Eb Eb5 Cm
  N: "[db3,f3,ab3,f4]@2 [db3,f3,ab3,f4] [db3,ab3,db4,f4]@3 [f3,ab3]!2, db4@3 f3@2 ~ [db3,db4,f4]@2", // Db Fm Db
  O: "eb3@2 eb3 [eb3,bb3,eb4]@2 [eb3,g3,bb3,eb4] eb3!2, [ab3,bb3,eb4]@3 ab3@5, ~@3 [g3,bb3,eb4]", // Eb5 Eb Absus2 Eb
  P: "[db3,f3,ab3,db4,f4]@2 [db3,f3,ab3,db4,f4] [db3,f3,ab3,db4,f4]@2 [db3,ab3,db4,f4] [db3,f3,ab3]!2, ~@3 [db4,f4]", // Db
  Q: "[eb3,g3,bb3,eb4]@2 [eb3,bb3,eb4] [eb3,g3,bb3]@2 [eb3,bb3]!3, ~@3 eb4@3 [g3,eb4]@2", // Eb Eb5 Eb Eb5 Cm
  R: "~ c3 [c3,f3,ab3,c4] [c3,f3,ab3,c4]@2 [c3,f3,c4] [f3,ab3]!2, bb2, f4@3 f4@3 ~@2, [f3,ab3,c4] ~@2 [c3,c4,f4]", // Fm F5 Fm F5
  S: "[bb2,eb3,ab3,bb3]@2 [bb2,eb3,ab3,bb3] [bb2,eb3,bb3]@2 [bb2,eb3,g3,bb3] [bb2,eb3,bb3]!2, eb4@3 ab3@5, ~@3 eb4@3 [g3,eb4]@2", // Ebsus4 Eb5 Eb Eb5 Cm
  T: "[db3,ab3,db4,f4]@2 [db3,ab3,db4] [db3,ab3,db4,f4]@2 [db3,ab3,db4,f4] [db3,ab3,db4]!2, ~@3 f4", // Db Db5 Db Db5
  U: "[[bb2,eb3,ab3,bb3,eb4]@2 [bb2,eb3,bb3,eb4] [bb2,eb3,g3,bb3]@2 [bb2,eb3,bb3] [bb2,eb3,g3,bb3] ~ [ab3,c4,f4]@3 ~@2 f3 ab3 f3, ~@3 eb4@3 eb4@10, ~@7 [bb2,eb3,g3,bb3]@9, ~@8 f3@2 ~ [ab3,c4,f4]@3 [c4,f4]@2]/2", // Ebsus4 Eb5 Eb Eb5 Eb Fm Eb Fm …
  V: "[eb3,g3]@2 eb3 eb3@2 [eb3,g3] eb3 g3, [c4,eb4]@3 [c4,eb4]@3 [c4,eb4]@2", // Eb Cm
  W: "[ab3,c4,f4]@3 ~@2 db3 ab3 f3, db3@2 ~ [ab3,c4,f4]@3 [c4,f4]@2", // Fm F5
  X: "[[eb3,g3]@2 eb3 eb3@2 [eb3,g3] eb3 ~ [ab3,c4,f4]@3 ~@2 f3 ab3 f3, [c4,eb4]@3 [c4,eb4]@3 eb4@10, ~@6 c4@2 f3@2 ~ [ab3,c4,f4]@3 [c4,f4]@2, ~@7 g3@9]/2", // Eb Fm Cm Fm F5
  Y: "[f3,ab3,c4,f4]@3 ~@3 [ab3,c4,f4]@2 ~@2 f3 ~ [c4,f4]@2 f3 ~, ~@12 ab3 ~@3", // Fm F5
  Z: "[db3,f3]@2 db3 db3@2 [db3,f3] db3 f3, [ab3,c4]@3 [ab3,c4]@3 [ab3,c4]@2", // Db Ab
  AA: "[ab3,c4,f4]@3 ~@2 bb2 [c4,f4]@2, bb2@2 ~ [ab3,c4,f4]@3 ab3 ~", // Fm F5 Fm
  AB: "[ab2,eb3,ab3,c4,eb4]@3 ~ [ab2,eb3,ab3,c4,eb4] ~ [ab2,eb3,ab3,c4]@3 ~ [ab2,eb3,ab3,c4] ~ [ab2,eb3,ab3,c4] ~ [ab2,eb3,ab3] ~, ~@3 eb4@2 ~ eb4 ~", // Ab Ab5
  AC: "[eb3@2 eb3 [eb3,bb3,eb4]@2 [eb3,g3,bb3,eb4] eb3!2 [ab2,eb3,ab3,c4,eb4]@2 [ab2,eb3,ab3,c4,eb4] [ab2,eb3,ab3,c4]@2 [ab2,eb3,ab3,c4] [ab2,eb3,ab3]!2, [ab3,bb3,eb4]@3 ab3@5 ~@3 eb4@3 [c4,eb4]@2, ~@3 [g3,bb3]@5, ~@3 eb4 f4@4]/2", // Eb5 Eb Ab Ab5 Absus2 Cm Gm
  AD: "[db3,f3,ab3]@2 c4 [db3,f3,ab3,c4]@2 [db3,f3,ab3,c4] [db3,f3,ab3]!2, f4@3 f4@3 [c4,f4]@2", // Db Dbmaj7 Db F5
  AE: "ab3@2 f3 [f3,ab3,c4,f4]@2 [c3,f3,ab3,c4,f4] [c3,ab3] c3, f4@3 ~@3 [f3,c4,f4]@2", // Fm F5
  AF: "[db3,f3,ab3,f4]@4 [db3,f3,ab3,f4]@2 f3@4 f3@2 [f3,ab3]@2 [f3,ab3] ~, db4@3 [db3,ab3,db4,f4]@3 [db3,db4,f4]@2", // Db Fm Db
  AG: "[~ eb4@35 ~@12, [eb3,ab3,bb3]@35 ~@13]/3", // Ebsus4
})).s("gm_acoustic_guitar_steel").gain(0.4).pan(0.4)

// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~@51 A B C D ~@5 E ~ F ~ G ~ G H B ~ I J K L M N@2 L M L O P Q L O L M L O L ~ A B C D ~@5 E ~ F ~ G ~@2 A B C D ~@5 E
  ~ F ~ G ~ E ~ F ~ G ~ F ~@8
>`.pickRestart({
  A: "~@2 [bb2,g3] ~@2 [bb2,g3] ~@2", B: "~@5 ab3 ~@2", C: "~@2 [bb2,eb3] ~@4 g3", D: "~@2 f3 ~@4 ab3",
  E: "~@2 [db3,f3,ab3] ~@5", F: "~@2 ab3 ~@4 ab3", G: "~@5 f3 ~@2", H: "~@2 g3 ~@2 g3 ~@2", I: "~@2 f4 ~@5",
  J: "~@5 g3 ~@2, ~ ab3@3", K: "~@2 f3 f3@2 ~ f3 ab3", L: "~@2 g3 g3@2 ~ g3 eb3", M: "~@2 db3 db3@2 ~@2 ab3, ~@3 db3",
  N: "[~@2 g3 g3@2 ~ g3 ~@3 f3 f3@2 ~ f3 ab3, ~@7 eb3@9]/2", O: "~@4 f3 ~ f3@2 ~@4 f3 ~ ab3 ~",
  P: "~@2 f3 f3@2 ~ f3 db3", Q: "~@2 bb2 bb2@2 ~@2 ab3, ~@3 bb2",
})).s("gm_acoustic_guitar_steel").gain(0.2).pan(0.4)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@50 A ~@2 B A ~@2 B A ~@2 B A ~@2 B A ~@2 B A ~@19 A ~@2 B A ~@2 B A ~@2 B A ~@2 B A ~@2 B A ~@2 B A ~@2 B A ~@2 B ~
  B A ~@2 B A ~ C ~@6
>`.pickRestart({
  A: "~ x ~@5 x", B: "~ x", C: "~@5 x!3",
})).gain(0.24)

// drums · ride
const ride = s("rd").struct("<~@49 [~@12 x!4] [x!8]!22 ~@17 [~@12 x!4] [x!8]!41 ~@6>").gain(0.32)

// drums · shaker
const shaker = s("sh").struct("<~@50 [x!8]!81 ~@6>").gain(0.24)

// drums · claves
const claves = s("clave:2").struct(`<
  ~@4 A@46 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@3 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@7
>`.pickRestart({
  A: "~@2 x ~@2 x ~@2",
})).gain(0.78)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@4 [~@2 x ~@2 x ~@2]!46 ~@38 [~@2 x ~@2 x ~@2]!2 ~@47>").gain(1.38)

stack(
  bass, synth_strings_2, synth_strings_2_soft, pad_warm, ocarina, ocarina_soft, rock_organ, pad_sweep, piano,
  acoustic_guitar_steel, acoustic_guitar_steel_2, hihat, hihat_soft, ride, shaker, claves, jingle_bells
)

More by Raf