Strudelify

Emporte-moi

Alain Barriere

KeyA minorTempo86 bpm
0:00/0:00
// Emporte-moi — Alain Barriere
// 86 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 66 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(86/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
const bass = note(`<
  ~ A B C D E F G H A B C D E F I J A B C D E F G H A B C D E F I K L M N O P Q R S L M N O P Q T U J A B C D E V@2 A B
  C D E F W@2 ~
>`.pickRestart({
  A: "d2 ~ d2@4 ~ d2!2 ~ d2@3 ~ d2@2", B: "g2 ~ g2@4 ~ g2!2 ~ g2@4 b1@2", C: "c2 ~ c2@4 ~ c2!2 ~ c2@3 ~ c2@2",
  D: "f2 ~ f2@4 ~ f2!2 ~ f2@4 a1@2", E: "b1 ~ b1@4 ~ b1!2 ~ b1@3 ~ b1@2", F: "e1 ~ e1@4 ~ e1!2 b1 e2@2 b1@2 e1@2",
  G: "a1 ~ a1@4 ~ a1 e2 ~ e2@4 e1@2", H: "a1 ~ a1@4 ~ a1!2 ~ a1@3 ~ a1@2", I: "a1 ~ a1@4 ~ a1 d2 ~ d2@3 ~ d2@2",
  J: "a1 ~@15", K: "a1 ~ a1@5 a1!3 b1!2 c2!2 c#2!2", L: "d2 ~ d2@2 d3@2 ~ d3 a2 c3 d3@2 a2@2 d2@2",
  M: "g1 ~ g1@2 g2@2 ~ g2 d2 f2 g2@2 d2@2 g1@2", N: "c2 ~ c2@2 c3@2 ~ c3 g2 b2 c3@2 g2@2 c2@2",
  O: "f2 ~ f2@2 f3@2 ~ f3 c3 e3 f3@2 c3@2 f2@2, ~@4 g3 ~@11", P: "b1 ~ b1@2 b2@2 ~ b2 f2 a2 b2@2 f2@2 b1@2",
  Q: "e2 ~ e2@2 e3@2 ~ e3 b2 d3 e3@2 b2@2 e2@2", R: "a1 ~ a1@2 a2@2 ~ a2 e2 g2 a2@2 e2@2 c2@2",
  S: "a1 a2 a1@2 b1 b2 b1@2 c2 c3 c2@2 c#2 c#3 c#2@2", T: "a1 ~ a1@2 a2@2 ~ a2 e2 g2 a2@2 e2@2 a1@2",
  U: "e1@2 b1@3 d2 e2 b1 d2 e2@2 b1 e1@2 b1@2", V: "[e1@5 ~@3]/2", W: "a1/2",
})).s("gm_fretless_bass").gain(0.46)

