Strudelify

Open Your Heart

Europe

KeyF majorTempo95 bpm
0:00/0:00
// Open Your Heart — Europe
// 95 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(95/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.

// other · alto sax
const alto_sax = note(`<
  A@8 ~@32 B C D E@2 F D G@2 F C H@2 F D I@2 ~@15 B J D H@2 J D K@2 F D K@2 J D K@2 J D K@2 C D ~@3
>`.pickRestart({
  A: "[~@4 a3 bb3 c4@2 g4@2 f4@4 e4@11 ~ d4@2 c4@2 d4@11 ~ c4@2 bb3@2 a3@4 bb3@2 c4@14 ~@2 [f3,a3] [g3,bb3] [a3,c4]@2 [e4,g4]@2 [d4,f4]@4 [c4,e4]@11 ~ [bb3,d4]@2 [a3,c4]@2 [bb3,d4]@11 ~ [a3,c4]@2 [g3,bb3]@2 [f3,a3]@18]/8", // F Gm Am Em Dm C Bb Am …
  B: "~@2 e4 f4", C: "g4 c5!2 c5@5, gb4 ~@15", D: "g4 c5!2 c5@5",
  E: "[~@2 bb4@2 c5@2 d5@2 f5@2 c5@2 a4@2 g4@13 ~ e4@2 f4@2]/2", F: "g4@2 c5@2 c5@2 c5@9 ~",
  G: "[~@2 bb4@2 bb4 c5 d5@2 f5@2 c5@2 a4@2 g4@10 ~@4 e4@2 f4@2]/2",
  H: "[~@2 bb4@2 bb4 c5 d5@2 f5@2 c5@2 a4@2 g4@12 ~@2 e4@2 f4@2]/2",
  I: "[~@2 bb4@2 bb4 c5 d5@2 f5@2 c5@2 a4@2 g4@14 ~@4]/2", J: "g4@2 c5@2 c5@2 c5@9 ~, gb4 ~@15",
  K: "[~@2 bb4@2 bb4 c5 d5@2 f5@2 c5@2 a4@2 g4@13 ~ e4@2 f4@2]/2",
})).s("gm_alto_sax").gain(0.3)

