Strudelify

La Salsa du Demon

Le Grand Orchestre du Splendid

KeyC majorTempo148 bpm
0:00/0:00
// La Salsa du Demon — Le Grand Orchestre du Splendid
// 148 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 183 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(148/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(`<
  ~@2 A B C D A B C D A B C D A B C D E F G F G H G F I J K L M N O P G H G F Q R S T U V W X U Y Z A B C D A B C D E F
  G F G H G F I J K L M N O P G H G F Q R S T U V W X U Y Z A B C D A B C D E F G F G H G F I J K L M N O P G H G F Q R
  S T U V W X U Y Z ~@40 U AA W X U AA W X U AA W X U V W AB
>`.pickRestart({
  A: "c2@2 [c4,d#4,g4] ~@3 [c4,d#4,g4] ~@3 [c4,d#4,g4] ~ d#2@2 [c4,d#4,g4] ~, ~@7 g2", // Cm
  B: "d2@2 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~ f#2@2 [a3,d4,f#4] ~, ~@7 a2", // D
  C: "g2@2 [g3,b3,d4,f4] ~@3 [g3,b3,d4,f4] ~@3 [g3,b3,d4,f4] ~ b1@2 [g3,b3,d4,f4] ~, ~@7 d2", // G7
  D: "c2@2 [c4,d#4,g4] ~@3 [c4,d#4,g4] ~@3 [c4,d#4,g4] ~@3 [c4,d#4,g4] ~", // Cm
  E: "~@2 [c4,d#4,g4] ~@3 [c4,d#4,g4] ~@3 [c4,d#4,g4] ~ g#2@2 [g2,c4,d#4,g4] ~, c2 d#2 g2 ~", // Cm
  F: "~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~ g#2@2 [b3,d4,g4] ~, g1@2 d2@2 g2@2 ~ g2", // G
  G: "~@2 [c4,d#4,g4] ~@3 [c4,d#4,g4] ~@3 [c4,d#4,g4] ~ g#2@2 [c4,d#4,g4] ~, c2@2 d#2@2 g2@2 ~ g2", // Cm
  H: "~@2 [b3,d4,f4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~ g#2@2 [b3,d4,g4] ~, g1@2 d2@2 g2@2 ~ g2", // G7 G
  I: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~ c#3@2 [c4,e4,g4] ~, c2@2 g2@2 c3@2 ~ c3", // C
  J: "~@2 [c4,e4,f4,g#4] ~@3 [c4,f4,g#4] ~@3 [c4,f4,g#4] ~ c#3@2 [c4,f4,g#4] ~, f2@2 g#2@2 c3@2 ~ c3", // Fm
  K: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~ g#2@2 [c4,e4,g4] ~, c2@2 e2@2 g2@2 ~ g2", // C
  L: "~@2 [c4,f4,g#4] ~@3 [c4,f4,g#4] ~@3 [c4,f4,g#4] ~ c#3@2 [c4,f4,g#4] ~, f2@2 g#2@2 c3@2 ~ c3", // Fm
  M: "~@2 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~ d#3@2 [a3,d4,f#4] ~, d2@2 a2@2 d3@2 ~ d3", // D
  N: "~@2 [a#3,d4,g4] ~@3 [a#3,d4,g4] ~@3 [a#3,d4,g4] ~ d#3@2 [a#3,d4,g4] ~, g2@2 a#2@2 d3@2 ~ d3", O: "d2@7 ~",
  P: "~@4 g#2@2 [g2,g3] ~ [g#2,g#3]@2 [g2,g3] ~ [g#2,g#3]@2 [g2,g3] ~, ~@4 g#3 ~@11", // G G# G G# G
  Q: "~@2 [c4,e4,f4,g#4] ~ c3@2 [c4,f4,g#4] ~ g#2@2 [c4,f4,g#4] ~ g#2@2 [c4,f4,g#4] ~, f2 ~@3", // Fm
  R: "c2@2 [c4,d#4,g4] ~ g2@2 [c4,d#4,g4] ~ d#2@2 [c4,d#4,g4] ~ d#2@2 [c4,d#4,g4] ~", // Cm
  S: "~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~ g1@2 [b3,d4,g4] ~ g1@2 [b3,d4,g4] ~, g1@5 ~@11", T: "[c2,c4,e4,g4,c5]",
  U: "c2@2 [c4,e4,g4] ~ c2@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~ e2@2 [g2,c4,e4,g4] ~", // C
  V: "f2 ~ [c4,f4,a4] ~ f2@2 [c4,f4,a4] ~ a2 ~ [c4,f4,a4] ~ c3@2 [a2,c4,f4,a4] ~", // F
  W: "g1@2 [b3,d4,g4] ~ g1@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~ b1@2 [d2,b3,d4,g4] ~", // G
  X: "c2@2 [c4,e4,g4] ~ c2@2 [c4,e4,g4] ~ e2@2 [c4,e4,g4] ~ g2@2 [c4,e4,g4] ~, ~@7 e2", // C
  Y: "f2@2 [c4,f4,a4] ~ f2@2 [c4,f4,a4] ~ a2@2 [c4,f4,a4] ~ c3@2 [a2,c4,f4,a4] ~", // F
  Z: "g2@2 [b3,d4,g4] ~ g2@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~ d3@2 [b2,b3,d4,g4] ~", // G
  AA: "f2@2 [c4,f4,a4] ~ f2@2 [c4,f4,a4] ~ a2 ~ [c4,f4,a4] ~ c3@2 [a2,c4,f4,a4] ~", AB: "[c3,c4,c5,e5,g5,c6]",
})).s("gm_piano").gain(0.17).pan(0.4)

// chords · brass section
const brass_section = note(`<
  ~@10 A B C ~ D B C E ~@7 F ~ G ~ H ~ I J K ~ L ~ F ~@3 M ~ N ~ O ~ N ~ A B C ~ A B C E ~@7 F ~ G ~ P ~ I J K ~ L ~ F
  ~@3 M ~ N ~ O ~ N ~ A B C ~ A B C E ~@7 F ~ G ~ P ~ I J K ~ L ~ F ~@3 M ~ N ~ O ~ N ~@32 Q@24 R
