Strudelify

Je crois toi

Celine Dion

KeyE♭ minorTempo90 bpm
0:00/0:00
// Je crois toi — Celine Dion
// 90 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 92 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/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 · acoustic guitar steel · "GuitareCentre"
const acoustic_guitar_steel = note(`<
  A B A B A B A B A B C D A B A B A B C D C D E F E F G H I J B A B A B A B C D C D C D C D C D C D C D C E F E F I K L
  M E F E F G H I J B A B A B A B C D C D C D C D C D C D C D N O ~
>`.pickRestart({
  A: "~@3 f4@2 gb4@3 ~@3 ab4@2 bb4@3", B: "~@3 ab4@2 bb4@3 ~@3 ab4@2 bb4@3", C: "~@3 gb4@2 bb4@3 ~@3 f4@2 bb4@3",
  D: "~@3 f4 gb4@4 ~@3 gb4@2 bb4@3", E: "c5@3 ab4@2 c5@3 c5@3 ab4@2 c5@3", F: "db5@3 ab4@2 db5@3 db5@3 ab4@2 db5@3",
  G: "[b4,e5]@3 ab4@2 b4@3 [bb4,gb5]@3 ab4@2 bb4@3", H: "[bb4,gb5]@3 ab4@2 bb4@3 [b4,eb5]@3 ab4@2 b4@3",
  I: "[b4,e5]@3 ab4@2 b4@3 [b4,e5]@3 ab4@2 b4@3", J: "[db5,f5]@3 ab4@2 db5@6 ab4@2 db5@3",
  K: "[bb4,gb5]@3 ab4@2 bb4@3 [bb4,gb5]@3 ab4@2 bb4@3", L: "[d5,g5]@3 bb4@2 [d5,g5]@3 [d5,g5]@3 bb4@2 [d5,g5]@3",
  M: "[c5,g5]@3 bb4@2 [c5,g5]@3 [c5,g5]@3 bb4@2 [c5,g5]@3", N: "~@3 gb4@2 bb4@3 ~@5 f4@3", O: "bb4@4 ~@5 f4 gb4@6",
})).s("gm_acoustic_guitar_steel").gain(0.44)

// other · acoustic guitar nylon · "Guit.Acoustique"
const acoustic_guitar_nylon = note(`<
  A B A B A B A B A B C D A B A B A B C D C D E F E F G H I J@2 A B A B A B C D C D C D C D C D C D C D C E F E F I K L
  M E F E F G H I J@2 A B A B A B C D C D C D C D C D C D C D N O@2
>`.pickRestart({
  A: "eb3 eb4 bb3 eb4 gb3 db4 bb3 db4", B: "ab3 eb4 bb3 eb4 ab3 eb4 db3 eb4", C: "b2 eb4 bb3 eb4 db3 db4 bb3 db4",
  D: "eb3 eb4 bb3 eb4 eb3 eb4 bb3 eb4", E: "f3 f4 c4 f4 f3 f4 eb3 f4", F: "db3 f4 ab3 f4 db3 f4 ab3 f4",
  G: "e3 e4 b3 e4 gb3 db4 bb3 db4", H: "eb3 gb4 bb3 gb4 ab3 eb4 b3 eb4", I: "e3 e4 b3 e4 e3 e4 b3 e4",
  J: "[db3 f4 ab3 f4 db3 f4 ab3 f4@2 eb4@2 eb4@2 eb4@2 eb4]/2", K: "gb3 db4 bb3 db4 gb3 db4 bb3 db4",
  L: "g3 d4 bb3 d4 g3 d4 bb3 d4", M: "c3 e4 bb3 e4 c3 e4 bb3 e4", N: "b2@2 eb4@2 bb3@2 ~ eb4@2 db3@2 ~ db4@2 bb3@2",
  O: "[~ db4@3 ~ [bb3,eb4]@24 ~@3, ~@4 [eb3,gb3]@25 ~@3]/2", // Eb5 Ebm
})).s("gm_acoustic_guitar_nylon").gain(0.35).pan(0)

// bass · fretless bass · "Basse"
const bass = note(`<
  A B A B A B A B A B C D A B A B A B C D C D E F E F G H I F J A B A B A B C D C D C D C D C D C D C D C E F E F I K L
  M E F E F G H I F J A B A B A B C D C D C D C D C D C D C D N@2 ~
>`.pickRestart({
  A: "eb2 gb2", B: "ab2@2 ab2 db2", C: "b1 db2", D: "eb2!2", E: "f2@2 f2 eb2", F: "db2!2", G: "e2 gb2", H: "eb2 ab2",
  I: "e2!2", J: "eb2", K: "gb2!2", L: "g2!2", M: "c2!2", N: "[b1@9 db2@11 eb2@12]/2",
})).s("gm_fretless_bass").gain(0.56)

