Strudelify

On My Way in L. A.

Carmen

KeyG minorTempo121 bpm
0:00/0:00
// On My Way in L. A. — Carmen
// 121 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 138 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(121/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 · string ensemble 2 · Gm F Bb F Gm F Bb F
const string_ensemble_2 = note(`<
  ~@15
  [[d5,g5,bb5]@2 ~@2 [c5,f5,a5]@2 ~@2 [bb4,d5] ~ [c5,a5]@2 ~@4, ~@8 g5@2 f5 ~@5]
  ~@15
  [[d5,g5,bb5]@2 ~@2 [c5,f5,a5]@2 ~@2 [bb4,d5] ~ [c5,a5]@2 ~@4, ~@8 g5@2 f5 ~@5]
  ~@106
>`).s("gm_string_ensemble_2").gain(0.25)

// other · accordion
const accordion = note("<~@25 A B@2 ~@110>".pickRestart({
  A: "~@7 g4", B: "[bb4 ~ c5@2 d5@2 c5@2 bb4@2 c5@2 bb4 [bb4,c5] g4@9 ~@9]/2",
})).s("gm_accordion").gain(0.37)

// chords · pad warm
const pad_warm = note(`<
  A B C@2 A B C@2 A B C@2 A B C@2 D@2 E@2 A B A ~ A B C@2 A B C@2 D@2 E@2 A B A ~ A B C@2 A B C@2 A B C@2 A B F ~ A B
  C@2 A B C@2 D@2 E@2 D@2 E@2 D@2 E@2 A B A ~ A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A
  B C@2 A B C@2 D@2 E@2 D@2 E@2 D@2 G H@3
>`.pickRestart({
  A: "[g3,bb3,d4,f4]", B: "[g3,bb3,c4,e4]", C: "[g3,bb3,d4,f4]/2",
  D: "[[bb3,d4,f4]@14 [bb3,db4,e4]@7 ~ [g3,c4,eb4]@10]/2", E: "[[g3,bb3,d4]@31 ~]/2", F: "[g3,bb3,d4,f4]@15 ~",
  G: "[g3,bb3,d4]", H: "[[bb3,d4,e4] ~@5 [bb3,d4,e4]@38 ~@4]/3",
})).s("gm_pad_warm").gain(0.4)

// chords · trombone
const trombone = note(`<
  ~@15 A B@2 C D ~@2 E F ~@7 A B@2 C D ~@2 E G ~@22 H@2 B@2 C D B@2 C D B@2 C D ~@2 E F ~@16 I J K L I J M N I J K L I J
  M N O P Q K R S T M U V ~ W B@2 C D B@2 C D B@2 C X@3
>`.pickRestart({
  A: "~@8 g4@2 ~@2 g4@3 ~", B: "[[g4,bb4,d5]@13 ~ [g4,bb4,db5]@8 [eb4,g4,c5]@8 ~@2]/2", C: "[d4,g4,bb4]@15 ~",
  D: "[d4,g4,bb4] ~@5 [d4,g4,bb4] ~@9", E: "~@9 c4 d4 f4 g4 bb4 c5 ~",
  F: "~@2 [gb4,a4,d5]@2 [gb4,a4,d5] ~@3 [gb4,d5]@2 [gb4,a4,d5] ~@5, ~@8 a4 ~@7", // D
  G: "~@2 [gb4,a4,d5]@2 [gb4,a4,d5] ~@3 [gb4,d5]@2 ~ [gb4,a4] ~@2 [gb4,a4,d5]@2, ~@8 a4 ~@2 d5@2 ~@3", // D Gbm D
  H: "[~@2 bb4@6 g4@2 d4 ~@3 d4@6 f4@2 d4@2 c4@2 bb3 ~@5]/2", I: "g5@2 f5@2 d5@2 c5 bb4", J: "d5@2 c5@2 bb4@2 g4 f4",
  K: "g4", L: "[bb4,d5] ~@5 [g4,bb4,d5]@5 ~@5", M: "g4@15 ~", N: "[g4,bb4,d5] ~@5 [g4,bb4,d5]@5 ~@5",
  O: "~@2 c5 ~ c5@2 c5 ~ d5@2 ~@2 bb4@2 ~@2", P: "~@2 c5@2 c5@2 c5 ~ bb4@2 ~@2 g4@2 ~@2",
  Q: "~@2 c5 ~ c5 ~ c5 ~ d5@2 ~@2 bb4@3 ~", R: "~@2 c5@2 c5 ~ c5 ~ d5@2 ~@2 bb4@2 ~@2",
  S: "~@2 c5@2 c5 ~ c5 ~ bb4@2 ~@2 g4@2 ~@2", T: "~@2 c5 ~ c5 ~ c5 ~ d5@2 ~@2 bb4@2 ~@2",
  U: "[bb4,d5,g5] ~ [bb4,d5,g5] ~ [bb4,d5,g5] ~ [bb4,d5,g5]!2 ~@8", // Gm
  V: "[c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5]!2 ~ [c5,e5,g5] ~ [c5,e5,g5]!2 ~ [c5,e5,g5] ~", // C
  W: "[bb4,d5,g5]!2 ~ [bb4,d5,g5]!3 ~ [bb4,d5,g5]!3 ~ [bb4,d5,g5]!3 ~ [bb4,d5,g5]", // Gm
  X: "[[d4,g4,bb4] ~@5 [bb4,d5,a5]@38 ~@4]/3", // Gm Bbmaj7
})).s("gm_trombone").gain(0.37)