>`.pickRestart({
  A: "g5@14 d#5 ~", B: "f#5!2 ~ f#5@2 ~@9 d5 [d#5,f5]", C: "~@2 d5 [d#5,f5] ~@2 d5 [d#5,f5] ~@2 d5 [d#5,f5] ~@2 d#5@2",
  D: "g5@13 ~ d#5 ~", E: "~@5 [d#5,g5,c6]@3", F: "~@2 g5!4 ~ g5 ~ d5 ~ f5 d#5@2 d5 ~", G: "~@10 [g#4,c5,f5]!3 ~@3",
  H: "~@8 f5@3 e5@2 d#5@2 ~, ~ c5", I: "~@10 [a#4,d5,g5]!3 ~@3", J: "[d2,d3]@12 [d#2,d#3]@2 [d2,d3] ~",
  K: "~@4 [g4,b4,d5,g#5]@2 g5 ~ [g4,b4,d5,g#5]@2 g5 ~ [g4,b4,d5,g#5]@2 g5 ~", L: "~@10 [b4,d5,g5]!3 ~@3",
  M: "[c3,g3,c4]", N: "~@2 g4 g#4 a4 ~ c5 d5 f5 g5 ~ a5 ~@4", O: "~@2 f4 f#4 g4 ~ c5 d5 e5 f5 ~ g5 ~@4",
  P: "~@8 f5@3 e5@2 d#5@3, ~ c5", Q: "[~@14 [g5,c6]@27 ~@4 [c#5,f#5]@2 [d5,g5]@16 ~, ~@22 [c5,f5] ~@9]/4",
  R: "[c5,e5,g5,c6]@5 ~@11", // C
})).s("gm_brass_section").gain(0.27).pan(0.3)

// bass · electric bass finger
const bass = note(`<
  ~@2 A B C D E B F D A B C D E B G D H I H I H I H J K L M N O P Q R H I H J S T U V W X Y Z W AA AB A B C D E B F D H
  I H I H I H J K L M N O P Q R H I H J AC T U V W X Y Z W AA AB A B C D E B F D H I H I H I H J K L M L O P Q R H I H J
  S T U V W X Y AD W AA AB ~@4 AE AF AG AH AE AF AI AH AE AF AI AH AE AF AI AH AE AF AI AH AE AF AI AH AJ AF AI AH AE AF
  AG AH AE AF AG AH W X Y Z W X Y AD W X Y Z W X Y AK