// chords · piano
const piano = note(`<
  A B@2 C@2 D@2 E@2 F@2 C@2 D@2 G H I J K L M N O P Q R S T U V W X Y Z@2 AA AB AC AD AE Y Z@2 AA AB AC AF AG AH Q R S T
  U AI@2 B@2 C@2 D@2 AJ@2 ~
>`.pickRestart({
  A: "~ [a4,a5] [c5,c6] [a4,a5]", B: "[[f4,f5]@20 [g4,g5] [a4,a5] [b4,b5] [a4,a5] [g4,g5]@6 [d4,d5]@2]/2",
  C: "[[e4,e5]@22 [f4,f5] [g4,g5] [a4,a5] [g4,g5] [f4,f5]@4 [c4,c5]@2]/2", // E F G A G F C
  D: "[[d4,d5]@10 [e4,e5] [f4,f5] [e4,e5]@2 [d4,d5]@2]/2", E: "[[e4,e5]@5 [a4,a5] [c5,c6] [a4,a5]]/2",
  F: "[[f4,f5]@20 [g4,g5] [a4,a5] [b4,b5] [a4,a5] [g4,g5]@6 [d4,d5]@2, a5 ~@31]/2", // F G A B A G D
  G: "[a4,a5] [e4,e5] [c4,c5] [e4,e5] [f4,f5] [d4,d5] [a3,a4] [f4,f5]", H: "[a3,a4,c5,e5] ~@15",
  I: "~@2 [f4,f5] [g4,g5] [a4,a5]@2 [c5,c6]@2", J: "[b4,b5] [a4,a5] ~@8 d5@3 ~ d5@2, ~ [b4,b5]@7",
  K: "~ [e4,e5] [g4,g5] [b4,b5]", L: "[a4,a5] [g4,g5] ~@8 c5@3 ~ c5@2, ~ [a4,a5]@7",
  M: "[d4,d5]@2 [d4,d5] [a3,a4] [f4,f5] [d4,d5] [a4,a5] [f4,f5]", // D A F D A F
  N: "[g#4,g#5] [f#4,f#5] [g#4,g#5]@2 [e4,e5]@2 [g#4,g#5]@2 [b3,b4]@2 [e4,e5]@2 [g#3,g#4]@2 [b3,b4]@2", // G# F# G# E G# B E G# …
  O: "~ [e3,e4] [d4,d5] [c4,c5] [b3,b4] ~ [e4,e5] [a4,a5], ~@5 [a3,a4]@2 ~", P: "[e5,a5,c6]",
  Q: "~@7 a4, d4, ~ f4@2 f4@3 f4@2, ~@2 a4@3 a4@2 ~, ~ d5", R: "~@7 b4, d4, ~ g4@2 g4@3 g4@2, ~@2 b4@3 b4@2 ~, ~ d5",
  S: "~@7 g4, c4, ~ e4@2 e4@3 e4@2, ~@2 g4@3 g4@2 ~, ~ b4", T: "~@7 a4, c4, ~ f4@2 f4@3 f4@2, ~@2 a4@3 a4@2 ~, ~ c5",
  U: "~@7 f4, b3, ~ d4@2 d4@3 d4@2, ~@2 f4@3 f4@2 ~, ~ a4", V: "~@7 g#4, b3, ~ e4@2 e4@3 e4@2, ~@2 g#4@3 g#4@2 ~, ~ b4",
  W: "~@3 e4 ~@3 f4, a4@2 ~ a3, ~ e4@2 ~ f4@3 ~, ~@2 c4@2 ~ d4@3",
  X: "~@6 c5 e5, e4@8 e4@7 ~, ~@2 c4@4 c4@9 ~, ~@4 a3@11 ~, ~@10 a4@5 ~",
  Y: "[a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~", // Am
  Z: "[g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~", // G
  AA: "[f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~", // F
  AB: "[a5,b5,d6] ~ [a5,b5,d6] ~ [a5,b5,d6] ~ [a5,b5,d6] ~ [a5,b5,d6] ~ [a5,b5,d6] ~ [a5,b5,d6] ~ [a5,b5,d6] ~", // Bm7
  AC: "[g#5,b5,d6] ~ [g#5,b5,d6] ~ [g#5,b5,d6] ~ [g#5,b5,d6] ~ [g#5,b5,d6] ~ [g#5,b5,d6] ~ [g#5,b5,d6] ~ [g#5,b5,d6] ~", // G#dim
  AD: "[e5,a5,c6] ~ [e5,a5,c6] ~ [e5,a5,c6] ~ [e5,a5,c6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~", // Am
  AE: "[c6,e6,a6] ~ [c6,e6,a6] ~ [c6,e6,a6] ~ [c6,e6,a6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~", // Am
  AF: "[e5,a5,c6] ~ [e5,a5,c6] ~ [e5,a5,c6] ~ [e5,a5,c6] ~ [e5,a5,c6] ~ [e5,a5,c6] ~ [e5,a5,c6] ~ [e5,a5,c6] ~", // Am
  AG: "[e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~", // E
  AH: "[c5,e5,a5] ~@15", AI: "[[b3,e4,g#4]@5 [a4,a5] [c5,c6] [a4,a5]]/2", AJ: "[e4,a4,c5,e5]/2",
})).s("gm_piano").gain(0.46)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A B C D E F G@2 A B C D E F G ~ A B C D E F G@2 A B C D E F G@2 A B C D E F G@2 A B C D E F G H ~ A B C D E ~@2 A B
  C D E F ~@3
