Strudelify

S'il suffisait d'aimer

Celine Dion

KeyB♭ majorTempo60 bpm
0:00/0:00
// S'il suffisait d'aimer — Celine Dion
// 60 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 23, 4/4 at bar 23) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 53 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(60/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 · piano
const piano = note("<A@8 B@5 C@6 D@3 E F@7 G@2 H I J K H I J L H I J K H I M@2 ~@5>".pickRestart({
  A: "[~@13 d4@3 g4@2 a4@3 d4@5 d4@3 [g2,g3,d4,bb4]@8 [f3,d4,a4]@8 d4@3 f4@2 d4@3 bb3@5 bb3@3 [bb3,eb4]@8 bb3@8 a3@8 [g3,d4,g4,bb4]@8 [f3,d4,f4,a4]@8 [eb3,eb4,g4]@8 [d3,bb3,d4,f4]@8 [c3,bb3,eb4,g4]@8 [d3,bb3,d4,f4]@8 [eb3,bb3,eb4,g4]@8 [f3,c4,f4,a4]@8 [gb2,a3,d4,a4]@8 [g2,bb3,d4,g4]@8 [a2,a3,c4,f4]@8 [bb2,bb3,d4,f4]@8 [db3,a3,e4]@8 [d3,a3,d4,f4]@8 [e3,c4,g4]@8 c4@4 ~@24 c5@12 [g3,d4,g4,bb4]@8 [f3,d4,f4,a4]@3, ~@21 [g2,g3,bb4]@8 ~@8 f2@16 [eb2,eb3]@16 [f2,f3,c4,f4]@16 ~@120 f3@16 a4@5 bb4@19 ~@11, ~@45 f3@8 g4@8 ~@144 a4@11 g4@29 ~@11, ~@210 c4@35 ~@11, ~@213 f4@32 ~@11]/8", // Gm Dm Eb5 Gm Dm Eb Bb Cm7 …
  B: "[~@5 [eb3,eb4,g4]@8 [d3,bb3,d4,f4]@8 [c3,bb3,eb4,g4]@8 [d3,bb3,d4,f4]@8 [eb3,bb3,eb4,g4]@8 [f3,c4,f4,a4]@8 [gb2,a3,d4,a4]@8 [g2,bb3,d4,g4]@8 [a2,a3,c4,f4]@8 [bb2,bb3,d4,f4]@8 [db3,a3,e4]@8 [d3,a3,d4,f4]@8 [e3,c4,g4]@8 c4@4 ~@31 c5@16, ~@109 f3@24 a4@3 bb4@24, ~@109 a4@11 g4@40, ~@57 c4@23, ~@117 f4@8 a4@5 f4@30]/5", // Eb Bb Cm7 Bb Eb F D Gm …
  C: "[~@8 [g3,g4]@8 [bb3,g4]@8 ~@8 d4@5 [a3,f4]@4 ~@8 bb4@4 g3@4 bb3@8 ~@4 d4@4 [eb4,g4]@8 g3@4 [bb3,g4]@4 f4@8 bb4@8 ~@12 c4@4 bb3@8 a3@8 [g3,g4]@8 [bb3,g4]@8 ~@8 d4@4 [a3,f4]@4 ~@8 bb4@4 g3@4 [bb2,bb3,d4,f4]@7, ~@8 [g2,d4]@16 [d3,c4]@16 ~ [eb3,bb3,eb4]@16 [bb2,f4]@16 bb3@4 ~@4 eb4@8 ~@24 bb4@8 ~@48 g4@12 ~@11, ~@24 [a3,f4]@12 ~@5 g4@12 ~@4 d4@12 ~@4 c4@12 ~@20 c4@12 ~@36 [a3,f4]@12 ~@27, ~@65 bb3@8 c3@16 [bb2,bb3,d4]@16 [c3,eb4,g4]@16 [f2,f3,c4,f4]@16 [g2,d4]@16 [d3,c4]@16 [eb3,bb3,eb4]@16 ~@7]/6", // G Eb Dm Eb G Eb Dm Bb …
  D: "[~@5 d4@4 [eb4,g4]@8 g3@4 [bb3,g4]@4 f4@8 bb4@8 [bb1,eb3,f3,bb3,eb4]@12 d4@20 f4@2 g4@2 bb4@3 [a1,a2,a3,c4,f4,a4]@8 [g2,g3,d4,g4,bb4]@8, ~ bb3@8 c3@16 [bb2,bb3,d4]@16 ~@12 [bb1,bb2,d3,f3,bb3]@28 ~@15, ~@3 c4@4 ~@25, ~@9 bb3@4 ~@4 eb4@8 ~@71]/3", // Eb Bbsus4 F Gm Bb
  E: "[f2,f3,d4,f4,a4] [eb2,eb3,eb4,g4] [d2,d3,bb3,d4,f4] [c2,c3,bb3,eb4,g4]", // Dm Eb Bb Cm7
  F: "[[d2,d3,bb3,d4,f4]@8 [eb2,eb3,bb3,eb4,g4]@7 [f2,f3,c4,f4,a4]@8 [gb2,a3,d4,a4]@8 [g2,bb3,d4,g4]@8 [a2,a3,c4,f4]@8 [bb2,bb3,d4,f4]@8 [db3,a3,e4]@8 [d3,a3,d4,f4]@8 [e3,c4,g4]@7 c4@4 ~@24 c5@12 [g3,d4,g4,bb4]@8 [f3,d4,f4,a4]@7 [eb3,eb4,g4]@8 [d3,bb3,d4,f4]@8 [c3,bb3,eb4,g4]@8 [d3,bb3,d4,f4]@8 [eb3,bb3,eb4,g4]@8 [f3,c4,f4,a4]@8 [gb2,a3,d4,a4]@8 [g2,bb3,d4,g4]@7 [a2,a3,c4,f4]@8 [bb2,bb3,d4,f4]@8 [db3,a3,e4]@8 [d3,a3,d4,f4]@4, ~@39 f3@8 a4@12 ~@53, ~@78 a4@11 g4@29 ~@106, ~@42 c4@17 ~@53, ~@86 f4@13 bb4@18 ~@107]/7", // Bb Eb F D Gm F Bb A …
  G: "[~@4 [e3,c4,g4]@8 c4@4 ~@12 a4@5 ~@10 c5@13 ~@8, ~@3 f3@12 ~, ~@12 a4@10 g4@13 a4@3 bb4@18 ~@8, ~@17 c4@39 ~@8, ~@20 f4@13 f4@23 ~@8]/2", // C
  H: "[g3,g4]@2 [bb3,g4]@2 ~@2 d4 [a3,f4], [g2,d4] [d3,c4], ~@4 [a3,f4]@3 ~", // G Eb Dm G5 D7 Dm
  I: "~@2 bb4 g3 bb3@2 ~ d4, [eb3,bb3,eb4] [bb2,f4], g4@3 ~ d4@3 ~, ~@3 bb3", // Eb5 Bb5
  J: "[eb4,g4]@2 g3 [bb3,g4] f4@2 bb4@2, c3 [bb2,bb3,d4], c4@3 ~@5, bb3 ~ eb4@2 ~@4", // Eb Bb
  K: "~@3 c4 bb3@2 a3@2, [c3,eb4,g4] [f2,f3,c4,f4], c4@3 ~@5, ~ bb4 ~@2", // Cm F5
  L: "g3 ~ c3 [bb2,bb3]@3 [a2,a3]@2, [eb2,bb3,eb4,g4]@3 [d3,f3,d4,f4]@5, ~@3 bb1@4 ~", // Bb A Eb Dm
  M: "[[eb4,g4]@8 g3@4 [bb3,g4]@4 f4@8 bb4@13 ~@27, c3@16 [bb2,bb3,d4]@21 ~@27, c4@3 ~@13, bb3 ~ eb4@2 ~@12]/2", // Eb Bb
})).s("gm_piano").gain(0.4).pan(0.4)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@7 A@4 B@2 C@6 D@3 E@8 F@2 G@7 H@8 ~ I@5>".pickRestart({
  A: "[~@5 [g2,g3]@2 [f2,f3]@2 [eb2,eb3]@2 [d2,d3]@2 [c2,c3]@2 [d2,d3]@2 [eb2,eb3]@2 [f2,f3]@2 [gb2,gb3]@2 [g2,g3]@2 [a2,a3]@2 [bb2,bb3]@2 [db2,db3]@2 [d2,d3]]/4", // G F Eb D C D Eb F …
  B: "[~ [e2,e3]@2 [f2,f3]@13]/2", // E F
  C: "[~@3 [f2,f3,a3,c4,a4]@2 [eb2,eb3,bb3,g4,bb4]@2 [d2,f3,bb3,f4]@2 [c2,eb3,g3,bb3,eb4,g4]@2 [bb1,d3,f3,bb3,d4,bb4]@2 [c2,eb3,g3,bb3]@2 [f2,f3,a3]@2 [g2,g3,bb3,g4]@2 [f2,f3,a3,c4,a4]@2 [eb2,eb3,bb3,g4,bb4]@2 [d2,f3,bb3,f4], ~@13 [c4,c5]@4 d4@4 ~@3]/6", // F Eb Bb Cm7 Bb Cm7 F Gm …
  D: "[~@8 [c2,eb3,g3,bb3,eb4,g4]@16 [bb1,d3,f3,bb3,d4,bb4]@16 [bb2,f3,bb3,eb4,bb4]@11 ~ d3@5 [c3,c4]@4 [d3,d4]@19 [a1,f3,a3,c4,f4,a4]@8 [g2,g3]@8, ~@51 [bb1,bb4]@29 ~@16, ~@17 d4@2 ~@13, ~@13 [f3,bb3]@7 ~@4]/3", // Cm7 Bb Bbsus4 C D F G Bb …
  E: "[[f2,f3]@7 [eb2,eb3]@8 [d2,d3]@8 [c2,c3]@8 [d2,d3]@8 [eb2,eb3]@8 [f2,f3]@8 [gb2,gb3]@8 [g2,g3]@7 [a2,a3]@8 [bb2,bb3]@8 [db2,db3]@8 [d2,d3]@8 [e2,e3]@8 [f2,f3]@39 ~@8 [f2,f3]@8 [eb2,eb3]@8 [d2,d3]@8 [c2,c3]@7 [d2,d3]@8 [eb2,eb3]@8 [f2,f3]@8 [gb2,gb3]@8 [g2,g3]@8 [a2,a3]@8 [bb2,bb3]@8 [db2,db3]@7 [d2,d3]@5, ~@149 d4@31 ~@76, ~@149 [g2,g3,bb3,g4]@16 ~@91]/8", // F Eb D C D Eb F Gb …
  F: "[~@3 [e2,e3]@8 [f2,f3]@52 ~]/2", // E F
  G: "[~@15 [f2,f3,a3,c4,a4]@16 [eb2,eb3,bb3,g4,bb4]@16 [d2,f3,bb3,f4]@16 [c2,eb3,g3,bb3,eb4,g4]@16 [bb1,d3,f3,bb3,d4,bb4]@16 [c2,eb3,g3,bb3]@16 [f2,f3,a3]@16 [g2,g3,bb3,g4]@16 [f2,f3,a3,c4,a4]@16 [eb2,eb3,bb3,g4,bb4]@16 [d2,f3,bb3,f4]@16 [c2,eb3,g3,bb3,eb4,g4]@16 [bb1,d3,f3,bb3,d4,bb4]@16 [eb2,eb3,g3,bb3,bb4], ~@95 [c4,c5]@32 d4@32 ~@65]/7", // F Eb Bb Cm7 Bb Cm7 F Gm …
  H: "[~@7 c2@4 bb1@12 a1@8 [g2,g3,bb3,g4]@16 [f2,f3,a3,c4,a4]@16 [eb2,eb3,bb3,g4,bb4]@16 [d2,f3,bb3,f4]@16 [c2,eb3,g3,bb3,eb4,g4]@16 [bb1,d3,f3,bb3,d4,bb4]@16 [c2,eb3,g3,bb3]@16 [f2,f3,a3]@16 [g2,g3,bb3,g4]@16 [f2,f3,a3,c4,a4]@16 [eb2,eb3,bb3,g4,bb4]@16 [d2,f3,bb3,f4]@16 [c2,eb3,g3,bb3,eb4,g4]@16 [bb1,d3,f3,bb3,d4,bb4]@17, ~@7 f4@24 d4@32 ~@64 [c4,c5]@32 d4@32 ~@65, ~@11 [f3,bb3,bb4]@20 ~@225]/8", // Gm F Eb Bb Cm7 Bb Cm7 F …
  I: "[~@11 d4@6 c4@2 eb4@8 d4@8 eb4@8 d4@6 c4@2 eb4@8 [bb1,d4]@16 ~@5, ~@11 [bb3,f4]@64 ~@5, ~@11 bb1@16 bb1@16 bb1@16 ~@21]/5", // Bb Bb5
})).s("gm_string_ensemble_1").gain(0.1).pan(1)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@7 A@4 B@2 C@6 D@3 E@8 F@2 G@8 H@7 ~ I@5>".pickRestart({
  A: "[~@5 [g2,g3]@2 [f2,f3]@2 [eb2,eb3]@2 [d2,d3]@2 [c2,c3]@2 [d2,d3]@2 [eb2,eb3]@2 [f2,f3]@2 [gb2,gb3]@2 [g2,g3]@2 [a2,a3]@2 [bb2,bb3]@2 [db2,db3]@2 [d2,d3]]/4", // G F Eb D C D Eb F …
  B: "[~ [e2,e3]@2 [f2,f3]@13]/2", // E F
  C: "[~@23 [f2,f3,a3,c4,a4]@16 [eb2,eb3,bb3,g4,bb4]@16 ~ [d2,f3,bb3,f4]@16 [c2,eb3,g3,bb3,eb4,g4]@16 [bb1,d3,f3,bb3,d4,bb4]@16 [c2,eb3,g3,bb3]@16 [f2,f3,a3]@16 [g2,g3,bb3,g4]@16 [f2,f3,a3,c4,a4]@16 [eb2,eb3,bb3,g4,bb4]@16 [d2,f3,bb3,f4]@8, ~@13 [c4,c5]@4 d4@4 ~@3]/6", // F Eb Bb Cm7 Bb Cm7 F Gm …
  D: "[~@8 [c2,eb3,g3,bb3,eb4,g4]@16 [bb1,d3,f3,bb3,d4,bb4]@16 [bb1,eb3,g3,bb3,eb4,bb4]@11 ~ d3@5 [c3,c4]@4 [d3,d4]@19 [a1,a2,c3,a3,c4,f4,a4]@8 [g2,g3]@8, ~@51 [bb1,bb4]@29 ~@16, ~@17 d4@2 ~@13, ~@13 f3@9 ~@2, ~@13 bb3@7 ~@4]/3", // Cm7 Bb Eb C D F G Bb
  E: "[[f2,f3]@7 [eb2,eb3]@8 [d2,d3]@8 [c2,c3]@8 [d2,d3]@8 [eb2,eb3]@8 [f2,f3]@8 [gb2,gb3]@8 [g2,g3]@7 [a2,a3]@8 [bb2,bb3]@8 [db2,db3]@8 [d2,d3]@8 [e2,e3]@8 [f2,f3]@39 ~@8 [f2,f3]@8 [eb2,eb3]@8 [d2,d3]@8 [c2,c3]@7 [d2,d3]@8 [eb2,eb3]@8 [f2,f3]@8 [gb2,gb3]@8 [g2,g3]@8 [a2,a3]@8 [bb2,bb3]@8 [db2,db3]@7 [d2,d3]@5]/8", // F Eb D C D Eb F Gb …
  F: "[~@3 [e2,e3]@8 [f2,f3]@52 ~]/2", // E F
  G: "[~@15 [f2,f3,a3,c4,a4]@16 [eb2,eb3,bb3,g4,bb4]@16 [d2,f3,bb3,f4]@16 [c2,eb3,g3,bb3,eb4,g4]@16 [bb1,d3,f3,bb3,d4,bb4]@16 [c2,eb3,g3,bb3]@16 [f2,f3,a3]@16 [g2,g3,bb3,g4]@16 [f2,f3,a3,c4,a4]@16 [eb2,eb3,bb3,g4,bb4]@16 [d2,f3,bb3,f4]@16 [c2,eb3,g3,bb3,eb4,g4]@16 [bb1,d3,f3,bb3,d4,bb4]@16 bb2@8 bb2@8 bb2@7 ~ a2@9, ~@95 [c4,c5]@32 d4@32 ~@64 [eb3,g3,bb3,bb4]@15 ~ [f3,bb3,bb4]@16 ~, ~@231 f4@24 ~]/8", // F Eb Bb Cm7 Bb Cm7 F Gm …
  H: "[[g2,d4,g4,bb4]@15 [f2,f3,a3,c4,a4]@16 [eb2,eb3,bb3,g4,bb4]@16 [d2,f3,bb3,f4]@16 [c2,eb3,g3,bb3,eb4,g4]@16 [bb1,d3,f3,bb3,d4,bb4]@16 [c2,eb3,g3,bb3]@16 [f2,f3,a3]@16 [g2,g3,bb3,g4]@16 [f2,f3,a3,c4,a4]@16 [eb2,eb3,bb3,g4,bb4]@16 [d2,f3,bb3,f4]@16 [c2,eb3,g3,bb3,eb4,g4]@16 [bb1,d3,f3,bb3,d4,bb4]@17, ~@95 [c4,c5]@32 d4@32 ~@65]/7", // Gm F Eb Bb Cm7 Bb Cm7 F …
  I: "[~@11 d4@6 c4@2 eb4@8 d4@8 eb4@8 d4@6 c4@2 eb4@8 d4@16 ~@5, ~@11 [bb3,f4]@64 ~@5]/5", // Bb5
})).s("gm_string_ensemble_2").gain(0.15).pan(0)

// other · string ensemble 1
const string_ensemble_1_2 = note("<~@38 A@4 B@5 ~@6>".pickRestart({
  A: "[~@31 [f3,f5]@13 [bb3,bb5]@19 ~ d4@31 ~ eb4@15 ~ f4@15 [c5,g5], ~@63 d6@32 eb6@16 f6@16 ~]/4", // F Bb C5
  B: "[~@7 c6@8 [bb4,bb5]@15 ~ c4@16 ~@4 bb5@4 a5@8 [bb4,g5]@16 [a4,a5]@16 g4@16 f4@16 [eb4,eb5]@16 [d4,d5]@17, ~@31 g5@19 ~@45 bb5@32 ~@33, ~@47 f4@16 ~@97]/5", // Bb Eb A Eb D
})).s("gm_string_ensemble_1").gain(0.15).pan(0.7)

stack(piano, string_ensemble_1, string_ensemble_2, string_ensemble_1_2)

More by Celine Dion