Strudelify
Believe cover art

1998 · Believe

Believe

Cher

KeyD♭ majorTempo130 bpm
0:00/0:00
// Believe — Cher
// 130 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 8 pad sweep (copy of ch 7 pad warm)
// note: Full arrangement: all 134 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 · electric guitar clean · "Soft karaoke"
const electric_guitar_clean = note("<~@34 A B ~@6 C B ~@22 A B ~@6 C B ~@30 C B ~@6 A B ~@6 C B ~@10>".pickRestart({
  A: "b3@3 bb3@3 gb3@2", B: "eb3@3 ~", C: "b3@5 ~ bb3@5 ~ gb3@4",
})).s("gm_electric_guitar_clean").gain(0.28)

// bass · fretless bass
const bass = note(`<
  ~@8 A B C D A B C D E F G E H I J K L F M N O P Q R S T U V W Q X Y S T U V W Q X Y E F G E H I J K L F M N O P Q R S
  T U V W Q X Y S T U V W Q X Y Z@2 AA@2 Z@2 AA@2 AB@2 AC@2 AB AD AC@2 AE AF AG AH AE AF AG AI AE AF AG AH AJ AF AG AK S
  T U V W Q X Y S T U V W Q X Y AL AM AN AM AO AP
>`.pickRestart({
  A: "gb1@13 ~ gb1@2", B: "bb1@13 ~ bb1@2", C: "ab1@13 ~ ab1@2", D: "eb1@12 db2@3 ~",
  E: "gb1@2 ~ gb1@2 ~ gb1@3 ~ gb1@3 ~ gb1@2", F: "gb1@2 ~ gb1@2 ~ gb1@3 ~ gb1@3 ~ gb1 ~",
  G: "gb1@3 gb1@2 ~ gb1@3 ~ gb1@2 ~@2 gb1 ~", H: "b1@2 ~ b1@2 ~ b1@3 ~ b1@2 ~@2 b1 ~",
  I: "b1@2 ~ b1@2 ~ b1@3 ~ b1@2 ~@2 b1@2", J: "db2@2 ~ db2@2 ~ db2@4 db2@2 ~@2 db2@2",
  K: "db2@3 db2@2 ~ db2@4 db2@3 ~ db2@2", L: "gb1@2 ~ gb1@2 ~ gb1@2 ~@2 gb1@2 ~ gb1@2 ~",
  M: "bb1@2 ~ bb1@2 ~ bb1@3 ~ bb1 ~@2 bb1!2 ~", N: "bb1@2 ~ bb1@2 ~ bb1@3 ~ bb1@2 ~@2 bb1 ~",
  O: "b1@2 ~ b1@2 ~ b1@3 ~ b1@3 ~ b1 ~", P: "b1@2 ~ b1@2 ~ b1@3 ~ b1 ~ b1 ~ b1!2",
  Q: "db2@2 ~ db2@2 ~ db2@3 ~ db2 ~ db2 ~ db2 ~", R: "db2@2 ~ db2@2 ~ db2@3 ~ db2@3 ~ db2@2",
  S: "gb1@2 ~ gb1 ~@2 gb1@2 ~@2 gb1 ~ gb1 ~ gb1 ~", T: "db2@2 ~ db2@2 ~ db2@3 ~ db2 ~ db2 ~ db2!2",
  U: "ab1@2 ~ ab1@2 ~ ab1@3 ~ ab1 ~ ab1 ~ ab1 ~", V: "b1@2 ~ b1 ~@2 b1@4 bb1 ~ b1@2 ~@2",
  W: "gb1@2 ~ gb1 ~@2 gb1@3 ~ gb1 ~ gb1 ~ gb1 ~", X: "ab1@2 ~ ab1 ~@2 ab1@3 ~ ab1 ~@2 ab1!2 ~",
  Y: "eb1@2 ~ eb1@2 ~ eb1@5 ~ eb1@2 ~@2", Z: "~ eb1 ~ eb1 ~ eb1 ~ eb1", AA: "~ db1 ~ db1 ~ db1 ~ db1",
  AB: "~ b1 ~ b1 ~ b1 ~ b1", AC: "~ db2 ~ db2 ~ db2 ~ db2", AD: "~ ab1 ~ ab1 ~ ab1 ~ ab1", AE: "gb1", AF: "db1",
  AG: "ab1", AH: "b1@9 ~ b1@2 db2@4", AI: "eb1", AJ: "gb1@15 ~", AK: "eb1@7 ~", AL: "gb1@2 ~ gb1@2 ~ gb1@5 ~ gb1@2 ~@2",
  AM: "e1@2 ~ e1@2 ~ e1@5 ~ e1@2 ~@2", AN: "d1@2 ~ d1@2 ~ d1@5 ~ d1@2 ~@2", AO: "gb1@12 ~@3 gb1", AP: "gb1!2 ~@14",
})).s("gm_fretless_bass").gain(0.29)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  ~@24 A@2 B@2 C@2 D@2 E F G H E F G H E F G H E F G I A@2 B@2 C@2 D J A@2 B@2 C@2 D@2 E F G H E F G H E F G H E F G H
  ~@24 E F G H E F G H E F G H E F G H E F G H E F G H E K L K M ~
