Strudelify

Hello le soleil brille

Annie Cordy

KeyE♭ majorTempo120 bpm
0:00/0:00
// Hello le soleil brille — Annie Cordy
// 120 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level. 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 · fretless bass · "Bass / Fretless"
const bass = note(`<
  A B A C@2 D E C A B A C@2 A F A G H@2 I H J K L A B A C@2 D E C A B A C@2 A F A@2 B A C@2 D E C A B A C@2 A F A G H@2
  I H J K L A B A C@2 D E C A B A C@2 A F A M N
>`.pickRestart({
  A: "eb2 bb1 eb2 bb1", B: "eb2@4 bb1@4 eb2@4 bb1@3 ~", C: "bb1@3 ~ f2@3 ~ bb1@3 ~ f2@3 ~", D: "eb2 bb1 eb2 e2",
  E: "bb1@3 ~ f2@3 ~ f2@4 c2@4", F: "f2@4 c2@4 bb1@3 ~ f2@3 ~", G: "c2@3 ~ g2@3 ~ ab2@4 eb2@4",
  H: "c2@3 ~ g2@3 ~ c2@3 ~ g2@3 ~", I: "eb2 a1 eb2 a1", J: "f2 c2 f2 c2", K: "c2@3 ~ g2@3 ~ g2@4 d2@4",
  L: "c2@3 ~ g2@3 ~ bb1@3 ~ f2@3 ~", M: "eb2 bb2 eb2 bb2", N: "eb3@4 bb2 ~@2 bb2 eb2@5 ~@3",
})).s("gm_fretless_bass").gain(0.24)