// bass · fretless bass
const bass = note(`<
  ~ A B C@2 D E F G H I J K J L A M H N O P H Q K R H I J K J L A M H N O P H Q K R S@2 T U S@2 T U S@2 T V S W X@2 H I
  J K J L A M H N O P H Q K R S@2 T U S@2 T U S@2 T U S@2 T U S@2 T U S Y ~@3
>`.pickRestart({
  A: "c3@5 ~ c3 ~ c3@8", B: "bb2@6 ~@2 bb2 ~ bb2@6", C: "f2@5 ~ f2 ~ f2@8", D: "c3@5 ~ c3 ~ c3@7 ~",
  E: "bb2@7 ~ c3 ~ c3@6", F: "f2@5 ~ f2 ~ f2@4 c2@4", G: "f2@15 ~", H: "f2@5 ~ f2 ~ f2@7 ~", I: "f2@5 ~ f2 ~ bb2@7 ~",
  J: "f2@5 ~ f2 ~ f2@6 ~@2", K: "f2@5 ~ f2 ~ f2@4 c3@4", L: "f2@5 ~ f2 ~ f2 ~ bb2@6", M: "c2@4 ~@2 c2 ~ c2@6 ~@2",
  N: "f2@5 ~ f2 ~ f2@4 a2@4", O: "bb2@5 ~ bb2 ~ bb2@7 ~", P: "bb2@5 ~ bb2 ~ bb2@4 d2@2 e2@2", Q: "c3@5 ~ c3 ~ c2@8",
  R: "f2@7 ~", S: "c3@5 ~ c3@2 f2@4 f2@4", T: "bb2@5 ~ bb2@2 f2@4 f2@4", U: "c3@3 c3 c2@2 c2@2",
  V: "c3@5 ~ c3@2 c2@4 c2@3 ~", W: "c3@3 c3 f2@2 f2@2", X: "[bb2@5 ~ bb2@2 f2@4 a2@2 c3@18]/2",
  Y: "c3@5 ~ c3@2 f2@4 ~@4",
})).s("gm_fretless_bass").gain(0.15)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~ A B C@2 A D E@2 F@2 G@2 H@4 I@2 J@2 K L M@2 N@2 O@2 P@2 Q@2 K R S@2 T U T ~@17 F@2 G@2 H@4 I@2 J@2 K L V ~@26
>`.pickRestart({
  A: "[g4,c5,e5]", B: "[f4,bb4,d5]", C: "[f4,a4,c5]/2", D: "[f4,bb4,d5] [g4,c5,e5]", E: "[[a4,c5,f5]@5 ~@3]/2",
  F: "[[c4,f4,a4,c5,f5,a5]@3 [d4,f4,bb4,d5,f5,bb5]]/2", G: "[c4,f4,a4,c5,f5,a5]/2",
  H: "[[f4,a4,c5,f5,a5,c6]@13 [f4,bb4,d5,f5,bb5,d6]@2 [g4,c5,e5,g5,c6,e6]@17]/4", // F Bb C
  I: "[~ [eb4,eb5], [f4,a4,c5,f5,a5,c6]]/2", J: "[d4,f4,bb4,d5,f5,bb5]/2", K: "[f4,a4,c5,f5,a5,c6]",
  L: "[c4,e4,g4,bb4,c5,e5,g5,bb5]", M: "[[c4,f4,a4,c5,f5,a5]@7 ~]/2",
  N: "[[f4,a4,c5,f5,a5,c6]@3 [f4,bb4,d5,f5,bb5,d6]]/2", O: "[f4,a4,c5,f5,a5,c6]/2",
  P: "[[f4,a4,c5,f5,a5,c6]@3 [a4,c5,f5,a5,c6,f6]]/2", Q: "[g4,c5,e5,g5,c6,e6]/2", R: "~ [eb5,eb6], [a4,c5,f5,a5,c6,f6]",
  S: "[f4,bb4,d5,f5,bb5,d6,f6]/2", T: "[a4,c5,f5,a5,c6,f6]", U: "[g4,bb4,c5,e5,g5,bb5,c6,e6]", V: "[c4,f4,a4,c5,f5,a5]",
})).s("gm_string_ensemble_1").gain(0.16).pan(0.4)

// other · pad new age
const pad_new_age = note("<~@9 A@4 B@4 C@7 ~ D@4 B@4 E@7 ~@17 F@4 B@4 G@7 ~@26>".pickRestart({
  A: "[d5@4 c5@17 ~ f4@2 f4@2 f4@2 f4@2 d4@4 c4@27 ~@3, db5 ~@63]/4",
  B: "[d5@4 c5@15 ~ f4@2 f4@2 a4@2 bb4@4 g4@32 ~@2, db5 ~@63]/4",
  C: "[d5@4 c5@17 ~ f4@2 f5@2 f5@2 f5@2 g5@4 f5@19 ~ d5@2 f5@2 g5@4 a5@4 f5@4 c5@3 ~ a4@2 f4@2 d5@4 c5@4 bb4@4 e4@4 f4@18, db5 ~@61 ab5 ~@15 db5 ~@33]/7",
  D: "[d5@4 c5@17 ~ f4@2 f4@2 f4@2 f4@2 d4@4 c4@28 ~@2, db5 ~@63]/4",
  E: "[d5@2 c5@8 ~ f4 f5!3 g5@2 f5@9 ~ d5 f5 g5 f5 a5@2 f5 c5@3 a4 f4 d5@2 c5@2 bb4@2 e4@2 f4@9, db5 ~@29 gb5 ~@31 ab5 ~@49]/7",
  F: "[d5@4 c5@17 ~ f4@2 f4@2 f4@2 f4@2 d4@4 c4@29 ~, db5 ~@63]/4",
  G: "[d5@4 c5@17 ~ f4@2 f5@2 f5@2 f5@2 g5@4 f5@17 ~ d5@2 d5@2 f5@2 g5@2 f5@2 a5@4 f5@2 c5@5 ~ a4@2 f4@2 d5@4 c5@4 bb4@4 e4@4 f4@18, db5 ~@29 gb5 ~@31 ab5 ~@15 db5 ~@33]/7",
})).s("gm_pad_new_age").gain(0.22)

// chords · epiano2
const epiano2 = note("<~@11 A@2 ~@2 B C ~@6 D@2 ~@2 E@3 ~ B F@2 ~@5 G@2 ~@18 H@3 ~ I J@2 ~@5 G@2 ~@25>".pickRestart({
  A: "[~@16 a4 ~ f4@14, ~@15 f4@2 a4@15, ~ [g4,c5]]/2", B: "~@15 c5, ~@7 g4", C: "~ c5@7, [g4,d5], c5 ~@7, ~ e5@15",
  D: "[~ [f5,f6], ~ f4@6 a5@9, ~ a4@7, ~@3 c5@13, ~@4 f5 a5 c6@10]/2", // F
  E: "[~@16 a4 ~@7 a5 ~ f5@14 ~@8, ~@14 c4@10 [g5,c6] a5@15 ~@8, ~@15 f4@2 a4@23 ~@8, ~@2 [g4,c5]@3 ~, ~@9 f4@11 ~@4]/3", // C5
  F: "[~@5 c6@4 ~@7, [g4,d5]@8 c6 e6@9 ~@14, c5 c5@8 ~@7, ~ e5@17 ~@14, ~@4 [g5,d6]@5 ~@7]/2", // G5
  G: "[~@7 g3 a3 ~@7 [f5,f6]@16, ~@6 f3@3 a3@3 a4 c5 f5 c5@17, ~ [g3,c4]@3, ~@5 [f3,f4]@11, ~@11 g4@21]/2", // F C5 F
  H: "[~@16 a4 ~@7 a5 ~ f5@13 ~@9, ~@14 c4@10 [g5,c6] a5@14 ~@9, ~@15 f4@2 a4@22 ~@9, ~@16 [g4,c5]@23 ~@9, ~@6 f4@7 ~@3]/3", // C5
  I: "~@15 c4, ~@7 g3", J: "[~@5 c5@4 ~@7, [g3,d4]@8 c5 e5@9 ~@14, c4 c4@8 ~@7, ~ e4@17 ~@14, ~@4 [g4,d5]@5 ~@7]/2",
})).s("gm_epiano2").gain(0.36)

// chords · string ensemble 1
const string_ensemble_1_2 = note(`<
  ~@41 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 ~@16 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 ~@3