// other · acoustic guitar steel · "Guit.Electro-ac"
const acoustic_guitar_steel_2 = note(`<
  A B A B A B A B A B C D A B A B A B C D C D E F E F G H I J K A B A B A B C D C D C D C D C D C D C D C E F E F L M N
  O E F E F G H I J K A B A B A B C D C D C D C D C D C D C D P Q ~
>`.pickRestart({
  A: "eb3 bb3 gb3 eb4@2 bb3 gb3@2 gb3 db4 bb3 gb4 gb3 db4 bb3@2",
  B: "ab3 c4 bb3 ab4 ab3 ~ bb3@2 ab3 c4 bb3 ab4 ab3 c4 bb3@2, ~@5 c4@2 ~@9",
  C: "b2@2 eb3 gb3 b2 db4 gb3@2 db3@2 f3 bb3 db3 eb4 bb3@2",
  D: "eb3 db4 bb3 gb4@2 db4 bb3@2 eb3 db4 bb3 gb4 eb3 db4 bb3@2",
  E: "[c3,f4]@2 f3 ab3 c3 c4 ab3@2 [c3,f4]@2 ab3 c4 c3 f4 f3@2", // F5
  F: "[f3,f4]@2 ab3 db4 f3 db4 bb3@2 [f3,db4]@2 ab3 db4 f3 db4 ab3@2", // F Db
  G: "[b2,e4]@2 ab3 b3 b2 e4 b3@2 [db3,gb4]@2 bb3 db4 gb3 gb4 bb3@2", // E5 Gb5
  H: "gb3 db4 bb3 gb4@2 db4 bb3@2 eb3@2 ab3 b3 eb3 eb4 b3@2",
  I: "[b2,e4]@2 e3 b3 b2 e4 e3@2 [b2,e4]@2 e3 b3 b2 e4 b3@2", // E5
  J: "[f3,db4]@2 ab3 db4 f3 db4 ab3 [f3,db4]@2 ab3 db4 f3!2 db4 ab3@2", // Db
  K: "[g3,eb4]@2 bb3 eb4 g3 eb4 bb3@2 [g3,eb4]@2 bb3 eb4 g3 eb4 bb3@2", // Cm
  L: "[e3,e4]@2 ab3 b3 e3 e4 ab3@2 [e3,e4]@2 ab3 b3 e3 e4 ab3@2", // E
  M: "[gb3,gb4]@2 bb3 db4 gb3 db4 bb3@2 [gb3,gb4]@2 bb3 db4 gb3 gb4 bb3@2", // Gb
  N: "[g3,g4]@2 bb3 d4 g3 g4 bb3@2 [g3,g4]@2 bb3 d4 g3 g4 bb3@2", // G
  O: "[e3,g4]@2 g3 bb3 g3 c4 bb3@2 [e3,g4]@2 g3 bb3 e3 c4 bb3@2", P: "b2@2 eb3 gb3 b2 db4 ~ gb3@2 db3@2 ~ f3 bb3 db3 ~",
  Q: "eb4 bb3@3 ~ [bb4,eb5]@11, ~ [eb4,gb4]@3", // Eb5 Ebm
})).s("gm_acoustic_guitar_steel").gain(0.35).pan(1)

// chords · pad warm · "Nappe"
const pad_warm = note(`<
  A B A B A B A B A B C D A B A B A B C D C D E F E F G H I F J A B A B A B C D C D C D C D C D C D C D C E F E F I K L
  M E F E F G H I F J A B A B A B C D C D C D C D C D C D C D N@3
>`.pickRestart({
  A: "[gb3,bb3,eb4] [gb3,bb3,db4]", B: "[ab3,bb3,c4,eb4]", C: "[gb3,bb3,b3,eb4] [db3,bb3,db4,f4]", D: "[gb3,bb3,eb4]",
  E: "[f3,ab3,c4,f4]", F: "[db3,ab3,db4,f4]", G: "[e3,ab3,b3,e4] [gb2,gb3,bb3,db4]",
  H: "[eb3,gb3,bb3,eb4] [ab2,ab3,b3,eb4]", I: "[e3,ab3,b3,e4]", J: "[eb3,ab3,bb3,eb4] [eb3,g3,bb3,eb4]",
  K: "[gb2,gb3,bb3,db4]", L: "[g2,g3,bb3,d4]", M: "[c3,g3,bb3,c4,e4]",
  N: "[[gb3,bb3,b3,eb4]@9 [db3,bb3,db4,f4]@11 [eb3,gb3,bb3,eb4]@25 ~@3]/3", // Bmaj7 Bbm Ebm
})).s("gm_pad_warm").gain(0.48)

// other · string ensemble 1 · "CordesLourdes"
const string_ensemble_1 = note("<~@42 A B ~ C D E F G H I ~@40>".pickRestart({
  A: "db2 eb2 ~@14", B: "~@8 f2 gb2 f2 db2 bb1 eb2 ~@2", C: "~@2 bb2 ~@2 ab2 ~@2 gb2 ~ f2 gb2 f2 db2 bb1 eb2",
  D: "~@2 bb2 ~@13", E: "~@2 eb2 ~ f2 gb2 ~ ab2 ~@2 gb2 f2 db2 bb1 f2 eb2", F: "~@10 eb2 ~@2 eb2 ~@2",
  G: "eb3 ~ eb2 eb3 ~@2 eb3 ~ eb2 eb3 ~ eb2 eb3 ~ eb2 eb3", H: "~ eb2 eb3 ~@2 eb3 ~@2 eb3 ~ eb2 eb3 ~ eb2 eb3 ~",
  I: "eb2 ~ eb3 ~ eb2 eb3 ~ eb2 eb3 ~@7",
})).s("gm_string_ensemble_1").gain(0.8)

stack(acoustic_guitar_steel, acoustic_guitar_nylon, bass, acoustic_guitar_steel_2, pad_warm, string_ensemble_1)

More by Celine Dion