// chords · brass section · "Brass / Brass #62"
const brass_section = note(`<
  A@2 B C@2 D E C F G H I@2 J K H L M N O M P Q R S T B C@2 U E C F G J V I H K W A@2 X C@2 Y Z C F G H I@2 J K H L AA@2
  AB M AC Q R S T B C@2 Y E C F G H AD@2 W K J AE AF
>`.pickRestart({
  A: "[~@2 [bb4,eb5,g5] ~@3 [bb4,eb5,g5] ~@3 [bb4,eb5,g5] ~@3 [bb4,eb5,g5] ~@3 [bb4,eb5,g5] ~@3 [bb4,eb5,g5] ~@3 [bb4,eb5,g5] ~@3 [bb4,eb5,g5] ~, [bb3,eb4,g4]]/2", // Eb
  B: "~@2 [g3,bb3,eb4,g4] ~@3 [g3,bb3,eb4,g4] ~@3 [g3,bb3,eb4,g4]!3 ~ [g3,bb3,eb4,g4] ~, eb2", // Eb
  C: "~@2 [f3,ab3,bb3,d4] ~@3 [f3,ab3,bb3,d4] ~@3 [f3,ab3,bb3,d4]!3 ~ [f3,ab3,bb3,d4] ~, bb2", // Bb7
  D: "~@2 [bb4,eb5,g5] ~@3 [bb4,eb5,g5] ~@3 [bb3,eb4,g4]@2 ~@2 [bb3,e4,g4]@2, [bb3,eb4,g4]@2 eb3 e3", // Eb Edim Eb
  E: "~@2 [f3,bb3,d4]@6 ~@2 [c5,f5,a5] ~@3 [c5,f5,a5] ~, bb2 [c4,f4,a4]", // Bb F
  F: "~@2 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~, eb3@2 g3 bb3", // Eb
  G: "~@2 [g4,bb4,eb5]!3 ~ [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~, eb4@2 bb3 g3", // Eb
  H: "~@2 [eb4,bb4,eb5] ~@3 [eb4,bb4,eb5] ~@3 [eb4,bb4,eb5] ~@3 [eb4,bb4,eb5] ~, eb3@7 ~ g3@4 bb3@4", // Eb5
  I: "~@2 [ab3,d4,f4] ~@3 [ab3,d4,f4] ~@3 [ab3,d4,f4] ~@3 [ab3,d4,f4] ~, bb2 f3 d3 bb2", // Ddim
  J: "~@2 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~, eb3 bb3 g3 eb3", // Eb
  K: "~@2 [ab3,eb4,f4] ~@3 [ab3,eb4,f4] ~@3 [ab3,d4,f4] ~@3 [ab3,d4,f4] ~, f2 bb2", // Fm7 Ddim
  L: "~@2 [g3,eb4,g4] ~@3 [g3,eb4,g4] ~@3 [c4,ab4,c5] ~@3 [c4,ab4,c5] ~, c3 ab2", // Cm Fm
  M: "~@2 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~, c3 g3 eb3 c3", // Cm
  N: "~@2 [c4,g4,c5] ~@3 [c4,g4,c5] ~@3 [c4,g4,c5] ~@3 [c4,g4,c5] ~, c3@7 ~ eb3@4 g3@4", // C5
  O: "~@2 [a4,c5,gb5]!3 ~ [a4,c5,gb5] ~ [a4,c5,gb5] ~ a3@2 eb4@3 a3, eb3@5 ~@3", // Gbdim
  P: "~@2 [c5,f5,ab5]!3 ~ [c5,f5,ab5] ~ [c5,f5,ab5] ~ c4@2 f4@3 c4, f3@5 ~@3", // Fm
  Q: "~@2 [g3,eb4,g4] ~@3 [g3,eb4,g4] ~@3 [b3,f4,g4] ~@3 [b3,f4,g4] ~, c3 g2", // Cm G7
  R: "~@2 [g3,eb4,g4] ~@3 [g3,eb4,g4] ~@3 [ab3,d4,f4] ~@3 [ab3,d4,f4] ~, c3 bb2", // Cm Ddim
  S: "~@12 bb2@3 ~, eb3@3 ~, ~ [bb3,eb4,g4]@7", // Eb
  T: "~@2 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4]@3 ~ [bb3,eb4,g4] ~, eb3", // Eb
  U: "~@2 [bb3,eb4,g4]@6 ~@2 [bb3,eb4,g4]@2 ~@2 [bb4,e5,g5] ~, eb3@2 eb3 [bb3,e4,g4]", // Eb Edim
  V: "~@2 [ab3,f4,bb4] ~@3 [ab3,f4,bb4] ~@3 [ab3,f4,bb4] ~@3 [ab3,f4,bb4] ~, bb2@7 ~ d3@4 f3@4", // Bb7
  W: "~@2 [bb4,eb5,g5]!3 ~ [bb4,eb5,g5] ~ [bb4,eb5,g5] ~ bb3@2 eb4@3 bb3, eb3@5 ~@3", // Eb
  X: "~@2 [bb3,eb4,g4]!3 ~ [bb3,eb4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~, eb3, ~@3 g4 ~@4", // Eb Eb5 Eb
  Y: "~@2 [bb4,eb5,g5] ~@3 [bb4,eb5,g5] ~@3 [bb4,eb5,g5] ~@3 [bb4,e5,g5] ~, [bb3,eb4,g4]@2 [bb3,eb4,g4] [bb3,e4,g4]", // Eb Edim Eb Edim
  Z: "~@2 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [c4,f4,a4]@6, [f3,bb3,d4] f3", // Bb F Bb
  AA: "~@2 [g4,c5,eb5]!3 ~ [g4,c5,eb5] ~ [g4,c5,eb5] ~ g3@2 c4@3 g3, c3@5 ~@3", // Cm
  AB: "~@2 [c4,gb4,a4] ~@3 [c4,gb4,a4] ~@3 [c4,gb4,a4] ~@3 [c4,gb4,a4] ~, eb3 a3 gb3 eb3", // Gbdim
  AC: "~@2 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~, f3 c4 ab3 f3", // Fm
  AD: "~@2 [f4,ab4,d5]!3 ~ [f4,ab4,d5] ~ [f4,ab4,d5] ~ f3@2 bb3@3 f3, bb2@5 ~@3", // Ddim
  AE: "[g4,bb4,eb5]!2 ~@5 bb3 eb4@4 bb3@4, eb3@3 g3 ~@4, ~ [g4,bb4,eb5]@7", // Eb
  AF: "[eb3,g4,bb4,eb5]@7 ~ [eb3,bb4,eb5,g5]@5 ~@3", // Eb
})).s("gm_brass_section").gain(0.24)