>`.pickRestart({
  A: "c2@5 ~ c2 ~@5 d#2@2 g2@2", B: "d2 ~@5 f#2 a2", C: "g2 ~@5 b1 d2", D: "c2 ~@7", E: "c2@2 ~@4 d#2 g2",
  F: "g2@2 ~@4 g1 ~@5 b1@2 d2@2", G: "g2 ~@2 g1 ~@2 b1 d2", H: "c2@2 d#2@2 g2@2 g#2 g2", I: "g1@2 d2@2 g2@2 g#2 g2",
  J: "g1@4 d2@4 g2@4 g#2@2 g2 ~", K: "c2@2 g2@2 c3@2 c#3 c3", L: "f2@2 g#2@2 c3@2 c#3 c3", M: "c2@2 e2@2 g2@2 g#2 g2",
  N: "f2@4 g#2@4 c3@4 c#3@2 c3 ~", O: "d2@4 a2@3 ~ d3@4 d#3@2 d3@2", P: "g2@4 a#2@3 ~ d3@4 d#3@2 d3@2", Q: "d2@7 ~",
  R: "~@4 g#2@2 g2 ~ g#2@2 g2 ~ g#2@2 g2 ~", S: "f2@4 c3@4 g#2@3 ~ g#2@4", T: "c2@4 g2@4 d#2@3 ~ d#2@3 ~",
  U: "g1@5 ~@3 g1@5 ~@3", V: "c2@13 ~@3", W: "c2 ~ c2 ~@3 e2 g2", X: "f2@2 ~@2 f2@3 ~ a2@4 c3@2 a2 ~",
  Y: "g1 ~ g1 ~@3 b1 d2", Z: "c2@2 ~@2 c2@4 e2@4 g2@2 e2 ~", AA: "f2 ~ f2@2 a2@2 c3 a2",
  AB: "g2@2 ~@2 g2@2 ~@6 d3@2 b2 ~", AC: "f2@4 c3@4 g#2@3 ~ g#2@3 ~", AD: "c2 ~ c2@2 e2@2 g2 e2",
  AE: "c2@2 ~@2 c2@2 ~@2 e2@2 g2 ~@3 a2@2", AF: "~@2 f2 ~@13", AG: "g1@2 ~@2 g1@2 ~@2 b1@2 d2 ~@3 e2 ~",
  AH: "~@2 c2 ~@13", AI: "g1 ~@3 g1@2 ~@2 b1@2 d2 ~@3 e2 ~", AJ: "c2@2 ~@2 c2@2 ~@2 e2@2 g2 ~@3 a2 ~", AK: "c2",
})).s("gm_electric_bass_finger").gain(0.19)

// other · trombone
const trombone = note(`<
  ~@10 A B ~@2 C B ~ D ~@7 E ~@11 E ~@11 A B ~@2 A B ~ D ~@7 E ~@11 E ~@11 A B ~@2 A B ~ D ~@7 E ~@11 E ~@43 F G H I J G
  K I J G L ~ J G L ~ M G L ~ N O P Q
