Strudelify

Let Me Be Your Fantasy

Baby D

KeyB minorTempo135 bpm
0:00/0:00
// Let Me Be Your Fantasy — Baby D
// 135 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(135/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 · "A.PIANO 2"
const piano = note(`<
  ~@12 A@2 B C D@2 E F G@2 H@2 I@2 J@2 A@2 B C D@2 E F A@2 B C D@2 E F A@2 B C D@2 E F ~@8 A@2 B C D@2 E F A@2 B C D@2 E
  F A@2 B C D@2 E F A@2 B C D@2 E F ~@4 G@2 H@2 I@2 J@2 A@2 B C D@2 E F A@2 B C D@2 E F A@2 B C D@2 E F ~
>`.pickRestart({
  A: "[[e3,e4,f#4,g4,b4]@9 ~ [e3,e4,f#4,g4,b4] ~@3 [d3,d4,f#4,a4,b4]@13 ~ [d3,d4,f#4,a4,b4]@3 ~]/2", // Em Bm7
  B: "[b2,b3,d4,f#4,a4]@10 [b2,b3,d4,f#4,a4]@3 ~ [a2,g3,a3,c4,e4]@2", // Bm7 Am7
  C: "~@2 [a2,g3,a3,c4,e4] ~ [a2,g3,a3,c4,e4]@8 a2@2 [g3,a3,c4,e4] ~", // Am7
  D: "[e2@4 ~@2 [e4,f#4,g4,b4]@2 ~@2 [e4,f#4,g4,b4] ~@3 [d3,d4,e4,f#4,a4,b4]@13 ~ [d3,d4,e4,f#4,a4,b4]@3 ~, ~@2 e3@2 ~ e3 ~@10]/2", // Em Bm7
  E: "[b2,b3,d4,f#4,a4]@5 ~ [b2,b3,d4,f#4,a4]@2 ~@2 [b2,b3,d4,f#4,a4]@2 ~@2 [a2,g3,a3,c4,e4]@2", // Bm7 Am7
  F: "~@2 [a2,g3,a3,c4,e4] ~ [a2,g3,a3,c4,e4]@5 ~ a2@2 e3@2 [g3,a3,c4,e4] ~", // Am7
  G: "[[e3,e4,f#4,g4,b4]@9 ~ [e3,e4,f#4,g4,b4] ~@3 [d3,d4,f#4,a4,b4]@13 ~ [d3,d4,f#4,a4,b4]@3 ~, e2@5 ~@2 d2@8 ~]/2", // Em Bm7
  H: "[[b2,b3,d4,f#4,a4]@10 [b2,b3,d4,f#4,a4]@3 ~ [a2,g3,a3,c4,e4]@2 ~@2 [a2,g3,a3,c4,e4] ~ [a2,g3,a3,c4,e4]@8 a2@2 [g3,a3,c4,e4] ~, b1@6 ~ a1@8 ~]/2", // Bm7 Am7
  I: "[~@6 [e4,f#4,g4,b4]@2 ~@2 [e4,f#4,g4,b4] ~@3 [d3,d4,e4,f#4,a4,b4]@13 ~ [d3,d4,e4,f#4,a4,b4]@3 ~, e2@13 ~ d2@17 ~, ~@2 e3@2 ~ e3 ~@10]/2", // Em Bm7
  J: "[[b2,b3,d4,f#4,a4]@5 ~ [b2,b3,d4,f#4,a4]@2 ~@2 [b2,b3,d4,f#4,a4]@2 ~@2 [a2,g3,a3,c4,e4]@2 ~@2 [a2,g3,a3,c4,e4] ~ [a2,g3,a3,c4,e4]@5 ~ a2@2 e3@2 [g3,a3,c4,e4] ~, b1@6 ~ a1@8 ~]/2", // Bm7 Am7
})).s("gm_piano").gain(0.3).pan(0.6)

// bass · synth bass 2 · "SYNBASS 2"
const bass = note(`<
  ~@12 A B C D E B C D ~@8 A B C D E B C D A B C D E B C D A B C D E B C D ~@8 A B C D E B C D A B C D E B C D A B C D E
  B C D A B C D E B C D ~@12 A B C D E B C D A B C D E B C D A B C D E B C D ~
>`.pickRestart({
  A: "e1@2 e1@8 b1 e1 b1 b1@3", B: "f#1@2 b1@2 b1@2 b1@2 b1@2 b1 f#1 b1 b1@3", C: "f#1@2 f#1@8 b1 f#1 b1 b1@3",
  D: "g1@2 c2@2 c2@2 c2@2 c2@2 c2 g1 c2!2 c2@2", E: "e1@2 g1@8 b1 e1 b1 b1@3",
})).s("gm_synth_bass_2").gain(0.4)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@16 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@16 A@2 B@2 A@2 B@2 A@2
  B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~
