Strudelify
Sha-e-o cover art

1993 · Notte E Giorno

Sha-e-o

Romina Power Al Bano

KeyE minorTempo120 bpm
0:00/0:00
// Sha-e-o — Romina Power Al Bano
// 120 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 78 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 · "FINGERDBAS"
const bass = note(`<
  ~@2 A B A C A D E F A C A C A D E G A H A I A D E F J K L M N O P Q R S T U V U W X Y Z U V U W X Y Z AA AB AC AD AE
  AF AG AH AI AJ AK AL AK AM AN AO AP AK AL AK AM AN AQ AK AR AS ~
>`.pickRestart({
  A: "c2@5 ~ c2 ~ g1@5 ~ g1 a#1", B: "c2!2 ~ c2 ~@2 c2@2 g1@7 ~", C: "c2!2 ~ c2 ~@2 c2@2 g1@4 d2@2 g2@2",
  D: "c2!2 ~ c2 ~@2 c2@2 c2@4 c2@2 b1@2", E: "a1@5 ~ a1 ~ a1@5 ~ a1 g1", F: "f1!2 ~ f1 ~@2 f1@2 g1@4 d2@2 g1@2",
  G: "f1!2 ~ f1 ~@2 f1@2 g1@4 g2@2 d2@2", H: "c2!2 ~ c2 ~@2 c2@2 g1@4 d2@2 g1@2",
  I: "c2!2 ~ c2 ~@2 c2@2 g1@4 d2@2 e2@2", J: "c2@5 ~ c2 ~ c2@4 c2@2 g1@2", K: "f1@5 ~ f1@2 f1@2 f1@2 ~@4",
  L: "f1@2 f1@2 ~ f1 ~ f1 f1@2 f1@2 ~@2 f1 f#1", M: "g1@2 g1@2 ~ g1 ~ g1!2 ~ g1@2 ~@2 g1 a1",
  N: "c2@2 c2 ~@2 c2 ~ c2!2 ~ c2@4 b1@2", O: "a1@2 a1@2 ~@2 a1@2 a1 ~ a1 ~@3 a1 g1",
  P: "f1@2 f1 ~@3 f1 ~ f1@2 f1@2 ~@2 f1@2", Q: "f1@7 ~ g1@8", R: "c2@3 c2 c2@2 c2 g1", S: "f1@3 f1 d1@2 g1@2",
  T: "c2@3 c2 c2@2 c2@2", U: "d2@5 ~ d2 ~ a1@5 ~ a1 c2", V: "d2!2 ~ d2 ~@2 d2@2 a1@4 e2@2 f#2@2",
  W: "d2!2 ~ d2 ~@2 d2@2 d2@4 d2@2 c#2@2", X: "b1@5 ~ b1 ~ b1@5 ~ b1 a1", Y: "g1!2 ~ g1 ~@2 g1@2 a1@4 e2@2 a1@2",
  Z: "d2@5 ~ d2 ~ d2@4 d2@2 a1@2", AA: "g1@5 ~ g1@2 g1@2 g1@2 ~@4", AB: "g1@2 g1@2 ~ g1 ~ g1 g1@2 g1@2 ~@2 g1 g#1",
  AC: "a1@2 a1@2 ~ a1 ~ a1!2 ~ a1@2 ~@2 a1 b1", AD: "d2@2 d2 ~@2 d2 ~ d2!2 ~ d2@4 c#2@2",
  AE: "b1@2 b1@2 ~@2 b1@2 b1 ~ b1 ~@3 b1 a1", AF: "g1@2 g1 ~@3 g1 ~ g1@2 g1@2 ~@2 g1@2", AG: "g1@7 ~ a1@8",
  AH: "d2@3 d2 d2@2 d2 a1", AI: "g1@3 g1 e1@2 a1@2", AJ: "d2@3 d2 d2@2 d2@2", AK: "e2@5 ~ e2 ~ b1@5 ~ b1 d2",
  AL: "e2!2 ~ e2 ~@2 e2@2 b1@4 f#2@2 g#2@2", AM: "e2!2 ~ e2 ~@2 e2@2 e2@4 e2@2 d#2@2",
  AN: "c#2@5 ~ c#2 ~ c#2@5 ~ c#2 b1", AO: "a1!2 ~ a1 ~@2 a1@2 b1@4 f#2@2 b1@2", AP: "e2@5 ~ e2 ~ e2@4 e2@2 b1@2",
  AQ: "a1 b1", AR: "e2!2 ~ e2 ~@2 e2@2 b1@8", AS: "e2@9 ~@7",
})).s("gm_electric_bass_finger").gain(0.39)

