Strudelify

La-Bas

Assia

KeyC minorTempo91 bpm
0:00/0:00
// La-Bas — Assia
// 91 bpm, 4/4, key C minor. 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 13 electric guitar clean (copy of ch 3 acoustic guitar nylon)
// 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(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.

// other · harpsichord
const harpsichord = note("<~@75 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B@2>".pickRestart({
  A: "[d4,d5] [bb3,bb4] [d4,d5] [bb3,bb4] [eb4,eb5] [c4,c5] [eb4,eb5] [c4,c5]", // D Bb D Bb Eb C Eb C
  B: "[f4 ~@2 f4 [c4,eb4,g4,c5]@6 ~@6, [bb3,d4] ~@3, bb4!2 ~@6, ~ f4@2 ~@13]/2", // Cm Bb
})).s("gm_harpsichord").gain(0.3)

// bass · electric bass finger
const bass = note(`<
  ~@8 A B A C A B A B A B A C A B A B A B A C A B A B D B A B A C A B A B A B A C A B A B A B A C A B A B D B E F G H E
  F I J A K A B A B A B A C A B A B A B A C L ~@6
>`.pickRestart({
  A: "c2!2 c1@2 ~@6 ab1@2 ~@4", B: "~@2 bb1 bb1@2 ~@3 c2@2 ~@2 f1 g1 bb1 g1",
  C: "~@2 bb1 bb1@2 ~@3 c2 ~ g1 ~ eb2@2 bb1 g1", D: "c2!2 c1@2 ~@6 ab1@2 ab1 ~@3", E: "bb1 ~ c2 c1 ~@5 c1 ab1@2 ~@4",
  F: "~ c1 bb1 bb1@2 ~@3 c2@2 ~@2 [eb3,f3] ~ eb3@2", G: "bb1 ~ c2 c1 ~@6 ab1@2 ~@4",
  H: "~ c1 bb1 bb1@2 ~@3 c2@2 g2@2 bb2 ~ g2@2", I: "bb1@2 c2 c1@2 ~ [eb2,f2] ~ eb2 ~ ab1@2 ~@4",
  J: "~ f1 bb1@2 ~@2 c2 ~ eb1 ~ f1 ~ g1 ~ bb1 g1", K: "~@2 bb1 bb1@2 ~@3 c2@2 g2 ~ f2@4", L: "c2!2 c1@2 ~@12",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A B A B A B A B C D C D C D C D C D C D C D C D E F E F E F E F C D C D C D C D C D C D C D C D C D E F E F E F E F C
  D ~@8 C D C D C D E F E F E F E F E F E F ~@7
>`.pickRestart({
  A: "f3 ~@2 eb3@2 ~ f3 ~ [f3,bb3] [g3,c4]@3 ~@4, c3@2 [ab2,eb4] ~, ~ g3@2 ~@13, ~@2 eb4@5 ~@9, ~@2 bb3@3 bb3@2 ~@9", // Bb5 C5 Ab5
  B: "eb4 ~@2 f3@2 ~ eb3@2 [f3,bb3,d4] ~@7, bb2@8 c3@5 ~@3, ~ d4@6 ~@9, ~@2 bb3@3 bb3@2 ~@9", // Bb
  C: "f3 ~@2 eb3@2 ~ f3 ~ [f3,bb3] [g3,c4]@3 ~@4, c3 ~, ~ g3@2 ~@13, ~@2 eb4@5 ~ eb4@4 ~@4, ~@2 bb3@3 bb3@2 ~@9", // Bb5 C5
  D: "eb4 ~@2 f3@2 ~ eb3@2 [f3,bb3,d4] ~@7, bb2 ~, ~ d4@6 ~@9, ~@2 bb3@3 bb3@2 ~@9", // Bb
  E: "f3 ~@2 eb3@2 ~ f3 ~ [f3,bb3] [g3,c4]@2 eb4 ~@4, c3 ~, ~ g3@2 ~@13, ~@2 eb4@5 ~ eb4@3 ~@5, ~@2 bb3@3 bb3@2 ~@9", // Bb5 C5
  F: "eb4 ~@2 f3@2 ~ eb3@2 [f3,bb3,d4] ~@2 [g3,eb4] ~@4, bb2 ~, ~ d4@6 ~@9, ~@2 bb3@3 bb3@2 ~@9", // Bb Cm
})).s("gm_acoustic_guitar_nylon").gain(0.3).pan(0.3)

// chords · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_2 = note(`<
  ~ A ~ A ~ A ~ A B C B C B C B C B C B C B C B C B D B E B D B E B C B C B C B C B C B C B C B C B C B D B E B D B E B
  C ~@8 B C B C B C B D B E B D B E B D B E ~@7
>`.pickRestart({
  A: "~@9 [g3,c4,eb4]@4 ~@3", B: "~@2 ab2 ~", C: "~@9 [g3,c4,eb4]@4 ~@3, ~@8 c3@5 ~@3",
  D: "~@9 [g3,c4,eb4]@2 ~@5, ~@2 c3 ~", E: "~@9 [g3,c4,eb4]@2 ~@5, ~@8 c3@3 ~@5",
})).s("gm_acoustic_guitar_nylon").gain(0.1).pan(0.3)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@24 A B A C A B A C ~ D ~@16 A B A C A B A C ~ D ~@14 A B A C A B A C A B A C A B A C E F@2
>`.pickRestart({
  A: "[c2,c3,c4]@2 [eb3,eb4] [f3,f4], ~ ab1", B: "[bb1,bb3,bb4] [c2,g3,g4]", C: "[bb1,bb3,bb4] [c2,c4,c5]",
  D: "[d5,f5,bb5]@8 [eb5,g5,c6]@7 ~", E: "c2 ab1", F: "[[bb1,d5,f5,bb5]@2 [c2,eb5,g5,c6]@3 ~@3]/2",
})).s("gm_string_ensemble_2").gain(0.25)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@16 A B A B A B A C ~@18 A B A B A B A C ~@20 A B A C ~@19>".pickRestart({
  A: "~ [eb4,bb4]!3 ~ [eb4,bb4]!2 [bb4,f5] ~@3 eb5@5", // Eb5 Bb5
  B: "~ [bb3,f4,bb4] ~ [bb3,f4,bb4] ~ [bb3,f4,bb4] ~@2 [g4,c5]@2 ~@2 [g4,c5]@2 bb4 g4", // Bb5 C5
  C: "~ [bb3,f4,bb4] ~ [bb3,f4,bb4] ~ [bb3,f4,bb4] ~@2 [g4,c5]@2 ~@2 [c4,eb4,a4]@4", // Bb5 C5 Adim
})).s("gm_electric_guitar_clean").gain(0.25).pan(0.3)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<~@16 A ~ A ~ A ~ A ~@19 A ~ A ~ A ~ A ~@21 A ~ A ~@20>".pickRestart({
  A: "~@4 [g4,eb5] ~@3", // Cm
})).s("gm_electric_guitar_clean").gain(0.1).pan(0.3)

