Strudelify

Le Dernier qui a parle

Amina

KeyC majorTempo91 bpm
0:00/0:00
// Le Dernier qui a parle — Amina
// 91 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 7 "SlpBass7" slap bass 1 (copy of ch 11 "SlpBas11" slap bass 1, 0.5 beats early)
// note: Full arrangement: all 74 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(91/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 · epiano1 · "Rhodes 1"
const epiano1 = note("<~@4 A B@4 C@3 ~@16 D E F G H E F@2 ~@20 D E F G H E F@2 D E D E D E D E ~@2>".pickRestart({
  A: "~ g4 c5@2 e5 c5!2 e5 a4 c5 e5!2 c5@4",
  B: "[~ g4 c5@2 e5 c5!2 e5 a4 c5 d5!2 e5!2 c5 d5@2 g4 c5@2 e5 c5!2 e5 a4 c5 f5!2 e5 c5 a4 g4@2 g4 c5@2 e5 c5!2 e5 a4 c5 f5!2 e5 c5 d5 c5@2 g4 c5@2 e5 c5!2 e5 a4 c5 e5!2 c5@4]/4",
  C: "[~ g4 c5@2 e5 c5!2 e5 a4 c5 d5!2 e5!2 c5 d5@2 g4 c5@2 e5 c5!2 e5 a4 c5 f5!2 e5 c5 a4 g4@2 g4 c5@2 e5 c5!2 e5 a4 c5 f5!2 e5 c5 d5 c5]/3",
  D: "~ [c4,e4] [d4,f4] [e4,g4]@5, c3@15 ~", E: "~ [c4,e4] [d4,f4] [e4,g4]@5, c3",
  F: "~ [d4,f4] [e4,g4] [f4,a4]@5, d3@15 ~", G: "~ [d4,f4] [e4,g4] [f4,a4]@5, d3",
  H: "~ [c4,e4] [d4,f4] [e4,g4]@5, c3@7 ~", // C Dm Em
})).s("gm_epiano1").gain(0.28)

// bass · electric bass finger · "Basse  2"
const bass = note(`<
  ~@20 A B A B A B A B C@2 D@2 C@2 D@2 A B A B A B A B E B E B E B E B E B E B C@2 D@2 C@2 D@2 E B E B E B E B ~@2
>`.pickRestart({
  A: "~@2 c2@2 ~ g2@2 f1 ~ f1 f2 ~ d2@2 g2@2", B: "~@2 c2@3 g2 ~@2 f1@2 f2@2 a1@4", C: "c1", D: "d1",
  E: "~@2 c2@3 g2@2 f1 ~ f1 f2@2 d2 ~ g2@2",
})).s("gm_electric_bass_finger").gain(0.41)

// chords · electric guitar muted · "Cocote 3"
const electric_guitar_muted = note(`<
  ~@24 A ~ B@2 A ~ A ~ A ~ A ~ A ~ A ~ C D C D C D C D C D C D C D C D E@4 F@4 E@4 F@2 G H ~@2
>`.pickRestart({
  A: "~ [c4,e4]@3, [c3,e3]@15 ~, ~@4 g3 ~@11", B: "[~@2 [g3,c4,e4] ~ [g3,c4,g4]@6 ~@6, [c3,e3]@15 ~@17]/2",
  C: "~@4 c4@4 e4@3 ~ c4 ~@3", D: "~@4 c4 ~ a3 ~@3 a3 ~ c4 ~ c4 ~", E: "[~@2 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@5 ~@5]/2",
  F: "[~@2 [d4,f4,a4]@2 ~@2 [d4,f4,a4]@5 ~@5]/2", G: "~@2 [d4,f4,a4]@2 ~@2 [d4,f4,a4] ~",
  H: "~@4 [c4,c5] ~ [c4,c5] ~ [c4,c5] ~ [c4,c5]@3 ~@3", // C
})).s("gm_electric_guitar_muted").gain(0.22).pan(0.6)

// chords · electric guitar muted · "Cocote 3" · soft notes
const electric_guitar_muted_2 = note("<~@41 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@18>".pickRestart({
  A: "a3 ~ c4 ~@5 g3 ~@7",
})).s("gm_electric_guitar_muted").gain(0.1).pan(0.6)

