Strudelify

This Is Your Night

Amber

KeyA minorTempo129 bpm
0:00/0:00
// This Is Your Night — Amber
// 129 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(129/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 · "PianoBrite"
const piano = note(`<
  A B C D A B C D A B C D A B C D A B C D A B C D ~@20 A B C D A B C D A B C D A B C D ~@20 A B C D A B C D A B C D A B
  C ~@33 A B C D A B C D
>`.pickRestart({
  A: "[a3,c4,e4]@2 ~@2 [a3,c4,e4]@2 ~@2 [a3,c4,e4] ~ [a3,c4,e4]@2 ~@2 [a3,c4,f4]@2", // Am F
  B: "~@2 [a3,c4,f4]@2 ~@2 [a3,c4,f4]@2 ~@2 [a3,c4,e4] ~ [a3,c4,f4] ~ [a3,c4,e4] ~", // F Am F Am
  C: "[g3,b3,d4]@2 ~@2 [g3,b3,d4]@3 ~ [g3,b3,d4] ~ [g3,b3,d4]@3 ~ [g3,b3,e4]@2", // G Em
  D: "~@2 [g3,b3,e4]@2 ~@2 [g3,b3,e4]@3 ~ [g3,b3,d4] ~ [g3,b3,e4] ~ [g3,b3,d4] ~", // Em G Em G
})).s("gm_piano").gain(0.58)

// chords · pad halo · "HaloPad"
const pad_halo = note(`<
  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 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 ~@8 A B C D A B C D E F G H I J I F A B C D A B C D A B C D
  A B C D A B C D A B C D
>`.pickRestart({
  A: "[a4,c5,e5]@15 ~", B: "[f4,a4,c5]@15 ~", C: "[g4,b4,d5]@7 ~", D: "[e4,g4,b4]@15 ~", E: "[a3,a4]@7 ~, a2",
  F: "[f2,f3,f4]@15 ~", G: "[a2,a3,a4]", H: "[f2,f3,f4]", I: "[a2,a3,a4]@15 ~", J: "[f2,f4], f3@7 ~",
})).s("gm_pad_halo").gain(0.26)

// other · clarinet
const clarinet = note(`<
  A@2 B C A@2 B D@2 E@2 F@2 G@3 H I@3 H J@3 ~@7 K L M N O P Q R S T U@2 V@2 E@2 F@2 G@3 H W@2 X H J@3 ~@7 K Y M Y Z AA Q
  R S T U@2 V@2 E@2 F@2 G@3 H W@2 X H J@3 ~@8 A@2 B C A@2 B AB@2 E@2 F@2 AC@2 AD H W@2 X H AE@4 E@2 F@2 AF@3
>`.pickRestart({
  A: "e4!2 f4!2 g4 ~@2 d4 ~ c4 ~ c4 c4@2 ~@2", B: "e4!2 f4!2 g4 ~@2 d4 ~ c4 ~ c4!2 ~@2 d4",
  C: "~ c4 ~ c4 c4@2 ~ d4 ~ c4 ~ c4!2 ~@3", D: "[~ c4 ~ c4 c4@2 c4 ~ c4 ~ d4 ~ e4 ~ e4@8 ~@2 d4 ~ e4@3 ~ f4@2]/2",
  E: "[~@2 f4@2 e4 ~ e4 ~ d4@2 c4@3 ~ d4@7 ~ d4@2 c4 ~ c4@2 d4 ~ e4@2]/2",
  F: "[~@2 e4 ~ d4@4 c4 ~ d4@2 e4 ~ e4@9 ~ d4 ~ e4@3 ~ f4@2]/2",
  G: "[~@2 f4 ~ e4 ~ e4 ~ d4@2 a4@3 ~ g4@6 f4 ~ e4@6 d4 ~ e4@12 ~@2 a4@4]/3", H: "g4@9 ~ e4@2 f4 ~ g4@2",
  I: "[~@2 g4@2 e4@4 c4@2 a4@3 ~ g4@10 ~@2 e4 ~ f4 ~ g4@4 g4@2 a4 ~ g4@5 ~ a4@3 ~]/3",
  J: "[~@2 g4@2 e4 ~ e4@2 c4@2 a4@3 ~ g4@6 a4@2 g4@6 a4@2 g4@13 ~@5]/3", K: "~@7 e4",
  L: "a4@2 ~ g4@3 e4@2 a4@3 g4@3 e4@2", M: "a4@3 g4@3 e4@2 a4@5 ~ e4 ~", N: "a4@2 ~ g4@3 e4@2 a4@2 ~ g4@2 ~ e4@2",
  O: "a4@2 ~ g4@2 ~ a4@2 e4@2 d4@3 ~ e4 ~", P: "a4@2 ~ g4@2 ~ e4@2 a4@2 ~ g4@3 e4@2", Q: "a4@3 g4@2 ~ e4@2 a4@5 ~ e4 ~",
  R: "a4@3 g4@3 e4@2 a4@2 ~ a4@2 ~ a4@2", S: "b4 ~ b4 ~ b4@2 c5@5 ~ b4@4", T: "a4@5 g4@2 a4",
  U: "[g4@9 ~ e4@4 d4@8 ~@10]/2", V: "[~@8 c4@2 d4 ~ e4 ~ e4@8 ~@2 d4 ~ e4@3 ~ f4@2]/2",
  W: "[~@2 g4@2 e4@4 c4@2 a4@3 ~ g4@10 ~@2 e4 ~ f4 ~ g4@2]/2", X: "~@2 g4@2 a4 ~ g4@5 ~ a4@3 ~",
  Y: "a4@2 ~ g4@3 e4@2 a4@3 g4@2 ~ e4@2", Z: "a4@3 g4@2 ~ a4@2 e4@2 d4@3 ~ e4 ~",
  AA: "a4@2 ~ g4@2 ~ e4@2 a4@2 ~ g4@3 e4 ~", AB: "[~ c4 ~ c4 c4@2 ~@2 c4@2 d4 ~ e4 ~ e4@8 ~@2 d4 ~ e4@3 ~ f4@2]/2",
  AC: "[~@2 f4 ~ e4 ~ e4 ~ d4@2 a4@3 ~ g4@15 ~@3]/2", AD: "~@3 a4",
  AE: "[~@2 g4@2 e4 ~ e4@2 c4@2 a4@3 ~ g4@6 a4@2 g4@6 a4@2 ~@10 c4 ~ d4 ~ e4 ~ e4@8 ~@2 d4 ~ e4@3 ~ f4@2, ~@30 g4@13 ~@21]/4",
  AF: "[~@2 f4 ~ e4 ~ e4 ~ d4@2 a4@3 ~ g4@6 f4 ~ e4@6 d4 ~ e4@12 ~@6]/3",
})).s("gm_clarinet").gain(0.8)