>`.pickRestart({
  A: "c4@14 g3 ~", B: "a3!2 ~ a3@2 ~@11", C: "c4@13 ~ g3 ~", D: "~@5 g3@3", E: "~@2 b3!4 ~ b3 ~ g3 ~ b3 g3@2 g3 ~",
  F: "c3@2 ~@2 c3@2 ~@2 e3@2 g3 ~@3 a3 ~", G: "~ f3 ~@6", H: "g2@2 ~@2 g2@2 ~@2 b2@2 d3@2 ~@2 e3 ~", I: "~@2 c3 ~@13",
  J: "c3@2 ~@2 c3@2 ~@2 e3@2 g3 ~@3 a3@2", K: "g2 ~ g2 ~ b2 d3 ~ e3, ~@8 c3 ~@7", L: "g2 ~ g2 ~ b2 d3 ~ e3",
  M: "c3 ~ c3 ~ e3 g3 ~ a3", N: "c3 ~@3 c3@2 ~@2 e3@2 g3 ~@3 a3@2", O: "~@2 f3 ~@13",
  P: "g2@2 ~@2 g2@2 ~@2 b2@2 ~@2 d3@2 b2 ~", Q: "c3 ~@7",
})).s("gm_trombone").gain(0.22)

// other · trumpet
const trumpet = note("<~@143 A B C D E F G@2 H I@3 J K L M ~@24>".pickRestart({
  A: "e5 ~ f5 ~ g5@2 e5 ~ f5 ~ g5 ~ e5 ~ f5 ~", B: "g5 ~ a5 ~ g5 f5 ~ e5 d5 ~ c5 b4@2 a4 g4 ~",
  C: "~@4 a5!5 ~@2 a5!3 ~ a5", D: "a5 e5 ~ a5 e5 ~ a5 g5 ~ e5 c5 ~ a4 g4@2 ~", E: "~@6 f5 a5 ~ g5 ~ f5 ~ e5 f5@2",
  F: "e5 ~@2 c5 ~ d5 ~ c5 b4@2 a4 ~ b4@2 a4@2, ~ d5 ~@6",
  G: "[~@2 d4 ~ e4 ~ f4 g4 ~ a4 ~ b4 ~ c5 ~ d5@2 e5 g5@2 e5@2 ~@8 e5 ~]/2",
  H: "g5 ~@2 e5 g5@2 e5!2 ~ g5 ~ e5 g5@2 e5 g5",
  I: "[~ a5@2 g5 ~ f5@2 e5 ~ f5@2 e5 f5@2 g5@4 ~ a5@2 g5 ~ e5 ~ g5@2 e5 ~ d5 ~ e5@2 c5@3 ~@12]/3",
  J: "a5@2 g5 ~ [f5,g5] a5 ~ g5 ~ g5 a5 ~ g5 a5 ~ g5", K: "~ f5@2 e5 ~ f5 e5 ~ d5 c5 ~ d5 ~@4",
  L: "~@2 e5 ~@2 g5 ~ e5 ~ g5 ~ e5 g5@2 e5 ~", M: "g5 e5@5 ~@2",
})).s("gm_trumpet").gain(0.29).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  A@2 B@3 C B@3 C B@3 C B@3 C D@14 E F D@7 G D@7 B@3 C B@3 C D@14 E F D@7 G D@7 B@3 C B@3 C D@14 E F D@7 G D@7 B@3 C
  B@36 D@15 ~
>`.pickRestart({
  A: "x!4", B: "~ x ~ x", C: "~@2 x ~@2 x!2 ~", D: "x!2", E: "x ~@2 x!2 ~ x!2", F: "~@3 x ~ x ~ x",
  G: "x ~@2 x ~ x ~ x",
})).gain(0.48)