// other · epiano2 · "E.PIANO 2"
const epiano2 = note("<~@14 A B ~@2 C D ~@9 E F ~@22 G H ~@23>".pickRestart({
  A: "~@7 e4 e4@2 ~ e4 e4@2 c4 e4", B: "e4 c4 ~@6", C: "~@6 e4!3 ~ e4!3 ~ e4!2", D: "e4@2 c4 ~@13",
  E: "b4@2 b4!3 ~ b4!2 b4@2 c5 b4 a4 ~ g4@2", F: "e4@2 g4@7 ~@7", G: "c#5@2 c#5!3 ~ c#5!2 c#5@2 d5 c#5 b4 ~ a4@2",
  H: "f#4@2 a4@7 ~@7",
})).s("gm_epiano2").gain(0.45).pan(0.6)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<A@2 B ~@30 C D ~@22 E F ~@16 G H ~>".pickRestart({
  A: "[g6@24 f5 e5 c5 g4 f4 e4 c4 g3]/2", B: "[c2,c3] ~", C: "~@5 a4 b4 g4", D: "c5@3 ~",
  E: "~@12 c#5 ~ a4@2, ~@5 b4@2 ~", F: "d5@5 ~@3", G: "~@8 a4 g#4 e4 b3 a3 g#3 e3 b2", H: "e2@13 ~@3",
})).s("gm_string_ensemble_1").gain(0.24).pan(0.4)

// chords · piano · "HONKY TONK"
const piano = note(`<
  A@8 B@2 A@6 B@2 A@6 C@2 D E@2 F D G H ~ D I D J@4 K L J@5 K L J F@2 M J N O ~ J P J Q@4 R@2 Q@5 S T Q U V ~
>`.pickRestart({
  A: "~ g2 ~@2 f3 d3 e3 g2, c2, ~ e3 ~@2, ~@3 g2@2 ~@3",
  B: "[~ e3 ~@2 b3 e3 a3 ~@2 a2 ~@3 b2 c4 b3, a2@7 a2 f2@2 ~@2 g2@2 ~@2, ~ c4 ~@3 g3 ~@2, ~@6 e3@4 ~@5 g2@2 ~@5 a3@4 ~@6]/2",
  C: "[~ e3 ~@2 b3 e3 a3 ~@2 a2 ~@3 b2 c4 b3, a2@4 c4@4 ~@7 g2@2 ~@3 g3@4 g2@4 ~@4, ~@3 e3@2 ~@2 a2 f2@2 ~ a3@2 ~@3]/2",
  D: "~ g2 ~@2 f3 d3 e3 g2, c2 e3 ~@2, ~@3 g2@2 ~@3", E: "~ c3 ~@2 g3 c3 f3 c3, f2 a3 ~@2, ~@3 c3@2 ~@3",
  F: "~ d3 ~@2 a3 d3 g3 d3, g2 b3 ~@2, ~@3 d3@2 ~@3", G: "~ a2 ~@2 f3 d3 e3 a2, a1 e3 ~@2, ~@3 a2@2 ~@3",
  H: "~ c3 ~@2 a3 ~ g3 a3, f2 g3 ~@2, ~@3 c3@2 c3@2 ~", I: "~ c3 ~@3 a2 ~ d3, f2 g3 d2 g2, ~@3 c3@2 ~@3",
  J: "~ a2 ~@2 g3 e3 f#3 a2, d2 f#3 ~@2, ~@3 a2@2 ~@3",
  K: "~@2 f#3@2 ~@4 c#4@2 f#3@2 b3@2 b2 a2, b2 d4 ~@2, ~@3 f#3@2 ~@3", L: "~ b2 a3 b3 ~ c#3 d4 c#4, g2 ~ a2 ~",
  M: "~ e3 ~@2 b3 e3 a3 e3, a2 c#4 ~@2, ~@3 e3@2 ~@3", N: "~ b2 ~@2 g3 e3 f#3 b2, b1 f#3 ~@2, ~@3 b2@2 ~@3",
  O: "~ d3 ~@2 b3 ~@2 b3, g2 a3 ~ a3, ~@3 d3@2 d3@2 ~", P: "~ d3 ~@3 b2 ~ e3, g2 a3 e2 a2, ~@3 d3@2 ~@3",
  Q: "~ b2 ~@2 a3 f#3 g#3 b2, e2 g#3 ~@2, ~@3 b2@2 ~@3",
  R: "[~ g#3 ~@2 d#4 g#3 c#4 ~@2 c#3 ~@3 d#3 e4 d#4, c#3@4 e4@4 ~@7 b2@2 ~@3 b3@4 b2@4 ~@4, ~@6 g#3@4 ~@4 c#3@2 a2@5 ~ c#4@4 ~@6]/2",
  S: "~@2 g#3@2 ~@4 d#4@2 g#3@2 c#4@2 c#3 b2, c#3 e4 ~@2, ~@3 g#3@2 ~@3", T: "a2 b2",
  U: "~@2 b2@2 ~@4 a4 g#4 e4 b3 a3 g#3 e3 b2, e2 g#3 ~@2, ~@3 b2@2 ~@3", V: "e2 ~@15",
})).s("gm_piano").gain(0.34).pan(0.4)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@12 A@2 B@2 C@2 D@2 A@2 B@2 C@2 E F G H I J@2 K ~@3 L@2 M@2 N@2 O L@2 P@2 N@2 Q R S T U V@2 W ~@3 X@2 Y@2 Z@2 AA X@2
  Y@2 AB AC AD@3 ~