// bass · synth bass 1 · "SynBass1"
const bass = note(`<
  ~@4 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 A B C D A B C D A B C D
  ~@4 A B C D A B C D A B C D A B C E A B C D A B C D A B C D A B C D A B C D A B C D F G F G H I F ~@5 A B C D A B C D
  A B C D A B C D A B C D
>`.pickRestart({
  A: "a1@2 ~@2 a1@2 ~ e2@2 ~ e2@2 ~@2 e2 ~", B: "f1@2 ~@2 f1@2 ~ c2@2 ~ c2@2 ~@2 c2 ~",
  C: "g1@2 ~@2 g1@2 ~ d2@2 ~ d2@2 ~@2 d2 ~", D: "e1@2 ~@2 e1@2 ~ b1@2 ~ b1@2 ~@2 e1@2", E: "e1 ~@7",
  F: "a1@2 ~@2 a1@2 ~ e2@2 ~ e2@2 ~@2 a1 ~", G: "f1@2 ~@2 f1@2 ~ c2@2 ~ c2@2 ~@2 f1 ~",
  H: "a1@2 ~@2 a1@2 ~ e2 ~@2 e2@2 ~@2 a1 ~", I: "f1@2 ~@2 f1@2 ~ c2@2 ~ c2 ~@3 f1 ~",
})).s("gm_synth_bass_1").gain(0.64)

// other · lead 8 bass lead · "BrasLead"
const lead_8_bass_lead = note(`<
  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 F G H E F G H 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 F G H E F G H 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 I E F G H E F G H E F E F E F E ~ A B C D A B
  C D A B C D A B C D A B C D A B C D
>`.pickRestart({
  A: "a2 a3 a2 a3 a2 a3 a2 a3 a2 a3 a2 a3 a2 a3 a2 a3", B: "f2 f3 f2 f3 f2 f3 f2 f3 f2 f3 f2 f3 f2 f3 f2 f3",
  C: "g2 g3 g2 g3 g2 g3 g2 g3 g2 g3 g2 g3 g2 g3 g2 g3", D: "e2 e3 e2 e3 e2 e3 e2 e3 e2 e3 e2 e3 e2 e3 e2 e3",
  E: "a2 a3 a2 a3 a2 a3 a2 a3", F: "f2 f3 f2 f3 f2 f3 f2 f3", G: "g2 g3 g2 g3 g2 g3 g2 g3",
  H: "e2 e3 e2 e3 e2 e3 e2 e3", I: "e2 ~@15",
})).s("gm_lead_8_bass_lead").gain(0.25)