// other · brass section · "Brass / Brass #62"
const brass_section_2 = note(`<
  A B C D E F G H A I C D J K L M N O P Q R S T U A I C V E F W H A X Y Z J K L AA A B C D E F G H A I C D J K L M N O P
  Q R S T U A I C V E F W H A X Y Z J K L AA ~@2
>`.pickRestart({
  A: "bb3 g3@2 ~@2 g3 ab3 bb3", B: "g4@3 ~ g4@3 ~ eb4@7 ~", C: "bb3 g3@2 ~@2 g3 ab3 g3", D: "bb3@3 ~ bb3@3 ~ ab3@6 ~@2",
  E: "ab3@2 f3@4 ~@4 f3@2 g3@3 ab3", F: "bb3@2 g3@4 ~@4 g3@2 a3@3 g3", G: "f3@2 bb3@4 g3@2 a3@2 ~ f3@3 c4@2",
  H: "bb3@13 ~@3", I: "g4@2 ~@2 g4@3 ~ eb4@7 ~", J: "ab3@2 f3@4 ~@4 c4@2 d4@3 c4", K: "eb4 bb3@2 ~@2 bb3 ab3 g3",
  L: "f3 c4@2 eb3 d3 bb3@2 d4", M: "eb4@9 ~@2 g3 g3@2 ~ g3", N: "eb4@6 d4@2 ~ b3 ~@2 bb3@2 ~ ab3, ~@8 c4@2 ~ c4@2 ~@3",
  O: "g3@11 ~ gb3@2 ~ g3", P: "c4@4 b3 ~@2 c4 eb4@4 c4@4", Q: "gb4@12 ~@2 gb4 ~",
  R: "g4@6 f4@2 ~ d4 ~@2 b3@3 c4, ~@8 eb4@2 ~ c4@2 ~@3", S: "f4@9 ~ ab4@2 g4@2 ~ f4", T: "eb4@4 d4@3 c4 g4@4 d4@3 eb4",
  U: "c4@8 bb3@7 ~", V: "bb3@2 ~@2 bb3@3 ~ ab3@7 ~", W: "f3 bb3@2 g3 a3 f3@2 c4", X: "g4@3 ~ g4@4 eb4@6 ~@2",
  Y: "bb3@2 g3@3 ~@5 g3@2 ab3@2 g3@2", Z: "bb3@2 ~@2 bb3@4 ab3@7 ~", AA: "eb4@13 ~@3",
})).s("gm_brass_section").gain(0.45)

