Strudelify
Reach cover art
KeyE♭ majorTempo85 bpm
0:00/0:00
// Reach — Estefan Gloria
// 85 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 74 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(85/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 · "Steel Guitar"
const acoustic_guitar_steel = note("<A B A C A D A C E C F G F G ~@13 A C A D A C E C F G F G ~@35>".pickRestart({
  A: "[bb3,eb4,g4]@2 [bb3,eb4,g4]!3 ~ [bb3,eb4,g4]@3 ~ [bb3,eb4,g4]@2 [bb3,eb4,g4]!4, eb3@3 eb3@5", // Eb
  B: "[bb3,eb4,g4]@2 [bb3,eb4,g4]!3 ~ [bb3,eb4,g4]@3 ~ [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2, eb3@3 eb3@5", // Eb
  C: "[bb3,eb4,ab4]@2 [bb3,eb4,ab4]!3 ~ [bb3,eb4,ab4]@3 ~ [bb3,eb4,ab4]@2 [bb3,eb4,ab4]@2 [bb3,eb4,ab4]@2, eb3@3 eb3@5", // Ebsus4
  D: "[bb3,eb4,ab4]@2 [bb3,eb4,ab4]!3 ~ [bb3,eb4,ab4]@3 ~ [bb3,eb4,ab4]@2 [bb3,eb4,ab4]@2 [bb2,bb3,eb4,ab4]@2, eb3@3 eb3@4 ~", // Ebsus4
  E: "[c4,eb4,g4]@2 [c4,eb4,g4]!3 ~ [c4,eb4,g4]@3 ~ [c4,eb4,g4]@2 [c4,eb4,g4]!4, c3@3 c3@5", // Cm
  F: "[g3,c4,g4]@2 [g3,c4,g4]!3 ~ [g3,c4,g4]@3 ~ [g3,c4,g4]@2 [g3,c4,g4]!4, c3@3 c3@5", // C5
  G: "[f3,c4,f4]@2 [f3,c4,f4]!3 ~ [f3,c4,f4]@3 ~ [f3,c4,f4]@2 [f3,c4,f4]!4, f2@3 f2@5", // F5
})).s("gm_acoustic_guitar_steel").gain(0.56)

// chords · taiko drum · "Taiko"
const taiko_drum = note(`<
  ~@2 A B C D A B C D E F G H E I G ~@10 A B C D A B C D E F G H E I G ~@28 J@3 K
>`.pickRestart({
  A: "[c3,c4]@9 ~@7", B: "[c3,c4]@13 ~@3", C: "[c3,c4]@7 ~", D: "[c3,c4]@3 ~",
  E: "db2 ~@2 db2!2 ~@2 db2, [c3,c4]@9 ~@7", F: "db2 ~@2 db2!2 ~@3, [c3,c4]@13 ~@3",
  G: "db2 ~@2 db2!2 ~@2 db2, [c3,c4]@7 ~", H: "db2 ~@2 db2!2 ~@2 db2, [c3,c4]@3 ~",
  I: "db2 ~@2 db2!2 ~@2 db2, [c3,c4]@13 ~@3", J: "d2@2 ~@2 d2!2 ~@2", K: "d2 ~@7",
})).s("gm_taiko_drum").gain(0.16)

// other · taiko drum · "Taiko Effect"
const taiko_drum_2 = note("<~@2 A@14 ~@11 A@14 ~@30 A@2 ~>".pickRestart({
  A: "[~@7 ab5@5 ~@4]/2",
})).s("gm_taiko_drum").gain(0.59)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@2 A B C D A B C D C E C E F@2 G H I J I H I J I J K A B C D A B C D C E C E F@2 G H I L I H I J I ~@4 M N O N M N I
  N M N O N M N I P Q ~@3