// bass · electric bass finger
const bass = note(`<
  A B C D A B C D A B C D A B C D E@2 F G A B C ~ A B C D A B C D E@2 F G A B C ~ A B C D A B C D A B C D A B C H A B C
  D A B C D E@2 F G E@2 F G E@2 F G A B C ~ A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B
  C D A B C D E@2 F G E@2 F G E@2 F I@3
>`.pickRestart({
  A: "g2@4 ~@2 g2 ~ d2@7 ~", B: "c2@4 ~@2 c2 ~ g2@6 ~@2", C: "g1@5 ~ g1 ~ d2@7 ~", D: "g1@4 ~@2 g1 ~ d2@7 ~",
  E: "[d2@5 ~ d2 ~ d2@2 a1@2 d2@2 db2@4 a1@2 db2@2 c2@3 ~ c2 ~ c2@2 bb1@2]/2", F: "g1@5 ~ g1 ~ d2@5 ~ d2@2",
  G: "g1@5 ~ g1 ~ d2@5 ~ d2 ~", H: "~@2 d2 ~ d2 ~@3 d2 ~ d2 ~@5", I: "[g1 ~@5 g1@37 ~@5]/3",
})).s("gm_electric_bass_finger").gain(0.32)

// chords · piano · Gm C5 Gm G5 F Gm F Eb
const piano = note(`<
  ~@83
  [[g5,bb5,d6] ~@3 [d5,g5,bb5]@2 ~@2 [g5,c6]@2 [d5,g5,bb5] ~@5, ~@8 eb5 ~@7]
  ~@2
  [~@8 [d5,g5] ~@3 [c5,f5,a5]@2 ~@2, ~@4 bb5 ~@3]
  [~@4 [d5,g5,bb5]@2 ~@2 [f5,a5] ~ [bb4,g5] ~@5, ~@4 c5 d5 ~@2]
  ~@50
>`).s("gm_piano").gain(0.32)

// other · trumpet
const trumpet = note("<~@112 A B C D E F G H ~@18>".pickRestart({
  A: "~@2 c5 ~ c5@2 c5 ~ d5@2 ~@2 bb4@2 ~@2", B: "~@2 c5@2 c5@2 c5 ~ bb4@2 ~@2 g4@2 ~@2",
  C: "~@2 c5 ~ c5 ~ c5 ~ d5@2 ~@2 bb4@3 ~", D: "g4", E: "~@2 c5@2 c5 ~ c5 ~ d5@2 ~@2 bb4@2 ~@2",
  F: "~@2 c5@2 c5 ~ c5 ~ bb4@2 ~@2 g4@2 ~@2", G: "~@2 c5 ~ c5 ~ c5 ~ d5@2 ~@2 bb4@2 ~@2", H: "g4@15 ~",
})).s("gm_trumpet").gain(0.42)

// chords · brass section · Bb
const brass_section = note(`<
  ~@98
  [[bb4,d5,f5]]
  [[bb4,d5,f5] ~@5 [bb4,d5,f5]@5 ~@5]
  ~@2
  [[bb4,d5,f5]@15 ~]
  [[bb4,d5,f5] ~@5 [bb4,d5,f5]@4 ~@6]
  ~@34
>`).s("gm_brass_section").gain(0.29)