// chords · clarinet · "Woodwind / Clarinet"
const clarinet = note(`<
  A B C D E F G H A B C E H I J K L M N O P Q R S T U V W X F Y X T U Z AA D AB J K A B Z E H F Y AA T U Z AC D K AD AE
  L AF P AG N AH AI S A B AB W X F AJ X A B Z W E AE AK V AL AM
>`.pickRestart({
  A: "~@2 [g4,eb5] f5 [eb5,g5] ~ [eb5,g5] ~@3 [eb5,g5] ~@3 [eb5,g5] ~, ~@3 bb4@2 ~@11", // Cm Eb
  B: "~@2 [g4,eb5] f5 [eb5,g5] ~ [eb5,g5] ~@3 [g5,bb5] ~ [g5,bb5] [ab5,c6] [g5,bb5] ~, ~@3 bb4@2 ~@11", // Cm Eb Gm Ab Gm
  C: "~@2 [g5,bb5] ~@3 [g5,bb5] ~@3 [g5,bb5] [gb5,a5] [g5,bb5] ~@3", // Gm Gbm Gm
  D: "~@2 [bb3,d4] [c4,eb4] [d4,f4] ~ [f4,bb4]@2 ~@2 bb4 f5 [f5,bb5] ~ [d5,f5]@2, ~@5 d5 ~@2", // Bb Cm Dm Bb5 Dm
  E: "~@2 d4 bb4 [bb4,d5] ~ [bb4,d5] ~@3 [bb4,d5] ~@3 [bb4,d5] ~, ~ f4 ~@6", // Bb
  F: "[bb4,eb5]@5 ~ [eb5,g5]@2 ~@2 [bb4,eb5]@2 ~@2 [bb4,db5]@2", // Eb5 Eb Eb5 Bbm
  G: "[bb4,d5]@5 ~ [d5,f5]@2 [c6,eb6] d6 [a5,c6] bb5 [f5,a5] ~ [a5,c6] ~, ~@9 bb5@2 g5@2 ~@3", // Bb Dm Cm Am F Am
  H: "~@2 f5 g5 [f5,g5] f5 [f5,g5]!7 g5 [f5,g5]!2, ~ d5@7", // Fsus2
  I: "~@2 g4 eb5 [eb5,g5] ~ [eb5,g5] ~@3 [eb5,g5] ~@3 [eb5,g5] ~, ~ bb4 ~@6", // Eb
  J: "[c5,eb5]@5 ~ [eb5,f5]@2 ~@2 [d6,f6] [db6,e6] [d6,f6] ~@3", // Cm Ebsus2 Dm Dbm Dm
  K: "~@2 bb5 c6 [bb5,c6] bb5 [bb5,c6]!7 c6 [bb5,c6]!2, ~ g5@7", L: "[c5,eb5]@5 ~ [eb5,g5]@2 [eb5,ab5]@5 ~ [ab5,c6]@2",
  M: "~@2 [c4,eb4] [d4,f4] [eb4,g4] ~ [g4,c5]@2 ~@2 c5 g5 [g5,c6] ~ [eb5,g5]@2, ~@5 eb5 ~@2", // Cm Dm Eb C5 Eb
  N: "~@2 eb4 c5 [c5,eb5] ~ [c5,eb5] ~@3 [c5,eb5] ~@3 [c5,eb5] ~, ~ g4 ~@6", // Cm
  O: "~@2 [eb4,gb4] [f4,ab4] [gb4,a4] ~ [a4,eb5]@2 ~@2 eb5 a5 [a5,eb6] ~ [gb5,a5]@2, ~@5 gb5 ~@2", // Ebm Fm Gbm Adim Gbm
  P: "[c5,eb5]@3 ~ [g5,c6]@4 [eb5,g5]@4 [c5,eb5]@4", Q: "~@2 c6 d6 [c6,d6] c6 [c6,d6]!7 d6 [c6,d6]!2, ~ ab5@7",
  R: "[c5,eb5]@5 ~ [eb5,g5]@2 ~@2 [b5,d6] [bb5,db6] [b5,d6] ~@3", // Cm Eb Bm Bbm Bm
  S: "~@2 [eb5,g5] [eb5,gb5] [eb5,g5] ~@5 [d6,f6] [db6,e6] [d6,f6] ~@3", // Eb Ebm Eb Dm Dbm Dm
  T: "~@2 [g5,bb5] ~@3 [g5,bb5] ~@3 [g5,bb5] [gb5,a5] [g5,bb5] [gb5,a5] [g5,bb5] ~", // Gm Gbm Gm Gbm Gm
  U: "~@2 [g5,bb5] ~@3 [g5,bb5]@2 ~@2 [g5,bb5] [gb5,a5] [g5,bb5] [gb5,a5] g5@2, ~@14 bb5 ~", // Gm Gbm Gm Gbm
  V: "[eb5,g5]@3 ~ [bb5,eb6]@4 [g5,bb5]@4 [eb5,g5]@4", // Eb Eb5 Gm Eb
  W: "~@2 [f5,ab5] [eb5,g5] [d5,f5] ~ [d5,f5] [c5,eb5] [bb4,d5] ~ [bb4,d5] [ab4,c5] [bb4,d5] ~ [d5,f5]@2", // Fm Eb Dm Cm Bb Ab Bb Dm
  X: "[bb4,d5]@3 ~ [f5,ab5]@4 [d5,f5]@4 [bb4,d5]@4", // Bb Fm Dm Bb
  Y: "[bb4,d5]@5 ~ [d5,f5]@2 [c6,eb6]@3 [bb5,d6] [a5,c6] ~ [f5,a5] ~", // Bb Dm Cm Bb Am F
  Z: "~@2 [eb5,g5]@3 ~ [g5,bb5] ~ [bb5,eb6]@2 ~ c6 [g5,bb5] ~ [eb5,g5] ~, ~@5 d6 ~@2", // Eb Gm Eb5 Gm Eb
  AA: "[bb4,d5] ~ [d4,bb4]@4 [bb4,d5]@2 [d5,f5]@3 ~ [f5,bb5]@4", // Bb Gm Bb Dm Bb5
  AB: "~@2 [eb4,g4] [f4,ab4] [g4,bb4] ~ [bb4,eb5]@2 ~@2 eb5 bb5 [bb5,eb6] ~ [g5,bb5]@2, ~@5 g5 ~@2", // Eb Fm Gm Eb5 Gm
  AC: "~@2 f6 g6 [f6,g6] f6 [f6,g6]!7 g6 [f6,g6]!2, ~ d6@7", AD: "[c5,eb5]@5 ~ [eb5,f5]@2 [bb4,d5]@5 ~ [d5,f5]@2",
  AE: "[eb5,g5] ~ [g4,eb5]@4 [eb5,g5]@2 [g5,bb5]@3 ~ [bb5,eb6]@4", // Eb Cm Eb Gm Eb5
  AF: "~@2 g5 ab5 [g5,ab5] g5 [g5,ab5]!7 ab5 [g5,ab5]!2, ~ eb5@7", // Abmaj7
  AG: "[eb5,gb5] ~ [gb4,eb5]@4 [eb5,gb5]@2 [gb5,a5]@3 ~ [a5,eb6]@4", // Ebm Gbm Adim
  AH: "[f5,ab5] ~ [ab4,f5]@4 [f5,ab5]@2 [ab5,c6]@3 ~ [c6,f6]@4", // Fm Db Fm Ab F5
  AI: "~@2 [eb5,g5] [eb5,gb5] [eb5,g5] ~@5 [b5,d6] [bb5,db6] [b5,d6] ~@3", // Eb Ebm Eb Bm Bbm Bm
  AJ: "[bb4,d5]@5 ~ [d5,f5]@2 ~@2 [a5,c6] [ab5,b5] [a5,c6] ~@3", // Bb Dm Am Abm Am
  AK: "~@2 [ab5,c6] [ab5,b5] [ab5,c6] ~@5 [d6,f6] [db6,e6] [d6,f6] ~@3", // Ab Abm Ab Dm Dbm Dm
  AL: "bb5 [bb5,c6] c6 [bb5,c6] bb5 [bb5,c6] c6 [bb5,c6] bb5 [bb5,c6] c6 [bb5,c6] bb5 [bb5,c6] c6 [bb5,c6], g5", // Bbsus2
  AM: "[g5,eb6]@4 [bb5,g6]@4 [g5,eb6]@5 ~@3", // Cm Eb Cm
})).s("gm_clarinet").gain(0.16)

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