>`.pickRestart({
  A: "[eb4,g4]", B: "[d4,g4]", C: "[c4,g4]", D: "[b3,ab4]", E: "[c4,f4]", F: "[gb4,bb4]", G: "[f4,bb4]", H: "eb4",
  I: "bb3", J: "ab3", K: "eb3", L: "ab3@15 ~", M: "f4", N: "c4", O: "bb3@15 ~", P: "c4@7 c4", Q: "f4 ~@15",
})).s("gm_string_ensemble_1").gain(0.17)

// bass · electric guitar jazz · "Jazz Guitar"
const bass = note(`<
  ~@10 A B A C D E F G H I H G H I H I J ~@8 A B A C D E F G H I H G H I H I H I K L M N K L M N K L M N K L M N K O ~@3
>`.pickRestart({
  A: "c3@13 ~ eb2 ~", B: "f2@15 ~", C: "f2@13 ~@3", D: "gb2@13 ~ db2 ~", E: "gb2@13 ~ gb2@2", F: "bb2@3 ~",
  G: "eb2@2 ~ eb2@2 ~ eb2@3 ~ eb2 ~ eb2@3 ~", H: "bb1@2 ~ bb1@2 ~ bb1@3 ~ bb1 ~ bb1@3 ~",
  I: "ab1@2 ~ ab1@2 ~ ab1@3 ~ ab1 ~ ab1@3 ~", J: "eb1@2 ~ eb1@2 ~ eb1@3 ~ eb1 ~ eb1@3 ~",
  K: "bb1@2 ~ bb1@2 ~ bb1@3 ~ bb1 ~ c2@3 ~", L: "f2@2 ~ f2@2 ~ f2@3 ~ f2 ~ f2@3 ~",
  M: "c2@2 ~ c2@2 ~ c2@3 ~ c2 ~ c2@3 ~", N: "g1@2 ~ g1@2 ~ g1@3 ~ g1 ~ g1@3 ~", O: "f1 ~@15",
})).s("gm_electric_guitar_jazz").gain(0.47)

// chords · ocarina · "Effects"
const ocarina = note("<~@10 A ~ A ~@22 A ~ A ~@36>".pickRestart({
  A: "[c5,g5]@2 ~ [c5,g5]@2 ~ [c5,g5]@2 ~ [c5,g5]@2 ~@5", // C5
})).s("gm_ocarina").gain(0.32)

// chords · ocarina · "Effects" · soft notes
const ocarina_soft = note("<~@10 A ~ A ~@22 A ~ A ~@36>".pickRestart({
  A: "~@13 [c5,g5]@2 ~", // C5
})).s("gm_ocarina").gain(0.19)

// other · piano · "Piano 2"
const piano = note("<~@16 [~@2 bb3@2 c4@2 eb4@3 ~ f4@4 ~@2] ~@24 [~@2 bb3@2 c4@2 eb4@3 ~ f4@4 ~@2] ~@32>")
  .s("gm_piano").gain(0.64)

// bass · acoustic bass
const bass_2 = note("<~@27 A@2 B ~ C D E F ~@39>".pickRestart({
  A: "[eb4@12 ~@2 eb4@13 ~ eb4@4]/2", B: "c4", C: "eb3@13 ~ bb3 eb3", D: "d3@11 ~ eb3@4", E: "c3", F: "ab3",
})).s("gm_acoustic_bass").gain(0.5)

// chords · drawbar organ · "Organ 1" · C5
const drawbar_organ = note("<~@35 [[g4,c5]@2 ~ [g4,c5]@2 ~@11] ~ [[g4,c5]@2 ~ [g4,c5]@2 ~@11] ~@36>")
  .s("gm_drawbar_organ").gain(0.27)

// other · string ensemble 2 · "Slow Strings"
const string_ensemble_2 = note("<~@50 [~@2 eb5 gb5] f5 [~@2 eb5 gb5] f5 ~@20>").s("gm_string_ensemble_2").gain(0.39)

// other · pad new age · "Fantasia"
const pad_new_age = note("<~@43 A B C D A B ~@6 E F G B E F ~@2 E F G B E F ~@5>".pickRestart({
  A: "~@4 eb6 ~ d6 ~", B: "c6 ~@3", C: "~@8 eb6@3 ~ f6@2 ~@2", D: "bb5 ~@3", E: "~@4 f6 ~ e6 ~", F: "d6 ~@3",
  G: "~@8 f6@3 ~ g6@2 ~@2",
})).s("gm_pad_new_age").gain(0.4)

// other · overdriven guitar · "Overdrive Guitar"
const overdriven_guitar = note("<~@53 A B C D A B C D ~ B C D A B C D ~@5>".pickRestart({
  A: "~@8 bb2@3 ~ c3@3 ~", B: "f2", C: "~@8 c3@3 ~ d3@3 ~", D: "g2",
})).s("gm_overdriven_guitar").gain(0.64)

// other · lead 4 chiff · "Chiffer Lead"
const lead_4_chiff = note(`<
  ~@66
  [c7@5 ~ a6 bb6 c7@3 bb6@2 a6@2 ~]
  [a6@2 bb6 g6@10 f6 g6 a6]
  [bb6@2 d6 ~ d6@10 ~@2]
  ~@5
