Strudelify

Lucy

Alliage

KeyG minorTempo80 bpm
0:00/0:00
// Lucy — Alliage
// 80 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 77 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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(`<
  A@2 B C D E F G H F I J K L M N O P A@2 B Q A@2 B R S T U V W F G H F I J K L M N O P A@2 B Q A@2 B R S T U V W X@2 B
  Y Z@2 AA AB Z@2 AA AC Z@2 AA AB Z@2 AA AC AD
>`.pickRestart({
  A: "[[d4,f4,bb4]@4 d5@2 ~@4 f5@3 ~@7 d5@2 ~@4 f5@4 bb4@2, d5@3 ~@3 [c4,f4,a4,c5]@8 d5@6 ~@12, ~@8 [d4,f4,bb4]@3 [c4,f4,a4,c5]@4 ~]/2", // Bb F Bb F
  B: "g4@3 f4@3 g4@6 ~@3 c5, [eb3,bb3,eb4], ~@3 g4, ~@13 a4@3, ~@7 bb4", // Eb5
  C: "d5 ~ d5 [a4,c5]@2 bb4 a4 bb4, [g3,d4,g4,bb4]@3 [f3,c4,f4]@5, ~ eb5@2 ~@5", // Am Gm F5
  D: "[eb4,g4]@3 f4@3 [bb3,eb4,g4]@10, eb3, bb3@5 ~@11", // Eb
  E: "~@6 bb4@9 ~, eb3@15 ~, ~ bb3@14 ~, ~@2 eb4@13 ~, ~@3 g4@12 ~", F: "[g3,bb3,d4]", G: "[g3,bb3,eb4]@15 ~",
  H: "[a3,c4,f4]", I: "~@3 g4@5, g3, ~@3 d4@13", J: "~@6 g4@8 a4 bb4, [eb3,g3,bb3]@15 ~, ~@3 f4@12 ~",
  K: "a4@3 g4@3 a4@5 bb4 a4 g4 f4@2, [f3,a3,c4]", L: "~@3 g4@5, g3@15 ~, g4@3 ~@5, ~@3 [bb3,d4]@13",
  M: "a4@3 g4@3 ~@2 bb4@4 c5@4, [c4,f4], ~@3 a4@5", N: "bb4@3 a4@2 ~@3 g4@8, [g3,bb3,d4], g4@7 ~@9, ~@5 bb4@11",
  O: "a4@3 g4@3 ~@2 bb4@4 c5@4, [f3,a3,c4,f4], ~@3 a4@3 ~@2", // F
  P: "[g4,bb4,eb5]@3 [f4,bb4,d5]@2 [eb4,g4,bb4]@3 [bb3,eb4,g4]@8, eb3@15 ~, bb3 ~", // Eb Bb Eb
  Q: "d5 ~ d5 [a4,c5]@2 d5 c5@2, [g3,d4,g4,bb4]@3 [f3,c4,f4]@5, ~ eb5@2 ~@5", // Am Gm F5
  R: "d5 ~ d5 [a4,c5]@2 d5 c5 a4, [g3,d4,g4,bb4]@3 [f3,c4,f4]@5, ~ eb5@2 ~@5", // Am Gm F5
  S: "[ab3,c4,eb4]@3 [ab3,c4,eb4,bb4]@3 [eb4,c5]@5 eb4 ~ bb4 c5@2, c5@3 [ab3,c4]@5, ~@3 eb4", // Ab Cm Ab
  T: "[g3,bb3,d4,bb4]@2 a4 [g3,bb3,d4,g4]@2 a4 g3@4 ~@4 bb4@2, ~@6 [bb3,d4,bb4]@5 bb3@5, ~@5 g3@3, ~@3 d4, ~@13 g4@3", // Gm Bb
  U: "[f3,a3,c4]@3 [f3,a3,c4,g4]@3 a3@4 ~@4 a4@2, a4@5 ~ f3@10, ~@6 [c4,a4]@5 c4@5, ~@5 a3@3, ~@3 g4", // F
  V: "g4@3 f4@3 [bb3,eb4,g4]@10, eb3, bb3@5 ~@11", W: "bb4 ~@2 bb4@5, [g3,bb3,eb4]@15 ~, ~@2 f4@13 ~, ~@3 g4@12 ~",
  X: "[[bb3,d4,f4,bb4]@4 d5@2 ~@4 f5@3 ~@7 d5@2 ~@4 f5@4 bb4@2, d5@3 ~@3 [bb3,c4,f4,a4,c5]@8 d5@6 ~@12, ~@8 [bb3,d4,f4,bb4]@3 [bb3,c4,f4,a4,c5]@4 ~]/2", // Bb F Bb F
  Y: "d5 ~ d5 [a4,c5]@2 bb4 a4 c5, [g3,d4,g4,bb4]@3 [f3,c4,f4]@5, ~ eb5@2 ~@5", // Am Gm F5
  Z: "[[e4,g4,c5]@4 e5@2 ~@4 g5@3 ~@7 e5@2 ~@4 g5@4 c5@2, e5@3 ~@3 [d4,g4,b4,d5]@8 e5@6 ~@12, ~@8 [e4,g4,c5]@3 [d4,g4,b4,d5]@4 ~]/2", // C G C G
  AA: "a4@3 g4@3 a4@6 ~@3 d5, [f3,c4,f4], ~@3 a4, ~@13 b4@3, ~@7 c5", // F5
  AB: "e5 ~ e5 [b4,d5]@2 e5 d5@2, [a3,e4,a4,c5]@3 [g3,d4,g4]@5, ~ f5@2 ~@5", // Bm Am G5
  AC: "e5 ~ e5 [b4,d5]@2 e5 d5 b4, [a3,e4,a4,c5]@3 [g3,d4,g4]@5, ~ f5@2 ~@5", AD: "[e4,g4,c5]@5 ~@11, e5@3 ~@13",
})).s("gm_piano").gain(0.32).pan(0.3)

// bass · electric bass finger · "Basse"
const bass = note(`<
  A B C D E F G H I J G H I J K L M N A B C D A B C D O P Q E F G H I J G H I J K L M N A B C D A B C D O P Q E F ~@4 R
  S T U R V W X R S T U R V W X Y