>`.pickRestart({
  A: "[gb4,bb4,db5] ~@2 [gb4,bb4,db5] ~@2 [gb4,bb4,db5] ~@3 [gb4,bb4,db5] ~@3 [gb4,bb4,db5] ~", // Gb
  B: "[f4,bb4,db5] ~@2 [f4,bb4,db5] ~@2 [f4,bb4,db5] ~@3 [f4,bb4,db5] ~@3 [f4,bb4,db5] ~", // Bbm
  C: "[gb4,b4,eb5] ~@2 [gb4,b4,eb5] ~@2 [gb4,b4,eb5] ~@3 [gb4,b4,eb5] ~@3 [gb4,b4,eb5] ~", // B
  D: "[f4,ab4,db5] ~@2 [f4,ab4,db5] ~@2 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~", // Db
  E: "[db5,gb5,bb5] ~@2 [db5,gb5,bb5] ~@2 [db5,gb5,bb5] ~@3 [db5,gb5,bb5] ~@3 [db5,gb5,bb5] ~", // Gb
  F: "[db5,f5,ab5] ~@2 [db5,f5,ab5] ~@2 [db5,f5,ab5] ~@3 [db5,f5,ab5] ~@3 [db5,f5,ab5] ~", // Db
  G: "[eb5,ab5,b5] ~@2 [eb5,ab5,b5] ~@2 [eb5,ab5,b5] ~@3 [eb5,ab5,b5] ~@3 [eb5,ab5,b5] ~", // Abm
  H: "[eb5,gb5,b5] ~@2 [eb5,gb5,b5] ~@2 [eb5,gb5,b5] ~@3 [eb5,gb5,b5] ~@3 [eb5,gb5,b5] ~", // B
  I: "[eb5,gb5,b5] ~@2 [eb5,gb5,b5] ~@2 [eb5,gb5,b5] ~@3 [eb5,gb5,b5] ~@3 [gb4,bb4,db5,eb5,gb5,b5] ~", // B Ebm7
  J: "[f4,ab4,db5] ~@2 [f4,ab4,db5] ~@2 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~@5", // Db
  K: "[b4,e5,ab5] ~@2 [b4,e5,ab5] ~@2 [b4,e5,ab5] ~@3 [b4,e5,ab5] ~@3 [b4,e5,ab5] ~", // E
  L: "[a4,d5,gb5] ~@2 [a4,d5,gb5] ~@2 [a4,d5,gb5] ~@3 [a4,d5,gb5] ~@3 [a4,d5,gb5] ~", M: "[db5,gb5,bb5] ~@15",
})).s("gm_electric_guitar_muted").gain(0.08).pan(0.6)

// other · electric guitar clean
const electric_guitar_clean_2 = note(`<
  ~@32 A ~@4 B@2 C A ~@4 B@2 C ~@16 A ~@4 B@2 C A ~@4 B@2 C ~@16 A ~@4 B@2 C A ~@4 B@2 C A ~@4 B@2 C A ~@4 B@2 C D E F E
  G H