// drums · snare
const snare = s("sd").struct(`<
  A B A C A B A D E F E F E F E G E F E F E F E H A B A B A B A I E F E H E F E G A B A C A B A I E F E H E F E G E F E
  H E F E H A B A C A B A I E F E H E F E H E J
>`.pickRestart({
  A: "x ~@3 x ~@3 x ~@3 x ~ x!2", B: "x ~ x!7 ~@3 x ~ x!2", C: "x ~@3 x ~@2 x!2 ~ x!6",
  D: "x ~@3 x ~@3 x ~ x ~ x ~ x!2", E: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x!2", F: "x ~ x!5 ~ x!3 ~@2 x!3",
  G: "x ~ x ~ x ~ x ~ x ~ x!6", H: "x ~ x ~ x ~ x!3 ~ x!6", I: "x ~@3 x ~@3 x ~ x!6", J: "x ~ x!7 ~@7",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct(`<
  A B A C A B A@3 D A D A D A@3 D A D A D A D A B A B A B A@3 D A D A D A@3 B A C A B A@3 D A D A D A@3 D A D A D A D A
  B A C A B A@3 D A D A D A D A@2
>`.pickRestart({
  A: "x!2", B: "x!4", C: "x!2 ~ x!2 ~ x ~", D: "x ~ x ~@3 x!3 ~@7",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<A@7 B A@15 C A@11 C A@15 C A@7 C A@3 C A@11 C A@3 C A D>".pickRestart({
  A: "x", B: "x!2 ~@2", C: "x ~@2 x", D: "x!3 ~",
})).gain(0.3)

stack(bass, brass_section, brass_section_2, clarinet, kick, snare, low_tom, crash)

More by Annie Cordy