// other · electric guitar clean
const electric_guitar_clean = note("<~@58 A B@2 ~@19 C D@3 C D@3 E F@3 C D@3 ~@42>".pickRestart({
  A: "~@7 g3", B: "[bb3 ~ c4@2 d4@2 c4@2 bb3@2 c4@2 bb3 [bb3,c4] g3@9 ~@9]/2", C: "~@4 f4 ~ f4 ~ f4 ~@5 e4 ~",
  D: "[e4 ~@5 d4 ~ d4@3 ~ e4@2 d4@31 ~@3]/3", E: "~@4 f4 ~ f4 ~ f4 ~@6 [f4,g4]", F: "[a4@8 g4@4 e4@2 f4@33 ~]/3",
})).s("gm_electric_guitar_clean").gain(0.48)

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

// drums · rim
const rim = s("rim").struct("<A@23 B A@15 B A@15 C A@23 B A@55 D ~@2>".pickRestart({
  A: "x!4", B: "x", C: "~ x!2 ~ x!2 ~@2", D: "x ~@2 x ~@4",
})).gain(0.31)

// drums · clap
const clap = s("cp").struct(`<
  ~@24 A@3 B A@3 B ~ C ~ D A@2 E ~@17 A@3 B A@3 B ~ C ~ D ~ C ~ D ~ C ~ D ~@49 C ~ D ~ C ~ D ~ C ~@4
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@5 x!2 ~", D: "~@3 x ~@2 x ~", E: "~ x ~@2",
})).gain(0.35)

// drums · low tom
const low_tom = s("lt").struct("<~@23 [~ x!2 ~ x!2 ~@2] ~@114>").gain(0.35)

// drums · hihat
const hihat = s("hh").struct(`<
  A@16 B C A@5 D A@8 B C A@5 E A@24 B C A@2 B C A@2 B C A@5 D A@44 B C A@2 B C A@2 B C A E ~@2
>`.pickRestart({
  A: "x!8", B: "~ x!6 ~", C: "x!3 ~ x!4", D: "x ~@6 x", E: "x",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@22 [~@9 x!7] [x!3 ~ x!2 ~@2] ~@114>").gain(0.31)

// drums · crash
const crash = s("cr").struct("<~@16 A B ~@14 A B ~@30 A B ~@2 A B ~@2 A B ~@50 A B ~@2 A B ~@2 A B ~@4>".pickRestart({
  A: "x ~@6 x", B: "~@3 x ~@4",
})).gain(0.35)

// drums · ride
const ride = s("rd").struct("<~@40 [x!8]!16 ~@82>").gain(0.24)

// drums · congas
const congas = s("conga:33").struct("<~@39 [~@2 x ~ x ~@3 x ~@2 x ~@2 x ~] ~@39 [~ x!2 ~ x!2 ~@2] ~@58>").gain(1.01)

// drums · ht
const ht = s("ht").struct("<~@105 A B C ~@12 B D ~ E ~@14>".pickRestart({
  A: "~@15 x", B: "x ~ x ~ x ~ x!2 ~@8", C: "x!3 ~@3 x!3 ~@7", D: "x ~ x ~ x ~ x!2 ~ x ~ x!2 ~ x ~",
  E: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x",
})).gain(0.31)

// drums · shaker
const shaker = s("sh").struct("<~@39 [~@2 x ~ x ~@3 x ~@2 x ~@2 x ~] ~@39 [~ x!2 ~ x!2 ~@2] ~@58>").gain(0.35)

// drums · claves
const claves = s("clave:2").struct("<~@135 [~@3 x ~@4] ~@2>").gain(1.73)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct("<~@38 [~@5 x!3] x ~@38 [~@5 x!3] x ~@58>").gain(0.4)

// drums · triangle
const triangle = s("triangles:35").struct("<~@135 [~@3 x ~@12] ~@2>").gain(2.4)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@135 [~ x ~@6] ~@2>").gain(1.19)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@135 x ~@2>").gain(2.11)

stack(
  string_ensemble_2, accordion, pad_warm, trombone, bass, piano, trumpet, brass_section, electric_guitar_clean, kick,
  rim, clap, low_tom, hihat, mid_tom, crash, ride, congas, ht, shaker, claves, woodblocks, triangle, jingle_bells,
  bell_tree
)