>`.pickRestart({
  A: "bb1@3 bb1 ~@2 bb1@7 ~ g1 f1", B: "bb1@3 bb1 ~@2 bb1@8 g1 f1", C: "eb1@3 eb1 ~@2 eb1@7 ~ eb1 f1",
  D: "g1@2 ~ g1@3 f1@4 f1@2 ~ f1 g1 f1", E: "eb1@2 ~ eb1@3 eb1@6 ~@4", F: "eb1@3 eb1@2 ~ eb1@8 ~@2",
  G: "g1@3 g1 ~@2 g1@9 g1", H: "eb1@3 eb1 ~@2 eb1@9 eb1", I: "f1@3 f1 ~@2 f1@9 f1", J: "g1@3 g1 ~@2 g1@8 a1 bb1",
  K: "f1@2 ~ f1 ~@2 f1@8 a1 bb1", L: "g1@2 ~ g1@2 ~ g1@8 a1 bb1", M: "f1@2 ~ f1 ~@2 f1@8 bb1 c2",
  N: "eb2@3 d2@2 bb1@3 eb1@8", O: "ab1@2 ~ ab1@2 ~ ab1@3 ~ ab1@5 ab1", P: "g1@2 ~ g1@3 g1@3 ~ g1@4 ~ g1",
  Q: "f1@2 ~ f1@3 f1@3 ~ f1@5 f1", R: "c2@3 g1 a1 g1 c2@3 g1 a1 g1 ~@3 g1", S: "c2@3 g1 a1 g1 c2@3 g1 a1 ~ a1 g1@2 g1",
  T: "f1@2 ~ f1 d1 c1 f1@3 f1 d1 c1 c1@2 ~@2", U: "a1@2 ~ a1 ~ a1 g1@3 g1 d2 e2 d2 c2 b1 g1",
  V: "c2@3 g1 a1 g1 c2@3 g1 a1 g1@2 ~ g1 a1", W: "f1@2 ~ f1 d1 c1 f1@3 f1 ~@4 d1 c1",
  X: "a1@2 ~ a1 ~ a1 g1@3 g1 f2 g2 d2 c2 a1 g1", Y: "c2@7 ~@9",
})).s("gm_electric_bass_finger").gain(0.35)

// other · glockenspiel
const glockenspiel = note(`<
  A@3 B@2 ~@9 C D E F A@3 G@4 B@2 ~ H ~@10 C D E F A@3 G@4 B@2 ~ H ~@2 A@3 I@4 J@12 K@2