>`.pickRestart({
  A: "db3@3 ~", B: "[~@5 ab3 bb3 b3@2 ~@7]/2", C: "eb3@9 ~@7", D: "~ bb4@5 ~@10, [gb3,bb3,db4,gb4]@5 ~@11",
  E: "~ ab4@5 ~@10, [e3,ab3,b3,e4]@5 ~@11", F: "~ gb4@5 ~@10, [d3,gb3,a3,d4]@5 ~@11",
  G: "~ bb4@5 ~@9 gb4, [gb3,bb3,db4,gb4]@5 ~@11", H: "gb4!2 ~@14",
})).s("gm_electric_guitar_clean").gain(0.24).pan(0.2)

// chords · pad warm
const pad_warm = note(`<
  A B C@2 A B D E A B C@2 A B D E F@2 G@2 H@2 I@2 F@2 G@2 H@2 I@2 A B C@2 A B D E A B C@2 A B D E ~@8 F@2 G@2 H@2 I@2 A
  B C@2 A B D E A B C@2 A B D E ~@16 A B C@2 A B D E A B C@2 A B D E A B C@2 A B D E A B C@2 A B D E J K L M N ~
>`.pickRestart({
  A: "[db4,gb4,bb4]", B: "[db4,f4,ab4]", C: "[eb4,ab4,b4]/2", D: "[eb4,ab4,b4]", E: "[eb4,gb4,bb4]",
  F: "[db4,gb4,bb4]/2", G: "[db4,f4,bb4]/2", H: "[b3,eb4,gb4]/2", I: "[db4,f4,ab4]/2", J: "[gb4,bb4,db5]@7 ~",
  K: "~ [e4,ab4,b4]@13 ~@2, ~ g4 ~@14", L: "[d4,gb4,a4]@13 ~@3", M: "[e4,ab4,b4]@13 ~@3", N: "[gb4,bb4,db5]@13 ~@3",
})).s("gm_pad_warm").gain(0.07).pan(0.3)

// chords · flute
const flute = note(`<
  ~@16 A B C D E F G H I J K@2 L M N O P@3 Q@2 R S T U V@2 W@2 X Y Z AA AB AC AD AE AF AG AH AI@2 AJ@2 AK AL AM AN AO@3
  AP AQ X Y AR AS@3 AT AU X AV AW AX AY@2 ~ AZ@3 BA BB BC BD@2 BE@2 BF@2 BG@3 BH@2 BI BJ@3 BK@2 BL@2 BM BN BO BP@3 BQ BR
  BS BT BU@6 BV BW BX ~@6