>`.pickRestart({
  A: "[g5@12 f5 e5 f5 d5]/2", B: "[e5@15 ~]/2", C: "[e5@12 d5 c5 d5 b4]/2", D: "[c5@15 ~]/2", E: "c5@7 ~",
  F: "[f3,a3] [g3,b3]", G: "[f3,a3]", H: "[d3,g3] b3", I: "[g3,c4]@2 e4 g4",
  J: "[[a4,c5]@8 [g4,b4]@7 ~ f4@16, ~@15 a4@16 ~]/2", K: "g5", L: "[a5@12 g5 f#5 g5 e5]/2", M: "[f#5@7 ~]/2",
  N: "[f#5@12 e5 d5 e5 c#5]/2", O: "d5", P: "[f#5@31 ~]/2", Q: "d5@7 ~", R: "[g3,b3] [a3,c#4]", S: "[g3,b3]",
  T: "[e3,a3] c#4", U: "[a3,d4]@2 f#4 a4", V: "[[b4,d5]@8 [a4,c#5]@7 ~ g4@16, ~@15 b4@16 ~]/2", W: "a5",
  X: "[b5@12 a5 g#5 a5 f#5]/2", Y: "[g#5@15 ~]/2", Z: "[g#5@12 f#5 e5 f#5 d#5]/2", AA: "e5@7 ~", AB: "g#5",
  AC: "e5 f#5", AD: "e5/3",
})).s("gm_string_ensemble_2").gain(0.25).pan(0.6)

// other · distortion guitar · "DISTORTION"
const distortion_guitar = note("<~@27 A B C D E F G H I H ~@14 J K L M N O P Q R Q ~@17>".pickRestart({
  A: "f2@2 f2 ~@3 f2 ~ f2@2 ~@6", B: "f2@2 f2 ~@3 f2 ~ f2@2 f2@2 ~@4", C: "g2 ~ g2@2 ~@2 g2 ~ g2@5 ~@3",
  D: "c2@2 c2 ~@5 c2@5 ~@3", E: "a2@2 a2 ~@3 a2 ~ a2@3 ~@5", F: "f2@2 f2 ~@3 f2 ~ f2@2 f2 ~@3 f2!2", G: "f2 [g1,g2,d3]",
  H: "[g2,c3]", I: "[f2,c3]@2 [d2,a2] [g2,d3]", J: "g2@2 g2 ~@3 g2 ~ g2@2 ~@6", K: "g2@2 g2 ~@3 g2 ~ g2@2 g2@2 ~@4",
  L: "a2 ~ a2@2 ~@2 a2 ~ a2@5 ~@3", M: "d2@2 d2 ~@5 d2@5 ~@3", N: "b2@2 b2 ~@3 b2 ~ b2@3 ~@5",
  O: "g2@2 g2 ~@3 g2 ~ g2@2 g2 ~@3 g2!2", P: "g2 [a1,a2,e3]", Q: "[a2,d3]", R: "[g2,d3]@2 [e2,b2] [a2,e3]",
})).s("gm_distortion_guitar").gain(0.17).pan(0.2)

// other · distortion guitar · "DISTORTION" · soft notes
const distortion_guitar_soft = note("<~@27 A ~ B C D ~@19 E ~ F G H ~@22>".pickRestart({
  A: "~@10 f2 ~@5", B: "~@14 g2 ~", C: "~@6 c2 ~@7 c2 ~", D: "~@13 a2 ~@2", E: "~@10 g2 ~@5", F: "~@14 a2 ~",
  G: "~@6 d2 ~@7 d2 ~", H: "~@13 b2 ~@2",
})).s("gm_distortion_guitar").gain(0.1).pan(0.2)

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

// drums · rim
const rim = s("rim").struct("<~@2 A@9 B A@7 B A@6 B C@6 ~@18 C@6 ~ A@2 B ~@17>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "x!4",
})).gain(0.8)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@11 A ~@7 B ~@6 A ~@5 C D ~@2 C ~@6 A ~@6 B ~@5 C D ~@2 B ~@6 C ~@5 A ~ B E F
>`.pickRestart({
  A: "~@7 x", B: "~@14 x!2", C: "~@15 x", D: "x", E: "~@8 x ~@2 x ~@2 x ~", F: "~ x ~ x ~@2 x ~@9",
})).gain(0.48)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@2 A B A C A B A D A E A C A B A D A F A C A B A D G H I J A H I ~ A H G A C A K A D G A C A L A D G H I J A H I ~ A
  H G A M A N A D G A C A K A ~ A F ~@2