// chords · string ensemble 1 · "Cordes 5"
const string_ensemble_1 = note(`<
  ~@5 A@2 ~ A ~ B ~ A@7 ~ C D E@2 C D F@2 A@2 G@2 A@2 G H I@4 J@4 K D L@2 M N M N O P O P A@2 G@2 A@2 G H Q R Q S T U T
  V W@2
>`.pickRestart({
  A: "~@2 c4@5 ~", B: "~@2 [c4,g4]@5 ~", C: "g6 a6", D: "e6", E: "[c6@3 ~]/2", F: "[c6@5 e6 d6 c6]/2", G: "~@2 d4@5 ~",
  H: "~@2 c6@5 ~",
  I: "[~@2 [g4,e5] [g4,e5]@2 [g4,e5] [g4,e5]@2 [g4,e5] [a4,f5]@2 [a4,f5] [a4,f5]@2 [a4,f5] [b4,g5]@9 [a4,f5]@8 ~@2 [g4,e5] [g4,e5]@2 [g4,e5] [g4,e5]@2 [g4,e5] [a4,f5]@2 [a4,f5] [a4,f5]@2 [a4,f5] [b4,g5]@9 [a4,f5]@8, c3, ~ c5@15 ~ c5@15]/4", // C Dm Em Dm C Dm Em Dm
  J: "[e5@3 f5 e5@3 f5 ~@3 f5 e5@3 f5, [c3,c5], ~@16 g5@7 ~ c6@8]/4", K: "g6 a6, [c5,g5]@5 ~@3", L: "c6/2",
  M: "~@2 [g4,c5,e5] ~@3 [g4,c5,e5] ~@3 e5@2 f5@2 [b4,g5] ~, ~@10 c5@5 ~, ~@10 g4 ~ a4 ~@3", // C Em
  N: "~@2 [g4,c5,e5] ~@3 [g4,c5,e5] ~@3 e5@2 [a4,f5]@2 [g4,d5] ~, ~@10 c5@5 ~, ~@10 g4 ~@5", // C Dm G5
  O: "~@2 [g4,c5,e5] ~@2 [g4,c5,e5] ~@2 [g4,c5,e5] ~@2 [c5,f5]@3 [b4,g5] ~, ~@11 a4@2 ~@3", // C F5 Em
  P: "~@2 [g4,c5,e5] ~@2 [g4,c5,e5] ~@2 [g4,c5,e5] ~@2 [a4,c5,f5]@3 [g4,d5] ~", // C F G5
  Q: "[c4,c5]@2 [g4,g5] ~@3 [g4,g5] ~ [g4,g5]@2 [f4,f5] ~ [f4,f5]@2 [e4,e5] ~, [b3,b4] ~@7 [f#4,f#5] ~@3 [e4,e5] ~@3", // C G F E B F# E
  R: "[e4,e5] [f4,f5] [g4,g5] ~@3 [f4,f5] ~ [f4,f5]@2 [e4,e5] ~ [e4,e5]@2 [d4,d5] ~, ~@8 [e4,e5] ~@3 [d#4,d#5] ~@3", // E F G F E D E D#
  S: "[e4,e5] [f4,f5] [g4,g5] ~@3 [e4,e5] ~ [f4,f5] [e4,e5] [d4,d5] [c4,c5] [d4,d5]@2 [c4,c5] ~", // E F G E F E D C …
  T: "~@2 [e4,c5,e5] ~ [g4,e5,g5]@2 [e4,c5,e5] ~@2 [f4,d5,f5] ~ [f4,d5,f5] [e4,c5,e5] ~ [f4,d5,f5] ~", // C Dm C Dm
  U: "~@2 [e4,c5,e5] ~ [g4,e5,g5]@2 [e4,c5,e5] ~@2 [f4,d5,f5] ~ [f4,d5,f5] [e4,c5,e5] ~ [c4,a4,c5] ~", // C Dm C F
  V: "~@2 [e4,c5,e5] ~ [g4,e5,g5]@2 [e4,c5,e5] ~@2 [f4,d5,f5] ~ [f4,d5,f5] [e4,c5,e5] ~ [c4,a4,c5] ~, g6", // C Dm C F
  W: "[[g4,e5]@31 ~]/2", // C
})).s("gm_string_ensemble_1").gain(0.24).pan(0.3)

// other · accordion · "Accorde8"
const accordion = note("<~@40 A B C D@2 ~@29>".pickRestart({
  A: "[g4,a4] [d4,e4,g4] g4 a4 c5 d5@2 ~@6 c5 d5 e5", B: "~ f5@2 e5@2 d5@2 c5 d5@3 ~@2 [c5,d5] c5 a4, g5@2 ~@6 c#5 ~@7",
  C: "g4 a4 c5 d5@3 c5@2 e5 d5 [c5,c#5] d5@2 g4 a4 c5", // C#maj7
  D: "[[a4,c5] [g4,a4] a4 c5@2 e5 [f#5,g5] e5 g5@3 a5@4 c6@17, ~@8 f#5 ~@23]/2", // Am Gsus2 Gmaj7
})).s("gm_accordion").gain(0.38).pan(0.6)

// other · acoustic guitar steel · "Guit12C9"
const acoustic_guitar_steel = note("<A B C D E F G H@2 ~@65>".pickRestart({
  A: "a#4@5 ~@3", B: "~@4 a#4@2 ~@3 a#4@2 ~@2 a4 a#4 a4", C: "g4@9 ~@7", D: "~@7 f4 ~ f4@2 ~@2 e4@2 ~",
  E: "~ d4 ~ c4@8 ~@5", F: "~@2 a3 ~ c4@2 ~ f4 ~@2 f4@2 ~ f4 ~@2", G: "f4@2 ~@3 e4@6 ~@5",
  H: "[~@2 c4 ~@3 c4@3 ~@3 d4@16 ~@4]/2",
})).s("gm_acoustic_guitar_steel").gain(0.17).pan(0.4)