// drums · rim
const rim = s("rim").struct("<~@42 A@7 ~@32 A@7 ~@32 A@7 ~@40 A@15 B>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.24)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~ A ~@31 B ~@38 B ~@38 B ~@19 C@36 ~@16>".pickRestart({
  A: "x!4 ~ x!7 ~@4", B: "~ x!3", C: "~@3 x ~@7 x ~@4",
})).gain(0.12)

// drums · hihat
const hihat = s("hh").struct("<A ~ B@16 A@15 C A@8 D@7 B@8 A@15 C A@8 D@7 B@8 A@15 C A@8 D@7 B@40 D@15 E>".pickRestart({
  A: "x!4", B: "x!16", C: "x ~ x!6", D: "x!3 ~ x!3 ~ x!3 ~ x!3 ~", E: "x",
})).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct("<~ [~@8 x ~@2 x ~@4] ~@125 x ~@55>").gain(0.42)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@18 A@14 ~@2 A@8 B@7 ~@8 A@14 ~@2 A@8 B@7 ~@8 A@14 ~@2 A@8 B@7 ~@40 B@15 ~
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@3 x ~@3 x ~@3 x ~@3 x",
})).gain(0.18)

// drums · mid tom
const mid_tom = s("mt").struct("<~ [~@5 x ~@10] ~@181>").gain(0.36)

// drums · high tom
const high_tom = s("ht").struct("<~ [~ x ~@6] ~@128 [x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2] ~@52>").gain(0.36)

// drums · tambourine
const tambourine = s("tb").struct("<~@2 A@30 ~@2 A@8 ~@7 A@22 ~@2 A@8 ~@7 A@22 ~@2 A@8 ~@7 A@55 ~>".pickRestart({
  A: "~ x ~ x",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct(`<
  ~@32 A ~@9 B ~@28 A ~@9 B ~@28 A ~@9 B ~@6 C ~@2 D E ~@3 E ~@3 E ~@3 E ~@3 E ~@3 E ~@3 E ~@3 E ~@3 E ~@3 B ~@3 B ~@3 E
  ~@3 E ~@2 E
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@2", C: "x ~@2 x", D: "~@3 x", E: "x",
})).gain(0.18)

// drums · crash · soft notes
const crash_soft = s("cr").struct(`<
  ~@2 A ~@2 B A ~@2 B A ~@2 B A ~@2 B ~@31 A ~@2 B A ~@2 B ~@31 A ~@2 B A ~@2 B ~@87
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.06)

// drums · bongos
const bongos = s("bongo:4").struct("<~@127 [x ~@2 x ~@4 x ~@2 x ~@4]!55 ~>").gain(0.63)

// drums · bongos · soft notes
const bongos_soft = s("bongo:4").struct("<~@127 [~ x ~@3 x ~@2]!55 ~>").gain(0.47)

// drums · congas
const congas = s("conga:13").struct("<~@49 A B A B A B A B ~@31 A B A B A B A B ~@87>".pickRestart({
  A: "~@8 x ~@2 x ~@4", B: "~@9 x ~ x ~@4",
})).gain(0.96)

// drums · congas
const congas_2 = s("conga:18").struct("<~@49 A B A B A B A B ~@31 A B A B A B A B ~@87>".pickRestart({
  A: "x ~ x ~@6 x ~@2 x ~@3", B: "x ~ x ~@10 x ~@2",
})).gain(0.96)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  ~@49 A@8 ~@31 A@8 ~@31 B@7 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 ~
>`.pickRestart({
  A: "~@4 x ~@2 x ~@6 x ~", B: "~@3 x ~@3 x", C: "~@3 x ~@4",
})).gain(0.96)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@131 [x ~ x ~@4 x!3 ~ x ~@4]!51 ~>").gain(1.15)

// drums · agogo bells · soft notes
const agogo_bells_soft = s("agogo:2").struct("<~@131 [~@7 x]!51 ~>").gain(0.77)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct("<~@6 A@12 ~@31 A@8 ~@31 A@8 ~@35 B@51 ~>".pickRestart({
// … 13 more lines