>`.pickRestart({
  A: "[~@2 d6 c6@2 f6@2 d6@3 d6 c6@2 f6@2 bb5@2 g6 a6 bb6@5]/3", B: "[d6@2 eb6 ~ d6@2 c6@3 ~ bb5@2 a5@2 bb5@12 ~@6]/2",
  C: "a6@2 g6 f6", D: "d6@15 ~", E: "[a5,f6]@2 [bb5,g6] a6", F: "[eb6,bb6]",
  G: "[d6@2 eb6 ~ d6@2 c6@3 ~ bb5@2 a5@2 ~@6 d6@2 c6@4 f6@4 d6@6 d6@2 c6@4 f6@4 bb5@4 g6@2 a6@2 bb6@10, ~@7 bb5@6 ~@19]/4",
  H: "a6@15 ~",
  I: "[d6@2 eb6 ~ d6@2 c6@3 ~ bb5@2 a5@2 ~@6 e6@2 d6@4 g6@4 e6@6 e6@2 d6@4 g6@4 c6@4 a6@2 b6@2 c7@10, ~@7 bb5@6 ~@19]/4",
  J: "[e6@2 f6 ~ e6@2 d6@3 ~ c6@2 b5@2 ~@6 e6@2 d6@4 g6@4 e6@6 e6@2 d6@4 g6@4 c6@4 a6@2 b6@2 c7@10, ~@7 c6@6 ~@19]/4",
  K: "[e6@2 f6 ~ e6@2 d6@3 ~ c6@2 b5@2 c6@12 ~@6]/2",
})).s("gm_glockenspiel").gain(0.22).pan(0.7)

// other · glockenspiel · soft notes
const glockenspiel_soft = note("<~@16 A ~@11 B C D ~@10 A ~@11 B C D ~@21>".pickRestart({
  A: "~@3 c6", B: "~ f6@15", C: "~ eb6@14 ~, g6@15 ~", D: "~@3 c6@5, g6, ~ eb6@15",
})).s("gm_glockenspiel").gain(0.13).pan(0.7)

// chords · pad halo · "HaloPad"
const pad_halo = note(`<
  A@2 B C D@2 ~@12 A@2 B C A@2 B C E F G D@2 ~@12 A@2 B C A@2 B C E F G D@2 A@2 B C H@2 I J H@2 I J H@2 I J H@2 I J K
>`.pickRestart({
  A: "[d4,f4,bb4]@3 [c4,f4,a4]@5", B: "[bb3,eb4,g4]", C: "[d4,g4,bb4]@3 [c4,f4,a4]@5", D: "[bb3,eb4,g4]/2",
  E: "[c4,eb4,ab4]", F: "[bb3,d4,g4]", G: "[a3,c4,f4]", H: "[e4,g4,c5]@3 [d4,g4,b4]@5", I: "[c4,f4,a4]",
  J: "[e4,a4,c5]@3 [d4,g4,b4]@5", K: "[e4,g4,c5]@3 ~@5",
})).s("gm_pad_halo").gain(0.22)

// other · distortion guitar · "El Gtr"
const distortion_guitar = note("<~@60 A@2 B C A@2 B C A@2 B C A@2 B C D>".pickRestart({
  A: "c3/2", B: "a2@15 ~", C: "a2@3 g2@5", D: "c3 ~@3",
})).s("gm_distortion_guitar").gain(0.31)

// chords · string ensemble 2 · "Strings2"
const string_ensemble_2 = note(`<
  ~@14 A B C D E F G H E F G H I J K L@2 M N O@2 P N Q R A B C D E F G H E F G H I J S L@2 E T@2 ~ U V W X U V W X U V W
  X U V W X Y
>`.pickRestart({
  A: "a5@2 g5 f5", B: "d5", C: "[a4,f5]@2 [bb4,g5] [c5,a5]", D: "[eb5,bb5]", E: "[d5,f5,bb5]@3 [c5,f5,a5]@5",
  F: "[d5,f5,bb5]@5 ~ [c5,f5,a5]@4 f5@5 ~", G: "[eb5,g5]", H: "[g4,g5]@3 [f4,f5]@2 [g4,g5] [bb4,bb5] [c5,c6]",
  I: "[ab4,c5,ab5]", J: "g5@2 a5 bb5, [g4,d5]", K: "a5@6 a5 bb5", L: "[bb4,eb5,g5]/2", M: "g4@5 ~ g4@2 bb4@4 d5@4",
  N: "c5 bb4", O: "[a4@11 ~ c5@12 bb4@8]/2", P: "g4@3 g4 bb4@2 d5@2", Q: "a4@2 g4 f4", R: "g4",
  S: "[f5,a5]@14 [f5,a5] [g5,bb5]", T: "[[d5,f5,bb5]@5 ~ [f5,a5]@4 f5@4 ~@2 eb5@16, ~@3 c5@4 g5@9]/2",
  U: "[e5,g5,c6]@3 [d5,g5,b5]@5", V: "[e5,g5,c6]@5 ~ [d5,g5,b5]@4 g5@5 ~", W: "[f5,a5]",
  X: "[a4,a5]@3 [g4,g5]@2 [a4,a5] [c5,c6] [d5,d6]", Y: "[e5,g5,c6]@3 ~@5",
})).s("gm_string_ensemble_2").gain(0.19).pan(0.6)

// chords · string ensemble 2 · "Strings2" · soft notes
const string_ensemble_2_soft = note(`<
  ~@20 A ~@3 A ~ B A C D@2 ~@14 A ~@3 A ~ B A C D@2 ~@2 A ~@3 E ~@3 E ~@3 E ~@3 E ~@2