>`.pickRestart({
  A: "[[e4,f#4,g4,b4]@14 [d4,f#4,a4,b4]@17 ~]/2", B: "[[b3,d4,f#4,a4]@14 [g3,a3,c4,e4]@17 ~]/2",
})).s("gm_synth_strings_1").gain(0.18).pan(0.6)

// other · trumpet
const trumpet = note("<~@12 A ~ B ~@81 C@2 ~ D C@2 ~ D C@2 ~ D ~@21>".pickRestart({
  A: "~ [f#3,f#4]@2 ~", B: "~@7 [f#3,f#4]@5 ~@4", C: "[~@17 [d#3,d#4]@11 ~@4, ~@2 [g3,g4]@3 ~@3]/2", D: "[g3,g4]@5 ~@3",
})).s("gm_trumpet").gain(0.12).pan(0.6)

// chords · marimba · B5 E5 B7 Bsus4 F#m7 B7 E5 F#m …
const marimba = note(`<
  ~@4
  [[b4,f#5] b4 [b4,e5,b5] b4 [f#4,b4,f#5,a5] b4 [b4,e5,f#5,b5] b4 [f#4,b4,e5,a5,b5] b4 [f#4,b4,f#5,a5] b4 [b4,e5,b5] b4 [f#4,a5] ~]!3
  [[b4,f#5] b4 [b4,e5,b5] b4 [f#4,b4,f#5,a5] b4 [b4,e5,f#5,b5] b4 [f#4,b4,e5,a5,b5] b4 [f#4,b4,f#5,a5] b4 ~ [b4,e5,b5] b4 [f#4,a5]]
  [[b4,f#5] b4 [b4,e5,b5] b4 [f#4,b4,f#5,a5] b4 [b4,e5,f#5,b5] b4 [f#4,b4,e5,a5,b5] b4 [f#4,b4,f#5,a5] b4 [b4,e5,b5] b4 [f#4,a5] ~]!3
  [[b4,e5,b5] b4 [f#4,a5] ~@13]
  ~@117
>`).s("gm_marimba").gain(0.23)

// chords · marimba · soft notes · E5 F#m E5 F#m E5 F#m
const marimba_soft = note(`<
  ~@11
  [~@4 [b4,e5,b5] b4 [f#4,a5] ~ [b4,e5,b5] b4 [f#4,a5] ~ [b4,e5,b5] b4 [f#4,a5] ~]
  ~@117
>`).s("gm_marimba").gain(0.1)

// drums · kick
const kick = s("bd").struct("<~@4 A@7 ~ B@8 ~@8 B@24 ~@8 B@32 ~@12 B@24 ~>".pickRestart({
  A: "x ~@2 x ~@4 x ~ x ~@5", B: "~ x ~ x!2 ~ x!2",
})).gain(0.4)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@4 A@7 ~ B@8 ~@8 B@24 ~@8 B@32 ~@12 B@24 ~>".pickRestart({
  A: "~@7 x ~@3 x ~@4", B: "x",
})).gain(0.2)

// drums · snare
const snare = s("sd").struct("<~@4 A@7 ~ B@8 ~@8 B@24 ~@8 B@32 ~@12 B@24 ~>".pickRestart({
  A: "~@4 x ~@2 x ~@4 x ~@2 x", B: "x ~@3 x ~@2 x ~ x!2 ~ x ~@3",
})).gain(0.15)

// drums · clap
const clap = s("cp").struct(`<
  ~@4 A@7 ~ B@7 C ~@8 B@7 C B@7 C B@7 C ~@8 B@7 C B@7 C B@7 C B@7 C ~@12 B@7 C B@7 C B@7 C ~
>`.pickRestart({
  A: "~@4 x ~@2 x ~@4 x ~@2 x", B: "x ~@3 x ~@2 x ~ x!2 ~ x ~@3", C: "x ~@3 x ~@2 x ~ x!2 ~ x!2 ~@2",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@7 ~ B@8 ~@8 B@24 ~@8 B@32 ~@12 B@24 ~>".pickRestart({
  A: "x!16", B: "x!8",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@12 A@8 ~@8 A@24 ~@8 A@32 ~@12 A@24 ~>".pickRestart({
  A: "~@7 x ~@8",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~@12 A@8 ~@8 A@24 ~@8 A@32 ~@12 A@24 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
})).gain(0.2)

// drums · shaker
const shaker = s("sh").struct("<~@4 A@7 ~ A@8 ~@8 A@24 ~@8 A@32 ~@12 A@24 ~>".pickRestart({
  A: "x!8",
})).gain(0.35)

stack(
  piano, bass, synth_strings_1, trumpet, marimba, marimba_soft, kick, kick_soft, snare, clap, hihat, open_hat,
  tambourine, shaker
)