>`.pickRestart({
  A: "[c5,e5,g5]@3 [c5,f5,a5]@5", B: "[[d5,f5,bb5]@4 [c5,f5,a5]@3 [c5,e5,g5]@9]/2",
  C: "[[d5,f5,bb5]@8 [c5,f5,a5]@6 [c5,e5,g5]@17 ~]/2", // Bb F C
})).s("gm_string_ensemble_1").gain(0.12)

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

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

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 A ~@47 A ~@11 B ~@3 A ~@3 A ~@5>".pickRestart({
  A: "~@14 x!2", B: "~@7 x",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@4 A ~@3 B ~@15 B ~@15 C ~@11 D ~@3 E ~@15 F ~@3 B ~@3 B ~@3 G ~@3 H ~@3 I ~@5
>`.pickRestart({
  A: "~@11 x!2 ~ x!2", B: "~@5 x!2 ~", C: "~@12 x!3 ~", D: "~@6 x!2", E: "~@8 x ~@2 x!2 ~ x ~", F: "~@8 x ~@2 x!2 ~@3",
  G: "~@10 x ~ x!2 ~@2", H: "~@8 x!2 ~@2 x ~@3", I: "~@6 x!2 ~@2 x!2 ~@4",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@7 B ~@32 C@16 ~@16 C@21 D ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x", C: "~@2 x!2 ~@2 x ~@3 x!2 ~@2 x ~", D: "~@2 x!2 ~@2 x ~@3 x!2 ~@4",
})).gain(0.25)

// drums · splash
const splash = s("cr").struct("<~ A ~@6 A ~@31 A ~@7 B ~@23 A ~@3 B ~@21>".pickRestart({
  A: "x", B: "~ x",
})).gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@17 A ~@15 A ~@6 B ~@24 A ~@32>".pickRestart({
  A: "x", B: "x ~ x!4 ~@2",
})).gain(0.25)

stack(
  alto_sax, bass, string_ensemble_1, pad_new_age, epiano2, string_ensemble_1_2, kick, snare, hihat, open_hat, mid_tom,
  high_tom, tambourine, splash, ride
)

More by Europe