>`.pickRestart({
  A: "bb4", B: "eb5@15 ~", C: "[f4,a4,c5]", D: "g4/2", E: "c5",
})).s("gm_string_ensemble_2").gain(0.13).pan(0.6)

// chords · synth strings 1 · "SynStri1"
const synth_strings_1 = note("<~@6 A B C D A B C D E F E G ~@13 A B C D A B C D E F E G ~@34>".pickRestart({
  A: "[bb3,d4,g4]@15 ~", B: "[bb3,eb4,g4]", C: "[c4,f4,a4]", D: "[bb3,d4,g4]", E: "[f3,a3,c4]", F: "[g3,bb3,d4]",
  G: "[g3,bb3,eb4]", // Eb
})).s("gm_synth_strings_1").gain(0.16)

// other · melodic tom · "RealTom"
const melodic_tom = note("<~@59 [~@2 f4!2 ~ d4!2 ~@2 f3 ~@2 d3 c3 a2 ~] ~@17>").s("gm_melodic_tom").gain(0.45).pan(0)

// other · synth drum · "SynDrum"
const synth_drum = note("<~@59 [~@2 f4!2 ~ d4!2 ~@2 f3 ~@2 d3 c3 a2 ~] [~@4 g3 ~@7 g3 ~@3]!16 ~>")
  .s("gm_synth_drum").gain(0.4).pan(0.9)

// drums · kick
const kick = s("bd").struct("<A@5 B A@11 B A@12 B A@11 B A@12 B ~@3 C A@16 D>".pickRestart({
  A: "x ~@2 x ~@2 x ~@3 x ~@4 x", B: "x ~@2 x ~@2 x ~@3 x ~@5", C: "~@15 x", D: "x",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct("<~@17 [~@12 x!4] ~@24 [~@12 x!4] ~@34>").gain(0.48)

// drums · clap
const clap = s("cp").struct("<[~@3 x]!76 ~>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<[x!7 ~]!76 x>").gain(0.32)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<[~@3 x]!5 ~ [~@3 x]!24 ~ [~@3 x]!24 ~ [~@3 x]!20 ~>").gain(0.08)

// drums · open hat
const open_hat = s("oh").struct("<[~@5 x ~@2]!5 ~ [~@5 x ~@2]!24 ~ [~@5 x ~@2]!24 ~ [~@5 x ~@2]!20 ~>").gain(0.24)

// drums · tambourine
const tambourine = s("tb").struct("<~ A ~ A ~ A@51 ~ A ~ A@17 ~>".pickRestart({
  A: "~ x ~@2",
})).gain(0.56)

// drums · crash
const crash = s("cr").struct("<~@18 A ~@3 A ~@3 A ~@16 A ~@3 A ~@3 A ~@8 A ~@3 A ~@3 A ~@3 A ~@3 A>".pickRestart({
  A: "x",
})).gain(0.48)

// drums · congas
const congas = s("conga:13").struct("<[~@11 x ~@4]!76 ~>").gain(1.54)

// drums · congas
const congas_2 = s("conga:18").struct("<[~@3 x]!76 ~>").gain(1.54)

// drums · claves
const claves = s("clave:2").struct("<[~@2 x ~@2 x ~@10]!76 ~>").gain(1.96)

// drums · triangle
const triangle = s("triangles:35").struct("<[~ x ~@6]!76 ~>").gain(2.79)

// drums · shaker
const shaker = s("sh").struct(`<
  A B A B A C A B A B A B A B A B A B A B A B A B A B A@4 C A B A B A B A B A B A B A B A B A B A B A@4 C A B A B A B A
  B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~@2 x!2 ~ x!3 ~ x!3 ~ x!3", B: "~ x!3 ~ x!3 ~ x!3 ~@2 x!2", C: "~ x!3 ~ x!3 ~ x!3 ~@4",
})).gain(0.32)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  A B A B A C A B A B A B A B A B A B A B A B A B A B A@4 C A B A B A B A B A B A B A B A B A B A B A@4 C A B A B A B A
  B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~ x ~@14", B: "~@13 x ~@2", C: "~ x",
})).gain(0.24)

stack(
  piano, bass, glockenspiel, glockenspiel_soft, pad_halo, distortion_guitar, string_ensemble_2, string_ensemble_2_soft,
  synth_strings_1, melodic_tom, synth_drum, kick, snare, clap, hihat, hihat_soft, open_hat, tambourine, crash, congas,
  congas_2, claves, triangle, shaker, shaker_soft
)

More by Alliage