// other · pad poly · "Polysynth"
const pad_poly = note(`<
  ~@8 A B C D A B C D A B C D A B C D E F G H E F G H ~@8 I@4 A B C D A B C D A B C D A B C D E F G H E F G H ~@8 I@4 A
  B C D A B C D A B C D A B C D ~@12 I ~ I ~ A B C D A B C D A B C D A B C D ~@8
>`.pickRestart({
  A: "e5 ~ a4 ~ c5 ~ a4 ~ e5 ~ a4 ~ c5 ~ a4 ~", B: "f5 ~ a4 ~ c5 ~ a4 ~ f5 ~ e5 ~ d5 ~ c5 ~",
  C: "d5 ~ g4 ~ b4 ~ g4 ~ d5 ~ g4 ~ b4 ~ g4 ~", D: "e5 ~ g4 ~ b4 ~ g4 ~ e5 ~ d5 ~ c5 ~ d5 ~",
  E: "[a4,c5,e5] ~@3 [a4,c5,e5] ~@2 [a4,c5,e5] ~@2 [a4,c5,e5] ~@3 [a4,c5,f5] ~", // Am F
  F: "~@2 [a4,c5,f5] ~ [a4,c5,f5] ~@2 [a4,c5,f5] ~@2 [a4,c5,f5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~", // F G
  G: "[g4,b4,d5] ~@3 [g4,b4,d5] ~@2 [g4,b4,d5] ~@2 [g4,b4,d5] ~@3 [g4,b4,e5] ~", // G Em
  H: "~@2 [g4,b4,e5] ~ [g4,b4,e5] ~@2 [g4,b4,e5] ~@2 [g4,b4,e5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~", // Em G
  I: "a5!3 g5@2 ~ e5 ~ a5!3 g5@2 ~ e5 ~",
})).s("gm_pad_poly").gain(0.54)

// chords · rock organ · "RockOrgn"
const rock_organ = note(`<
  ~@16 A ~ B ~ A ~ C ~ D E F G D E F G ~@20 A ~ B ~ A ~ C ~ D E F G D E F G ~@20 A ~ B ~ A ~ C ~ D E F G D E F G ~@16 A
  ~ B ~ A ~ C ~ D E F G D H ~@2
>`.pickRestart({
  A: "[a4,c5,e5] ~@3 [a4,c5,e5] ~@2 [a4,c5,e5] ~@2 [a4,c5,e5] ~@5", // Am
  B: "[g4,b4,d5] ~@3 [g4,b4,d5] ~@2 [g4,b4,d5] ~@2 [g4,b4,d5] ~@5", // G
  C: "[g4,b4,d5] ~@3 [b4,d5] ~@2 [g4,b4,d5] ~@2 [g4,b4,d5] ~@5, ~@2 g4 ~@5", // G Bm G
  D: "[a4,c5,e5] ~@3 [a4,c5,e5] ~@2 [a4,c5,e5] ~@2 [a4,c5,e5] ~@3 [a4,c5,f5] ~", // Am F
  E: "~@2 [a4,c5,f5] ~ [a4,c5,f5] ~@2 [a4,c5,f5] ~@2 [a4,c5,f5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~", // F G
  F: "[g4,b4,d5] ~@3 [g4,b4,d5] ~@2 [g4,b4,d5] ~@2 [g4,b4,d5] ~@3 [g4,b4,e5] ~", // G Em
  G: "~@2 [g4,b4,e5] ~ [g4,b4,e5] ~@2 [g4,b4,e5] ~@2 [g4,b4,e5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~", // Em G
  H: "~@2 [a4,c5,f5] ~ [a4,c5,f5] ~@11", // F
})).s("gm_rock_organ").gain(0.32)

// chords · rock organ · "RockOrgn" · soft notes · F G Em G
const rock_organ_soft = note(`<
  ~@133
  [~@7 [a4,c5,f5] ~@2 [a4,c5,f5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~]
  [[g4,b4,d5] ~@3 [g4,b4,d5] ~@2 [g4,b4,d5] ~@2 [g4,b4,d5] ~@3 [g4,b4,e5] ~]
  [~@2 [g4,b4,e5] ~ [g4,b4,e5] ~@2 [g4,b4,e5] ~@2 [g4,b4,e5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~]
>`).s("gm_rock_organ").gain(0.1)

// drums · kick
const kick = s("bd").struct("<~@8 A@71 B A@15 B A@15 B ~@4 A@20>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A@15 B A@7 C A@19 B A@7 B A@7 D A@11 ~ A@7 B A@7 B A@15 ~@5 A@3 B A@7 B A@8
>`.pickRestart({
  A: "~ x ~ x", B: "x ~ x ~ x ~ x ~ x!8", C: "~@4 x ~@3 x!8", D: "~@6 x ~ x!8",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@4 [x!4]!132>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@4 [~ x ~ x ~ x ~ x]!132>").gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@7 A ~@7 A ~@7 A ~@11 A ~@7 A ~@7 A ~@7 A ~@11 A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7
>`.pickRestart({
  A: "x",
})).gain(0.64)

stack(
  piano, pad_halo, clarinet, bass, lead_8_bass_lead, pad_poly, rock_organ, rock_organ_soft, kick, snare, hihat,
  open_hat, crash
)