>`.pickRestart({
  A: "~@4 [d5,f5,a5] ~@11", B: "~@4 [d5,g5,b5] ~@11", C: "~@4 [c5,e5,g5] ~@11", D: "~@4 [c5,f5,a5] ~@11",
  E: "~@4 [b4,d5,f5] ~@11", F: "~@4 [b4,e5,g#5] ~@11", G: "~@4 [c5,e5,a5] ~@11", H: "~@4 [e5,g#5,b5] ~@11",
})).s("gm_electric_guitar_clean").gain(0.51)

// chords · string ensemble 1
const string_ensemble_1 = note("<~ A@8 B@6 C D A@8 B@6 E@2 A@8 B@6 F@2 G H@7 A@8 ~>".pickRestart({
  A: "[[f4,a4] b4 e4 a4 d4 g#4 [c4,a4]@2, d4 c4 b3 ~, ~ g4@2 f4@2 e4@3]/8", // F
  B: "[[f4,a4] b4 e4 a4 d4 [e4,g#4], d4 c4 b3, ~ g4@2 f4@2 ~]/6", C: "[c4,e4] [d4,f4], a4", D: "c4 ~@15",
  E: "[[c4,e4] [d4,f4] [c4,e4]@2, a4]/2", F: "[[c4,a4] [b3,g#4], e4]/2", G: "[c4,a4] ~@15",
  H: "[[f4,a4]@4 b4@4 e4@4 a4@4 d4@4 [e4,g#4]@5 ~@3, d4@8 c4@8 b3@9 ~@3, ~ g4@2 f4@2 ~@2]/7", // F E
})).s("gm_string_ensemble_1").gain(0.45)

// other · brass section · A
const brass_section = note("<~@16 [[a4,a5] ~@15] ~@32 [[a4,a5] ~@15] ~@16>").s("gm_brass_section").gain(0.51)

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

// drums · snare
const snare = s("sd").struct("<~ A@15 ~ A@7 B A@7 C A@7 D A@8 ~ A@5 ~@2 A@6 ~@3>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@2 x!2 ~@7", C: "~@4 x ~@2 x!2 ~@2 x!2 ~@3", D: "~@2 x ~@3 x ~ x!4 ~@4",
})).gain(0.46)

// drums · low tom
const low_tom = s("lt").struct("<~@24 [~@11 x!2 ~@3] ~@7 [~@15 x] ~@7 [~@15 x] ~@24 x>").gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<~ A@15 ~ A@32 ~ A@5 ~@2 A@6 ~@3>".pickRestart({
  A: "x!4",
})).gain(0.46)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ A@15 ~ A@32 ~ A@5 ~@2 A@6 ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 A ~@7 B ~@7 C ~@23 C ~>".pickRestart({
  A: "~@5 x ~@2", B: "~@5 x ~ x", C: "~@15 x",
})).gain(0.41)

// drums · high tom
const high_tom = s("ht").struct("<~@32 [~@9 x ~@3 x ~@2] ~@7 [~@12 x!3 ~] ~@23 [~@15 x] ~>").gain(0.41)

// drums · splash
const splash = s("cr").struct("<~ A ~@7 A ~@6 A@2 ~@7 A ~@7 A ~@7 A ~@7 A@2 ~@4 A ~ A ~@5 A ~@2>".pickRestart({
  A: "x",
})).gain(0.46)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ A@15 ~ A@32 ~ A@5 ~@2 A@6 ~@3>".pickRestart({
  A: "x!4",
})).gain(2.34)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~ A@15 ~ A@32 ~ A@5 ~@2 A@6 ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.78)

stack(
  bass, piano, electric_guitar_clean, string_ensemble_1, brass_section, kick, snare, low_tom, hihat, hihat_soft,
  mid_tom, high_tom, splash, cabasa, cabasa_soft
)

More by Alain Barriere