>`).s("gm_lead_4_chiff").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@17 [x ~@2 x ~@2 x ~@3 x ~@5]!9 ~@16 [x ~@2 x ~@2 x ~@3 x ~@5]!31 x>").gain(0.35)

// drums · snare
const snare = s("sd").struct(`<
  ~@17
  [x ~ x!3 ~ x ~ x!3 ~ x!4]!10
  ~@15
  [x ~ x!3 ~ x ~ x!3 ~ x ~ x!2]!11
  [x ~ x!3 ~ x ~ x!3 ~ x!4]
  [x ~ x!3 ~ x ~ x!3 ~ x ~ x!2]!19
  ~
>`).gain(0.24)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@16 A ~@9 A ~@14 A ~@27 B ~@4>".pickRestart({
  A: "x ~ x!2 ~@2 x ~ x ~ x!2 ~@2 x ~", B: "x ~ x!2 ~@2 x ~ x ~ x!2 ~@4",
})).gain(0.35)

// drums · splash
const splash = s("cr").struct("<~@17 A ~@24 A ~@11 A ~@7 A ~@7 A ~@3>".pickRestart({
  A: "x",
})).gain(0.35)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@2 A@3 B A@3 B A@3 B A@4 B A@3 B A@3 B A@3 B A@3 B A@3 B A@4 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2",
})).gain(0.9)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@2 A@3 B A@3 B A@3 B A@4 B A@3 B A@3 B A@3 B A@3 B A@3 B A@4 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2",
})).gain(0.9)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  ~@2 A B A@3 B A@3 B A@4 B A@3 B A@3 B A@3 B A@3 B A@3 B A@4 B A@3 B A@3 B A@2 B A@4 B A@3 B A@3 B A@3 B A@3 ~
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~@3 x ~@5", B: "x ~@2 x ~@2 x ~@3 x ~@3 x ~",
})).gain(0.9)

// drums · shaker
const shaker = s("sh").struct("<~@2 A@2 B A@3 B A@3 B A@4 ~@10 A@2 B A@3 B A@3 B A@4 ~@32>".pickRestart({
  A: "x ~ x!3 ~ x!3 ~ x!3 ~ x ~", B: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2",
})).gain(0.17)

// drums · triangle
const triangle = s("triangles:35").struct("<~@2 x ~@24 x ~@3 x ~@42>").gain(3.05)

stack(
  acoustic_guitar_steel, taiko_drum, taiko_drum_2, string_ensemble_1, bass, ocarina, ocarina_soft, piano, bass_2,
  drawbar_organ, string_ensemble_2, pad_new_age, overdriven_guitar, lead_4_chiff, kick, snare, low_tom, mid_tom, splash,
  congas, congas_2, congas_3, shaker, triangle
)

More by Gloria Estefan