>`.pickRestart({
  A: "~@6 bb4 ~ bb4@2 bb4 ~ ab4 ~ gb4 ~", B: "bb4@4 db5 ~ bb4@6 ~@4", C: "~@6 db5@3 ~ db5 ~ db5 ~ db5 ~",
  D: "eb5@2 bb4@3 ~ db5@3 ~ db5 ~ db5 ~ db5 ~", E: "gb5@3 ~ eb5@3 ~ db5@6 ~@2", F: "~@10 gb4@2 gb4 ~ gb4 ~",
  G: "bb4@3 db5@3 bb4@2 db5 bb4 ab4@6", H: "~@10 [a4,bb4] ~ db5@3 ~", I: "eb5@4 f5 ~ eb5 ~@3 db5@2 bb4 ~ [bb4,db5]@2",
  J: "~@2 [gb4,bb4]@6 ~@2 [bb4,db5] ~ [bb4,db5]@2 ~@2", // Gb Bbm
  K: "[[bb4,eb5]@4 [db5,f5] ~ eb5@4 [db5,eb5] db5 bb4 ~ db5@4 bb4@5 ~@9]/2", // Eb5 Db Dbsus2
  L: "~@2 db5@2 db5 ~ [db5,eb5] ~ eb5@5 ~ db5 ~", M: "db5@2 db5 ~@3 eb5@4 db5@6",
  N: "~@6 db5 ~ db5 ~ db5 db5@2 ~ db5@2", O: "eb5@2 bb4@4 db5@4 eb5@3 ~@3",
  P: "[~@6 db5 ~ db5 ~ db5@3 ~ bb5@4 ab5@2 ~@2 ab5@2 ~@2 ab5 ~ gb5@2 ab5@5 ~@13]/3",
  Q: "[~@10 f5 ~ f5 ~ gb5@5 ~ db5 ~ db5@3 ~ db5@3 ~ ab5@2]/2", R: "~@2 ab5 ~@3 ab5@6 ~@2 gb5 ~",
  S: "ab5@2 ab5 ~ ab5@2 ~@2 ab5@4 gb5@2 ~@2", T: "ab5@4 bb5 ~ ab5@4 gb5@5 ~",
  U: "~@6 db5 ~ db5 ~ db5@2 ~@2 [gb5,bb5]@2", // Gb
  V: "[~@2 [f5,ab5] ~@3 [f5,ab5]@2 ~@2 [f5,ab5]@2 gb5@2 [db5,ab5]@8 ~@10, ~@12 eb5 ~@19]/2", // Fm Db5
  W: "[~@10 [eb5,gb5] eb5 [eb5,gb5] ~ [eb5,gb5]@5 ~ [bb4,db5] ~ [bb4,db5]@3 ~ [bb4,db5]@2 ~@2 [f5,ab5]@2]/2", // Ebm Bbm Fm
  X: "~@2 [f5,ab5] ~@3 [f5,ab5]@6 ~@2 [eb5,gb5]@2", Y: "[f5,ab5] ~ [f5,ab5] ~ [f5,ab5]@2 ~@2 [f5,ab5]@4 [eb5,gb5] ~@3",
  Z: "[f5,ab5]@2 [gb5,bb5] ~@3 [f5,ab5] ~@3 [db5,gb5]@5 ~", AA: "~@6 bb4@3 ~ bb4 ~ ab4@2 gb4 ~",
  AB: "bb4@2 db5 ~@3 bb4@6 ~@4", AC: "~@6 db5@3 ~ db5 ~ db5@2 db5@2", AD: "eb5@2 bb4@4 db5@3 ~ db5 ~ db5@3 ~",
  AE: "gb5@4 eb5@3 ~ db5@3 ~@5", AF: "~@5 gb4@2 ab4", AG: "bb4@2 db5@2 ~ bb4 ~@2 db5 bb4 ab4@5 ~",
  AH: "~@10 db5 ~ db5@2 ~@2", AI: "[eb5@4 f5@2 eb5 ~@3 db5@2 bb4 ~ db5@4 bb4@2 ~@6 bb4 ~ db5@2 ~@2]/2",
  AJ: "[eb5@4 f5@2 eb5 ~@3 db5@2 bb4 ~ db5@4 bb4@5 ~@9]/2", AK: "~@2 db5 ~ db5 ~ db5@2 eb5@6 bb4 ~",
  AL: "db5@2 db5@3 ~ eb5@4 db5 ~@5", AM: "~@2 db5 ~ db5 ~ db5 ~ db5@4 db5@3 ~", AN: "eb5@2 bb4@4 db5@3 ~ eb5@3 ~@3",
  AO: "[~@6 db5 ~ db5 ~ db5@2 ~@2 [gb5,bb5]@4 [f5,ab5] ~@3 [f5,ab5]@2 ~@2 [f5,ab5]@2 [eb5,gb5] ~ [eb5,ab5]@9 ~@9]/3", // Gb Fm Ebm Ab5
  AP: "~@10 [bb4,db5]@3 eb5 bb4 ~", AQ: "[db5,gb5]@3 ~ [bb4,db5] ~ [bb4,db5]@3 ~ [bb4,db5]@3 ~ [f5,ab5]@2",
  AR: "[f5,ab5]@2 [gb5,bb5] ~@3 [eb5,ab5] ~@3 [db5,gb5]@6", // Fm Gb Ab5 Gb5
  AS: "[~@6 [bb4,db5]@2 [bb4,db5] ~ [bb4,db5]@2 ~@2 [gb5,bb5]@4 [f5,ab5] ~@3 [f5,ab5]@2 ~@2 [f5,ab5]@2 [eb5,gb5] ~ [db5,ab5]@7 ~@11]/3", // Bbm Gb Fm Ebm Db5
  AT: "~@10 [db5,gb5]@3 ~ [db5,gb5] ~", AU: "[db5,gb5]@2 [bb4,db5] ~@3 [bb4,db5] ~@3 [bb4,db5] ~@3 ab5@2, ~@14 f5 ~",
  AV: "[f5,ab5] ~ [f5,ab5] ~ [f5,ab5] ~@3 [f5,ab5]@4 [eb5,gb5] ~@3", AW: "[f5,ab5]@4 [gb5,bb5] ~ ab5@3 ~ gb5@5 ~",
  AX: "~@10 db5 ~ db5 ~@3", AY: "[db6@2 bb5@2 ~@2 db6@3 ~ bb5@4 db6@4 bb5@2 ab5@7 ~@5]/2",
  AZ: "[~@10 db5@2 db5 ~ db6@4 bb5@4 db6@3 ~ bb5@4 [ab5,bb5] ab5@7 ~@10]/3", BA: "~@5 bb5@4 ~ bb5@5 ~",
  BB: "ab5@2 gb5 ~ gb5 eb5 gb5@8 ~@2", BC: "~@10 gb5@3 ~ gb5 ~",
  BD: "[bb5@2 db6 ~ db6 bb5 db6 bb5 ab5@16 ~@2 bb5@3 bb5@2 ~]/2",
  BE: "[ab5@2 gb5 ~ gb5 eb5 gb5@12 ~@8 gb5@3 ~ gb5 ~]/2", BF: "[bb5@2 db6 ~ db6 bb5 db6 ~ db6 ~ bb5 ab5@13 ~@8]/2",
  BG: "[~@6 db5@2 db5 ~ db5@3 ~ [gb5,bb5]@4 [f5,ab5] ~@3 [f5,ab5]@2 ~@2 [f5,ab5]@2 [eb5,gb5] ~ [eb5,ab5]@11 ~@7, ~@30 bb5 ~@17]/3", // Gb Fm Ebm Ab5
  BH: "[~@10 [eb5,gb5] ~ [eb5,gb5] ~ gb5@6 [bb4,db5] ~ [bb4,db5]@3 ~ bb4@2 ~@2 [f5,ab5]@2, ~@14 db5@4 ~@8 db5 ~@5]/2", // Ebm Bbm Fm
  BI: "~@2 [f5,ab5] ~@3 [eb5,ab5]@6 gb5@4", // Fm Ab5
  BJ: "[ab5 ~ ab5 ~@3 ab5@4 [db5,gb5] ~@3 [db5,ab5]@4 [db5,bb5] ~@3 [db5,ab5]@4 [db5,gb5]@4 ~ db5 gb5@5 ~ [bb4,db5]@2 bb4@2 [bb4,db5]@2 ~@2 [f5,bb5]@2, ~@30 bb4@6 ~@4 db5 ~@7]/3", // Gb5 Db5 Gb Db5 Gb5 Bbm Bb5
  BK: "[~@2 [f5,ab5] ~@3 [f5,ab5]@2 ~@2 [f5,ab5]@2 [eb5,gb5] ~ [eb5,ab5]@14 ~@4]/2", // Fm Ebm Ab5
  BL: "[~@10 [eb5,gb5]@2 [db5,gb5] ~ [db5,gb5]@6 [bb4,db5] ~ [bb4,db5]@3 ~ [bb4,db5]@3 ~ [eb5,ab5]@2, ~@14 eb5 ~@17]/2", // Ebm Gb5 Bbm Ab5
  BM: "~@2 [eb5,ab5] ~@3 [f5,ab5]@6 ~@2 [eb5,gb5]@2", // Ab5 Fm Ebm
  BN: "[f5,ab5] ~ [eb5,ab5] ~ [f5,ab5]@2 ~@2 [f5,ab5]@4 [db5,gb5]@3 ~", // Fm Ab5 Fm Gb5
  BO: "~@2 bb5 ~@3 [f5,ab5]@4 [db5,gb5]@6, [f5,ab5] ~@3", // Fm Gb5 Fm
  BP: "[~@8 db4 ~ db4@3 ~ bb4@4 ab4@2 ~@2 ab4@3 ~ ab4@2 gb4 ~ ab4@11 ~@7]/3", BQ: "~@10 gb4@2 ab4@2 gb4 ~",
  BR: "~@2 db4@4 db4@4 db4@3 ~ [f4,ab4]@2", BS: "~@2 [f4,ab4] ~@3 [f4,ab4]@7 ~ [db4,gb4]@2",
  BT: "[f4,ab4] ~ [f4,ab4] ~ ab4@2 ~@2 ab4@4 gb4@2 ~@2", // Fm
  BU: "[ab4@4 bb4@2 ab4@3 bb4 gb4@10 ~@2 db4@2 db4 ~ db4@3 ~ [gb4,bb4]@4 [f4,ab4] ~@3 [f4,ab4]@3 ~ [f4,ab4]@2 gb4@2 [eb4,ab4]@27 ~ gb4@2 eb4 ~ [db4,gb4]@4 [bb3,db4]@3 ~ [bb3,db4]@3 ~ [bb3,db4]@3 ~ [f4,ab4]@2, ~@10 ab4 ~@33 eb4 ~@51]/6", // Gb Fm Ab5 Gb5 Bbm Fm
  BV: "~@2 [f4,ab4] ~@3 [eb4,ab4]@6 [db4,gb4]@4", // Fm Ab5 Gb5
  BW: "f4@2 [f4,ab4] ~ [eb4,ab4]@2 ~@2 [db4,ab4]@4 [db4,gb4]@4, ab4 ~@15", BX: "ab4@4 bb4@2 ab4@4 gb4@5 ~",
})).s("gm_flute").gain(0.13)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@32 A@3 B A@3 C A@3 B A@3 C ~@16 A@3 B A@3 C A@3 B A@3 C ~@31 D A@3 B A@3 C A@3 B A@3 C A@3 C E F
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@3 x ~ x ~ x ~ x!2", C: "~@2 x ~@5 x ~@2 x!2 ~ x ~", D: "x!16", E: "x ~@14 x", F: "x!2 ~@14",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct("<~@8 [x!4]!88 x ~@7 [x!4]!28 x ~>").gain(0.3)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@8 [~ x ~@3 x ~@3 x ~@3 x ~@2]!88 ~@8 [~ x ~@3 x ~@3 x ~@3 x ~@2]!28 ~@2>")
  .gain(0.1)

// drums · open hat
const open_hat = s("oh").struct("<~@8 [~ x ~ x ~ x ~ x]!88 ~@8 [~ x ~ x ~ x ~ x]!28 ~@2>").gain(0.2)

// drums · crash
const crash = s("cr").struct(`<
  ~@32 A ~@3 A ~@3 A ~@3 A ~@19 A ~@3 A ~@3 A ~@3 A ~@23 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A B
>`.pickRestart({
  A: "x", B: "~ x ~@14",
})).gain(0.3)

stack(
  electric_guitar_clean, bass, electric_guitar_muted, electric_guitar_clean_2, pad_warm, flute, kick, snare, hihat,
  hihat_soft, open_hat, crash
)

More by Cher