// other · slap bass 1 · "SlpBas11"
const slap_bass_1 = note(`<
  A B A C D E F G A B A C D E F G H B A C D E F G ~@16 I J I J I J I J I J I J I J I J ~@18
>`.pickRestart({
  A: "~@4 g4 ~ c5 ~@3 e5 ~ c5 ~ c5 ~", B: "e5 ~ a4 ~ c5 ~ e5 ~ e5 ~ c5 ~@5",
  C: "e5 ~ a4 ~ c5 ~ d5 ~ d5 ~ e5 ~ e5 ~ c5 ~", D: "d5 ~@3 g4 ~ c5 ~@3 e5 ~ c5 ~ c5 ~",
  E: "e5 ~ a4 ~ c5 ~ f5 ~ f5 ~ e5 ~ c5 ~ a4 ~", F: "g4 ~@3 g4 ~ c5 ~@3 e5 ~ c5 ~ c5 ~",
  G: "e5 ~ a4 ~ c5 ~ f5 ~ f5 ~ e5 ~ c5 ~ d5 ~", H: "c5 ~@3 g4 ~ c5 ~@3 e5 ~ c5 ~ c5 ~", I: "~@14 g5 ~",
  J: "g5 ~@5 g5 ~@5 g5 ~@3",
})).s("gm_lead_8_bass_lead").gain(0.19).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@20 A B A B A B A B ~@8 A B A B A B A B A B A B A@8 ~@8 A B A B A B A B ~@2
>`.pickRestart({
  A: "x ~@6 x!2 ~@7", B: "x ~@6 x ~@8",
})).gain(0.55)

// drums · rim
const rim = s("rim").struct("<~@19 [~@7 x]!8 ~@8 [~@7 x]!20 ~@8 [~@7 x]!8 ~@3>").gain(0.38)

// drums · clap
const clap = s("cp").struct("<~@55 A ~ A ~ A ~ A ~@9 A B ~>".pickRestart({
  A: "~@7 x", B: "x ~@2 x ~@2 x ~@3 x ~@5",
})).gain(0.38)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@72 [~@13 x ~@2] [~ x ~@2 x ~@3 x ~@7]>").gain(0.16)

// drums · low tom
const low_tom = s("lt").struct("<~@48 [~ x]!8 ~@18>").gain(0.38)

// drums · hihat
const hihat = s("hh").struct("<~@20 A@8 B A@4 B A@22 B A@15 ~@2>".pickRestart({
  A: "x!6 ~ x", B: "x!8",
})).gain(0.27)

// drums · ride
const ride = s("rd").struct("<~@15 A ~@4 B@8 ~@8 B@20 ~@8 B@8 ~@2>".pickRestart({
  A: "~@7 x", B: "x!4",
})).gain(0.33)

// drums · bongos
const bongos = s("bongo:4").struct("<~@12 A@4 B C B D ~@8 B C B C B@3 D ~@20 B C B C B C B D ~@10>".pickRestart({
  A: "~@5 x ~@2", B: "~@2 x ~@7 x ~@2 x ~@2", C: "~ x ~@3 x ~@2", D: "~@2 x ~@6 x!2 ~@5",
})).gain(0.72)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@12 A@4 B C B D E@8 B C B C B@3 F E@20 B C B C B C B F E@8 ~@2>".pickRestart({
  A: "~@9 x ~@6", B: "~ x ~@7 x ~@4 x ~", C: "~ x ~@7 x ~@6", D: "~ x ~@14", E: "~ x ~ x ~ x ~@2", F: "~ x ~@6 x!2 ~@6",
})).gain(0.72)

// drums · congas
const congas = s("conga:18").struct("<~@11 A@5 ~ A ~@9 A@8 ~@20 A@8 ~@8 A ~@2>".pickRestart({
  A: "~@7 x",
})).gain(1.05)

// drums · congas
const congas_2 = s("conga:33").struct("<~@19 A B@8 ~ B@4 ~ B@22 ~ B@15 ~@2>".pickRestart({
  A: "~@5 x ~@2", B: "~@3 x",
})).gain(1.05)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@12 A@8 B@8 A@8 B@20 A@8 B@7 C ~@2>".pickRestart({
  A: "x ~ x!3 ~ x ~ x!3 ~ x ~@3", B: "x!16", C: "x!2 ~ x!13",
})).gain(1.11)

stack(
  epiano1, bass, electric_guitar_muted, electric_guitar_muted_2, string_ensemble_1, accordion, acoustic_guitar_steel,
  slap_bass_1, kick, rim, clap, clap_soft, low_tom, hihat, ride, bongos, bongos_2, congas, congas_2, cabasa
)