>`.pickRestart({
  A: "~ x ~@3 x ~ x ~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~ x ~ x ~ x ~@3 x",
  D: "~ x ~ x ~ x ~ x ~ x ~ x ~@2 x!2", E: "~ x ~ x ~ x ~ x ~@7 x", F: "~ x ~ x ~ x ~ x ~@8",
  G: "~ x ~@3 x ~ x ~ x ~@6", H: "~@3 x ~ x ~ x ~ x ~@3 x ~ x", I: "~@7 x ~ x ~@3 x ~@2",
  J: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2", K: "~ x ~ x ~ x ~ x ~ x ~@6", L: "~ x ~ x ~ x ~ x ~ x ~ x ~@4",
  M: "~ x ~ x ~ x ~ x ~ x ~@5 x", N: "~ x ~ x ~ x ~ x!3 ~@6",
})).gain(0.16)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A ~@3 A ~ B ~ A ~@3 A ~ B ~ A ~@3 A C ~ D E ~@2 D ~@3 F ~ A ~ G ~ A C ~ A ~ F ~ A C ~ D E ~@2 D ~@5 A ~ C ~ F C ~
  A ~ H ~@3 I ~@2
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@4 x!2 ~@2", C: "~@11 x ~@4", D: "~@5 x ~ x", E: "~@7 x", F: "~@3 x", G: "~@5 x!2 ~",
  H: "~@5 x ~@2", I: "~@9 x ~@6",
})).gain(0.32)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~@9 A ~@7 A ~@6 A ~@5 B A ~ C ~@4 A ~ A@2 ~ A D A ~ A@2 ~@5 B A ~ C A C ~ D A D A@2 ~@2 E A@3 ~ A ~
>`.pickRestart({
  A: "x", B: "x!2", C: "~@5 x!2 ~", D: "~@3 x", E: "~@5 x ~@2",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@27 A B C B C B ~@18 A B C B C B ~@21>".pickRestart({
  A: "~@2 x!14", B: "x!7 ~ x ~ x!5 ~", C: "x ~ x!14",
})).gain(0.16)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@27 A B A B A B ~@18 A B A B A B ~@21>".pickRestart({
  A: "~ x ~@14", B: "~@7 x ~ x ~@5 x",
})).gain(0.08)

stack(
  bass, epiano2, string_ensemble_1, piano, string_ensemble_2, distortion_guitar, distortion_guitar_soft, kick, rim,
  snare, low_tom, hihat, hihat_soft, mid_tom, open_hat, crash, tambourine, tambourine_soft
)

More by Romina Power Al Bano