// other · orchestral harp
const orchestral_harp = note(`<
  ~@24 A ~ A ~ A ~ A ~@19 A ~ A ~ A ~ A ~@3 B ~ B ~ B ~ B ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "~ g4 eb5 ~ d5 g4 bb4 c5 d5 eb5 bb4 c5 ~@4", B: "~@2 bb4 eb4 ~ bb4 f4 eb4 ~ bb4 f4 ~@5",
})).s("gm_orchestral_harp").gain(0.3)

// other · orchestral harp · soft notes
const orchestral_harp_soft = note(`<
  ~@24 A ~ A ~ A ~ A ~@19 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "~@3 eb5 ~@12",
})).s("gm_orchestral_harp").gain(0.2)

// other · bassoon
const bassoon = note(`<
  ~@25 A ~ B ~ A ~ B ~ C ~@17 A ~ B ~ A ~ B ~ C ~@15 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ C ~
>`.pickRestart({
  A: "bb4 g4", B: "bb4 c5", C: "bb5 c6",
})).s("gm_bassoon").gain(0.25)

// bass · electric bass finger
const bass_2 = note("<~@4 A B C@2 ~@85>".pickRestart({
  A: "c3@3 eb3 ~@2 eb3@6 ~@2 c3 ~", B: "bb2@3 bb2 ~@2 c3@4 ~@2 g2@2 bb2 g2",
  C: "[c3@3 eb3 ~@2 ab2@6 ab2@2 bb2@4 ~ eb3 d3@2 c3@4 ~@2 f1 g1 bb1 g1]/2",
})).s("gm_electric_bass_finger").gain(0.35)

// other · tubular bells
const tubular_bells = note("<~@27 A ~@25 A ~@19 A ~@3 A ~@3 A B ~@2 A B ~@6>".pickRestart({
  A: "~@3 a4", B: "f4 ~@3",
})).s("gm_tubular_bells").gain(0.35)

// drums · kick
const kick = s("bd").struct("<~@4 A@28 B ~ A@24 B ~ A@26 ~@7>".pickRestart({
  A: "x!2 ~@2 x ~@3", B: "x",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct("<~@3 [~@3 x] [~ x ~ x]!28 ~@2 [~ x ~ x]!24 ~@2 [~ x ~ x]!26 ~@7>").gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<~@4 [x!8]!28 ~@2 [x!8]!24 ~@2 [x!8]!26 ~@7>").gain(0.48)

// drums · ride
const ride = s("rd").struct(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~@3 A ~@5 A ~@3 A B ~ B A
  B ~ B A B ~ B ~@7
>`.pickRestart({
  A: "x", B: "x!4",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 [~@3 x]!82 ~@7>").gain(0.56)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct(`<
  ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~@7
>`.pickRestart({
  A: "~@10 x ~@2 x ~@2",
})).gain(0.35)

// drums · woodblocks · soft notes
const woodblocks_soft = s("woodblock:5").struct(`<
  ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~@7
>`.pickRestart({
  A: "~@7 x",
})).gain(0.12)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct("<~@16 [~@4 x!4 ~@8]!18 ~@8 [~@4 x!4 ~@8]!44 ~@7>").gain(0.35)

// drums · triangle
const triangle = s("triangles:30").struct(`<
  ~@6 A ~@5 A ~@7 A ~@7 A ~@3 A ~@5 A ~@7 A ~@7 A ~@3 A ~@5 A ~@5 A ~@7 A ~@14
>`.pickRestart({
  A: "~@3 x ~@4",
})).gain(3.48)

// drums · triangle
const triangle_2 = s("triangles:35").struct(`<
  ~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@8
>`.pickRestart({
  A: "~@3 x ~@8 x ~@3",
})).gain(3.48)

stack(
  harpsichord, bass, acoustic_guitar_nylon, acoustic_guitar_nylon_2, string_ensemble_2, electric_guitar_clean,
  electric_guitar_clean_2, orchestral_harp, orchestral_harp_soft, bassoon, bass_2, tubular_bells, kick, snare, hihat,
  ride, tambourine, woodblocks, woodblocks_soft, woodblocks_2, triangle, triangle_2
)

More by Assia