Strudelify

Where Is the Love

Celine Dion

KeyG majorTempo75 bpm
0:00/0:00
// Where Is the Love — Celine Dion
// 75 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 2 "MIDI" pad bowed (copy of ch 1 "MIDI" oboe)
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(75/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 · acoustic bass · "MIDI"
const bass = note(`<
  ~ A@5 B C D A E F C F C E@2 A E F C F G H E@2 A F C D A F C D A F D I D B D E A B C D A E F C F G H E A F C D A F C D
  A F D I D B D E A B C D@2 I D F D E A B C D A B C D@2 A@2 J@2
>`.pickRestart({
  A: "g2@3 d2", B: "g2@3 g2", C: "b1@3 f#2", D: "c2@3 g2", E: "d2@3 a2", F: "e2@3 b1", G: "c2@3 g1", H: "a1@3 e2",
  I: "d2@3 a1", J: "[g2@15 ~]/2",
})).s("gm_acoustic_bass").gain(0.4).pan(0.7)

// chords · piano · "MIDI"
const piano = note(`<
  ~ A@2 B C D E F G H I J K L M N@2 O P Q F L R S T U V W M X Y W M Z Y J R U Z AA Z T V AB F R H T AC AD AE X AF AG H W
  F G AH AE AD G H W AI P X E X I H AB F Z X AJ AI Q Z AJ H AA AK AL O AM AK AL R D O AN@2
>`.pickRestart({
  A: "[~@15 d4, g2 g2, ~ d3@3 d4@2 ~ d4@4 b3 d4@2 b3@2, ~@2 g3@3 [d3,g3]@3 ~ d3@7, ~@3 b3@2 ~ b3@2 ~@2 g3@3 g3@3]/2", // G5
  B: "~ b2 d3 b2 g3 d3 b2 d3, g2@5 ~@3", C: "~ b2 d3 b2 g3 d3 b2 d3, g2@9 ~@7",
  D: "~@7 b3, g2@2 d3@3 d3@3, ~ b2@2 g3@2 ~ g3@2, ~@2 b3 ~", E: "~@6 e4 g4, g2, ~ g3@7, ~ b3 g4 ~, ~@3 e4@2 b3@3",
  F: "~@7 d4, b2@2 f#3@3 f#3@3, ~ d3@2 b3@2 ~ b3@2, ~@2 d4 ~",
  G: "c3 g3 e3 g3 c3 g3 ~ [g3,e4], [c4,e4]@6 [e3,c4] ~, ~@13 d4@2 ~", // C
  H: "~@7 [d3,d4], [g3,b3] ~, g2 b2 [g2,g3] [b2,b3], ~ d3@2 d3@2 [d3,a3]@2 ~", // D G B D5
  I: "~ a3 ~ a3 [d3,d4] ~ [f#3,f#4] [a3,a4], [d4,f#4]@3 ~@5, d3@2 [f#3,a4]@2 ~ [a3,e4]@2 ~", // D F# A D F#m A5
  J: "~@7 g4, e3@2 b3@3 b3@3, ~ g3@2 e4@2 ~ e4@2, ~@2 g4 ~", K: "~@6 b3 d4, b2, ~ d3@7, ~ f#3 d4 ~, ~@3 b3@2 f#3@3",
  L: "~@7 [b3,b4], [e4,g4] ~, e3 g3 [e3,e4] [g3,g4], ~ b3@2 b3@2 [b3,f#4]@2 ~", // B Em E G B5
  M: "b2 f#3 d3 f#3 b2 f#3 ~ [f#3,d4], [b3,d4]@6 [d3,b3] ~, ~@13 c#4@2 ~", // D Bm G
  N: "[~@15 f#4, d3@7 ~ d3@8, ~ f#3@7 ~ f#3@7, ~ a3 f#4 d4 ~ a3 f#4 d4, ~@3 d4@2 a3@2 f#4@4 d4@2 a3@3]/2",
  O: "~@7 d3, g2, ~ b2@2 b2@2 d3@2 ~, ~ d3 g3 b2", P: "~@7 f#4, d3@2 a3@3 a3@3, ~ f#3@2 d4@2 ~ d4@2, ~@2 f#4 ~",
  Q: "~@6 e4 g4, e3, ~ g3@7, ~ b3 g4 ~, ~@3 e4@2 b3@3", R: "~@7 e4, c3@2 g3@3 g3@3, ~ e3@2 c4@2 ~ c4@2, ~@2 e4 ~",
  S: "~@7 e3, a2, ~ c3@2 c3@2 e3@2 ~, ~ e3 a3 c3",
  T: "d3 a3 f#3 a3 d3 a3 ~ [a3,f#4], [d4,f#4]@6 [f#3,d4] ~, ~@13 e4@2 ~", // D
  U: "~@7 [a3,a4], [d4,f#4] ~, d3 f#3 [d3,d4] [f#3,f#4], ~ a3@2 a3@2 [a3,e4]@2 ~", // A D F# A5
  V: "g2 d3 b2 d3 g2 d3 ~ [d3,b3], [g3,b3]@6 [b2,g3] ~, ~@13 a3@2 ~", // G Em
  W: "~ b3 ~ b3 [e3,e4] ~ [g3,g4] [b3,b4], [e4,g4]@3 ~@5, e3@2 [g3,b4]@2 ~ [b3,f#4]@2 ~", // E G B Em G B5
  X: "~ g3 ~ g3 [c3,c4] ~ [e3,e4] [g3,g4], [c4,e4]@3 ~@5, c3@2 [e3,g4]@2 ~ [g3,d4]@2 ~", // C E G C Em G5
  Y: "~@6 g3 b3, g2, ~ b2@7, ~ d3 b3 ~, ~@3 g3@2 d3@3",
  Z: "~@7 [g3,g4], [c4,e4] ~, c3 e3 [c3,c4] [e3,e4], ~ g3@2 g3@2 [g3,d4]@2 ~", // G C E G5
  AA: "~@7 [b3,b4], [e4,g4]@2 ~ [g3,g4], g2 g3 [g2,e4] ~, ~ b3@2 b3@2 [b3,f#4]@2 ~", // B Em G C B5
  AB: "~@7 g4, g2@2 b3@3 b3@3, ~ g3@2 e4@2 ~ e4@2, ~@2 g4 ~",
  AC: "e3 b3 g3 b3 e3 b3 ~ [b3,g4], [e4,g4]@6 [g3,e4] ~, ~@13 f#4@2 ~", // Em C
  AD: "~ f#3 ~ f#3 [b2,b3] ~ [d3,d4] [f#3,f#4], [b3,d4]@3 ~@5, b2@2 [d3,f#4]@2 ~ [f#3,c#4]@2 ~", // B D F# Bm D F#5
  AE: "~@7 b3, e3, ~ g3@2 g3@2 b3@2 ~, ~ b3 e4 g3", AF: "a2 e3 c3 e3 a2 e3 ~ [e3,c4], [a3,c4]@6 [c3,a3] ~, ~@13 b3@2 ~",
  AG: "~@7 a3, d3, ~ f#3@2 f#3@2 a3@2 ~, ~ a3 d4 f#3",
  AH: "~ d3 ~ d3 [g2,g3] ~ [b2,b3] [d3,d4], [g3,b3]@3 ~@5, g2@2 [b2,d4]@2 ~ [d3,a3]@2 ~", // G B D G Bm D5
  AI: "~@7 g3, c3, ~ e3@2 e3@2 g3@2 ~, ~ g3 c4 e3", AJ: "~@6 d4 f#4, d3, ~ f#3@7, ~ a3 f#4 ~, ~@3 d4@2 a3@3",
  AK: "~@7 f#3, b2, ~ d3@2 d3@2 f#3@2 ~, ~ f#3 b3 d3", AL: "~@6 c4 e4, c3, ~ e3@7, ~ g3 e4 ~, ~@3 c4@2 g3@3",
  AM: "~ b3 ~ b3 [g2,e4] ~ [g3,g4] [b3,b4], [e4,g4]@3 ~@5, g2@2 [g3,b4]@2 ~ [b3,f#4]@2 ~", // C G B Em G B5
  AN: "[~@3 g3 d4 ~@3 g4@7 ~, g2@6 b3 d4@8 ~, ~ b2@14 ~, ~@2 d3@13 ~, ~@5 g3@10 ~]/2",
})).s("gm_piano").gain(0.4).pan(0.6)

// bass · piano · "MIDI"
const bass_2 = note(`<
  ~ A@4 B@2 C D B E F C F C G@2 B E F C F D H E@2 B F C D B F C D B F D E D B D E B@2 C D B E F C F D H E B F C D B F C
  D B F D E D B D E B@2 C D@2 E D F D E B@2 C D B@2 C D@2 B@2 A@2
>`.pickRestart({
  A: "[g2@31 ~]/2", B: "g2", C: "b1", D: "c2", E: "d2", F: "e2", G: "[d2@31 ~]/2", H: "a2",
})).s("gm_piano").gain(0.4).pan(0.6)

// chords · string ensemble 2 · "MIDI"
const string_ensemble_2 = note(`<
  ~ A@2 B@2 C D E F G H I E J E K@2 C H J L I M N O H C I E F C I E F C J M O M J M H C D L F C O J L J M P H G I L F C
  J L F C I M O F D F H C D E F@2 O M J F H G J L M G J E F M C@2 Q@2
>`.pickRestart({
  A: "[g2,b3,d4,g4]/2", B: "[g2,b3,g4,d5]/2", C: "[g2,b3,g4,d5]", D: "[g2,g3,e4,b4]", E: "[b2,d4,f#4,b4]",
  F: "[c3,e4,g4,c5]", G: "[g2,b3,d4,g4]", H: "[d3,f#4,a4,d5]", I: "[e2,g3,e4,b4]", J: "[e3,g4,b4,e5]",
  K: "[d3,a3,f#4,d5]/2", L: "[b2,f#3,d4,b4]", M: "[c3,g3,e4,c5]", N: "[a2,c4,e4,a4]", O: "[d3,a3,f#4,d5]",
  P: "[a2,e3,c4,a4]", Q: "[[g2,d3,b3,b4,g5]@31 ~]/2",
})).s("gm_string_ensemble_2").gain(0.32).pan(0.4)

// chords · synth strings 1 · "MIDI"
const synth_strings_1 = note(`<
  ~ A@2 B@2 C D E F G H I J K L M@2 G N O P O Q R N S T U V W X Y Z AA AB AC Q AD W AE AF AG AH AI AJ AF AK N I AL O AM
  AN AD AO D AP AQ G U AR AA G AS AT AU AV AS AW AX AY AZ BA W@2 BB BC I BD H AB BE J BD G BF J W AA T G BG@2
>`.pickRestart({
  A: "[~@12 b5@2 ~@2 g6@15 ~, [b3,d4,g4,b4]@31 ~, ~@10 g5@21 ~, ~@14 b5@17 ~]/2", B: "[[g3,b3,d4,g4]@31 ~]/2",
  C: "[g3,b3,d4]", D: "[g3,e4,b4]@4 g4 g3 b3 e4", E: "f#4 ~ f#5 d5, [b3,d4,b4], ~ f#4@3",
  F: "[c4,e4,g4,c5]@12 ~@2 g4 c5, ~@6 c4 ~, ~@13 e4@2 ~", G: "~ b4 b5 g5, [b3,g4,d5]",
  H: "~@5 a5 f#5 a4, [d4,f#4,d5], a4@7 ~", I: "[e4,g4,b4] [g3,b3,e4]", J: "~ f#4 ~ d5, [d4,b4], f#5!2",
  K: "~@5 g5 e5 g4, [e4,b4], g4@7 ~", L: "f#5@10 ~@2 d5@2 f#4 ~, [d4,b4], ~@5 f#5@3",
  M: "[~@12 a5@2 ~@2 f#6@15 ~, [a3,d4,f#4,a4]@31 ~, ~@10 f#5@21 ~, ~@14 a5@17 ~]/2", N: "[d4,f#4,a4,d5]",
  O: "[e4,g4,b4,e5]@5 b4 g4 e4", P: "[d4,f#4,b4] [b3,d4,f#4]", Q: "[c4,e4,g4,c5]@4 g4 g3 c4 e4",
  R: "[c4,a4,e5] [a3,c4,e4]", S: "[d4,f#4,a4,d5]@4 a4 a3 d4 f#4", T: "[b3,g4,d5]",
  U: "~@5 g5 ~ g4, [e4,b4], g4@7 ~, e5@3 e5", V: "[d4,f#4,b4]@12 ~@2 f#4 b4, ~@6 b3 ~, ~@13 d4@2 ~",
  W: "g4 ~ g5 e5, [c4,e4,c5], ~ g4@3", X: "~ b4 b5 g5, [b3,d4,g4]", Y: "g4 ~ g5 e5, [e4,b4], e5@3 ~, ~ g4@3",
  Z: "[d4,b4,f#5] [f#3,b3,d4]", AA: "[c4,e4,g4,c5]", AB: "[b3,g4,d5]@5 d5 b4 g4", AC: "[g3,e4,b4] [g3,b3,e4]",
  AD: "~@5 a5 f#5 a4, [d4,f#4], a4@7 ~", AE: "~ g4 g5 e5, [g3,e4,b4]", AF: "[c4,e4,g4]@5 c5 g4 e4",
  AG: "a4 ~ a5 f#5, [d4,f#4,d5], ~ a4@3", AH: "[b3,d4,g4]@4 b4 b3 d4 g4", AI: "[g3,b3,e4]!2",
  AJ: "[b3,d4,f#4,b4]@5 b4 f#4 d4", AK: "[b3,g4,d5]@4 b4 b3 d4 g4", AL: "[d4,b4,f#5]",
  AM: "g4 ~ g5 e5, [c4,e4], ~ g4@3", AN: "~ e4 ~ c5, [c4,a4], e5!2", AO: "[b3,g4,d5] [g3,b3,d4]",
  AP: "[b3,d4,f#4] [f#3,b3,d4]", AQ: "~@5 g5 e5 g4, [c4,e4], g4@7 ~", AR: "[d4,f#4,b4]@4 f#4 f#3 b3 d4",
  AS: "[g3,e4,b4]", AT: "[e3,c4,g4]@12 ~@2 g4 c5, ~@6 c4 ~, ~@13 e4@2 ~", AU: "~@5 a5 f#5 a4, [f#3,d4], a4@7 ~",
  AV: "[e3,c4,g4]@4 g4 g3 c4 e4", AW: "[c4,e4,g4,c5] [g3,c4,e4]", AX: "[d4,f#4,a4] [a3,d4,f#4]", AY: "[b3,d4,g4]",
  AZ: "[g3,e4,b4]@5 b4 g4 e4", BA: "[b3,d4,f#4,b4]", BB: "[d4,f#4,a4,d5] [a3,d4,f#4]", BC: "[c4,e4,g4]",
  BD: "[c4,e4,g4,c5]@5 c5 g4 e4", BE: "[e4,g4,b4,e5]@12 ~@2 g4 b4, ~@6 b3 ~, ~@13 e4@2 ~", BF: "[e4,g4,b4,e5]",
  BG: "[[b3,g4,d5]@29 ~@3]/2", // G
})).s("gm_synth_strings_1").gain(0.32).pan(0.3)

// other · acoustic guitar nylon · "MIDI"
const acoustic_guitar_nylon = note("<A B@2 C@2 D E F@2 ~@33 G H F@2 ~@24 G I@2 J ~@19>".pickRestart({
  A: "~@3 g2", B: "[g3@20 g3@2 f#3@7 e3@3]/2", C: "[d3@19 ~ d3@4 b2@2 c3@3 d3@3]/2",
  D: "~@2 g4 a4 b4 a4 g4 a4, g2@11 ~@5", E: "b4@4 g4 ~ g4@7 ~ g4@2", F: "[f#4@4 f#4@2 f#4@6 g4 [g4,a4]@2 e4@13 ~@4]/2",
  G: "~@2 g4 a4 b4 a4 g4 a4", H: "b4@4 g4@2 g4@7 ~ g4@2", I: "[b4@4 g4@2 g4@13 ~ g4@2 f#4@2 f#4@6 g4 ~]/2",
  J: "e4@13 ~@3",
})).s("gm_acoustic_guitar_nylon").gain(0.64).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@45 [x ~@2 x!2 ~@3]!25 ~@3 [x ~@2 x!2 ~@3]!20>").gain(0.07)

// drums · rim
const rim = s("rim").struct("<~@45 [~ x ~ x]!25 ~@3 [~ x ~ x]!19 [~ x ~@2]>").gain(0.09)

// drums · snare
const snare = s("sd").struct("<~@45 [~ x ~ x]!25 ~@3 [~ x ~ x]!17 [~@4 x ~@5 x!3 ~@3] [~ x ~ x] [~ x ~@2]>").gain(0.05)

// drums · low tom
const low_tom = s("lt").struct("<~@17 x!26 ~@49 [~@6 x!2 ~@8]>").gain(0.12)

// drums · hihat
const hihat = s("hh").struct("<~@45 [~ x!7]!25 ~@3 [~ x!7]!19 [~ x!4 ~@3]>").gain(0.07)

// drums · mid tom
const mid_tom = s("mt").struct("<~@45 A ~@14 A ~@12 A ~@16 A ~ B>".pickRestart({
  A: "~@14 x!2", B: "~@4 x!2 ~@10",
})).gain(0.07)

// drums · high tom
const high_tom = s("ht").struct("<~@45 A ~@14 A ~@12 A ~@16 A ~ B>".pickRestart({
  A: "~@12 x!2 ~@2", B: "x!3 ~@13",
})).gain(0.07)

// drums · crash
const crash = s("cr").struct("<~@46 x ~@14 x ~@30 [~ x]>").gain(0.07)

// drums · tambourine
const tambourine = s("tb").struct("<~@91 [x!8] [x!5 ~@3]>").gain(0.05)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@91 [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x] [~ x ~ x ~ x ~ x ~@8]>").gain(0.03)

// drums · congas
const congas = s("conga:33").struct("<~@17 [~@3 x!2 ~ x ~@3 x ~@3 x ~]!25 ~@51>").gain(0.44)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@45 [x!16]!25 ~@3 [x!16]!19 [x!9 ~@7]>").gain(0.35)

// drums · shaker
const shaker = s("sh").struct("<~@45 [~ x ~ x]!25 ~@3 [~ x ~ x]!19 [~ x ~@2]>").gain(0.07)

stack(
  bass, piano, bass_2, string_ensemble_2, synth_strings_1, acoustic_guitar_nylon, kick, rim, snare, low_tom, hihat,
  mid_tom, high_tom, crash, tambourine, tambourine_soft, congas, cabasa, shaker
)

More by Celine Dion