Strudelify

First Night

Monica

KeyE majorTempo76 bpm
0:00/0:00
// First Night — Monica
// 76 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 5 "Clean Guitar" named as a guitar, played on electric guitar clean (its clavinet patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 75 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(76/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 B C D E F G H I J K L M N O P Q R C D E F G H I J ~@2 M N O P Q R C D E F G H I J S@2 T U V@2 W X Y Z AA AB G H I
  J C D E F G H I J C D E F G H I ~
>`.pickRestart({
  A: "[g3,b3,e4]@5 [g3,e4] ~ [g3,b3,e4] [g3,b3,e4]@5 [g3,b3,e4] ~ [g3,b3,e4], ~@5 b3@2 ~@9", // Em C Em
  B: "[g3,b3,e4]@3 ~ [g3,b3,e4]@3 ~ [g3,b3,e4]@3 ~ [g3,b3,e4]@4", // Em
  C: "e1 ~ e1 ~ e2 e1 ~ e2 e1 ~@2 e1 ~ e2 ~ e2, [b3,e4], g3@7 g3", // E5
  D: "~@2 a1 ~@2 a1 ~ a1 g3 ~@6 d2, [g3,a3,d4,e4]@8 [a3,c4,e4]@5 [a3,c4,e4]@3, ~@9 g3@2 g3@3 g3@2, ~@10 d2@2 d2@3 ~", // Gsus2 Am
  E: "e1 ~ e1 ~ e2 e1 ~ e2 e1 ~@2 e1 e2 ~@2 e2, [b3,e4], g3@13 ~ g3@2", // E5
  F: "g3@4 a1 ~@2 g3 ~ g3 [a3,c4] [a3,c4,e4]@2 ~ g3@2, e4@5 ~@3, [a3,d4]@8 [a3,c4]@2 ~@3 [a3,c4,e4]@3, ~@5 g3@2 ~@9, ~@3 a1 ~@4", // Am D5 Am
  G: "g3@5 ~@2 e2 e1 ~@2 e2 ~@3 e2, e4, b3@13 b3@3, ~@5 g3@7 g3@2 g3@2",
  H: "[a3,d4,e4]@8 ~ g3 ~ g3@2 [a3,c4,e4]@2 g3, g3@5 ~@3 [a3,c4,e4]@5 ~@3", // Asus4 Am
  I: "e1 ~ e1 ~ e2 e1 ~ e2 e1 ~@2 e2 g3 ~@2 g#1, [b3,e4], ~@2 g3@10 ~ g#1@2 ~, ~@7 g3", // E5
  J: "[g3,a3]@4 ~@3 a1 [g3,b3,e4] e3 [g3,b3,e4]!2 e3 [g3,b3] e3 [f#3,a3,d4], [d4,e4]@8 ~@5 e4@2 ~, a1 ~ a1 g3 ~@4, ~@5 a3@3 ~@8", // Gsus2 Em G D Dsus2
  K: "[g3,b3,e4], a3 ~@15", L: "[g3,a3,d4,e4]@4 g3@3 g3, ~ [a3,c4,e4]", M: "[g3,b3,e4]@15 g3",
  N: "[g3,a3,d4,e4]@8 g3@3 g3@2 ~ g3@2, ~@8 [a3,c4,e4]@5 [a3,c4,e4]@3", O: "[g3,b3,e4]",
  P: "[g3,a3,d4,e4]@8 g3@3 g3@2 ~ g3@2, c#4 ~@7 [a3,c4,e4]@5 [a3,c4,e4]@3", Q: "b3@13 b3@3, [g3,e4]",
  R: "g3@2 ~ g3@2 g3!2 ~ [e1,e2,b3,e4] ~ [e2,b3,e4] [g3,b3,e4]@2 [d1,e1,e2,b3] [b1,g3] [d2,a3,d4], [d4,e4]@7 g3@2 g3@2 e2 ~@4, a3@5 a3@3 ~@5 e4@2 ~", // E5 Em E7 Em D5 Dsus2
  S: "[[c3,g3]@2 ~@4 g4 d3@2 ~@6 d3 ~@2 d4 ~@3 [d3,d4] g3@2 ~@6 g3, [d4,e4,g4]@7 f#4@16 ~@2 b3@5 g4@2, c4@5 c4@2 d4@3 d3 a4 d4@2 a4@2 d3@5 a3@2 [g2,b4]@9, ~@2 g3@2 g3@3 ~@2 e4@8 a3@2 [d4,e4,a4]@4 [d4,g4]@4 d4@5, ~@3 c3@4 ~@2 a4 a3@3 d5@10 ~@3 g3@2 g4 [a4,d5]@3]/2", // C5 D Em7 G Dsus2 G5 D5
  T: "[c4,f4,g4] ~@6 f3, [f2,a4,c5]@7 c4 a3 f3 g3 [a3,c4]@2 g3@3, f3@3 f4 b3@12, g2 ~ c4@3 f3 a3 f4@9, ~@3 g4@13", // Csus4 F Am
  U: "b2@2 ~@5 b2 b3 ~@3 f#4 ~@2 b2, [a3,b3,e4]@5 [a3,b3,e4]@3 d#4@3 d#4@2 [d#4,f#4,b4]@3, ~@2 f#3@2 f#3@2 f#3@2 ~ f#3@7, ~@3 b2@4 ~ b2@6 b3@2", // Asus2 B
  V: "[c3@2 ~@4 g4 [e2,a3] ~@4 e4 ~@9 d3 ~@5 a4 [a4,b4]@2 g3, [d4,e4,g4]@7 f#4@4 d4@2 e4@3 f#4@2 d4 d3 a3 [d4,f#4]@2 [d4,g4]@4 g4@5, b3@5 b3@2 d4@3 a3@6 d5@7 ~@3 d4@6, ~@2 g3@2 g3@3 d3 a3 d3@4 a4 f#4 a4@8 ~@2 g3@3 d5@4, ~@3 c3@4 d2@16 [g2,b3]@9]/2", // A5 Asus2 Em7 D G5 G
  W: "~@6 c4!2 ~@5 a3@2 f3, [f2,a4,c5], g4@7 g4@9, f4@4 c4 f4@2 f4@2 f3@6 ~, ~@2 c4 f3@5 c4@2 a3 [c4,f4]@5", // F F5
  X: "~@2 [e3,g3] ~@10 b4@2 d#5, e2@7 b2@4 f#4 b3@4, [b3,e4,g4]@4 [b3,e4]@4 ~ a3@7, ~@3 [e3,g3]@2 [e3,g4]@3 ~@2 d#4@6, ~@3 g3 f#3@4", // Em E5 Em
  Y: "g3@14 ~ e3, [e3,b3,e4], ~@7 g3", Z: "[a2,g3,a3,d4,e4]@7 a2 ~@6 g3@2, ~ [a3,c4,e4]",
  AA: "e3@12 ~@3 e3, [g3,b3,e4]@13 [b3,e4]@3, e2@3 ~@9 e3@2 g3@2", // Em E5
  AB: "[g3,a3,d4,e4]@7 g3 ~ g3 c3 [a3,c4,e4] c3 d4 ~ c3, ~@8 [a3,c4,e4]@2 ~@3 [a3,c4,e4]@3, ~@7 g3", // Gsus2 Am
})).s("gm_piano").gain(0.35).pan(0.3)

// chords · electric guitar clean · "Clean Guitar"
const electric_guitar_clean = note(`<
  ~@3 A B C D E F G H ~@8 A B C D E F G H I J ~@6 A B C D E F G H ~@8 A B C D E F G H A B C D E F G H A B C D E F G ~
>`.pickRestart({
  A: "~@2 e2 [b2,e3] e2 [b2,e3] e2 [b2,e3] e2 [b2,e3]!3 e2 [b2,e3] e2 [b2,e3]", // E5
  B: "e2 a2 [a2,e3] e2 [a2,e3] e2 a2 [a2,e3] d2 [a2,d3] d2 a2 [a2,d3]!2 d2 [a2,d3]", // A5 D5
  C: "e2 ~ e3 [b2,e3]!2 e2 b2 [b2,e3] e2 ~ b2!2 [b2,e3]!2 e2 [b2,e3]", // E5
  D: "a1 [a2,e3]!2 ~ [a2,e3] a1 [a2,e3]!2 [a2,d3]!4 d2 [a2,d3] d2 [a2,d3]", // A5 D5
  E: "~ [b2,e3] d2 [b2,e3] e2 [b2,e3]!3 e2 b2 [b2,e3]!4 ~ [b2,e3], ~@7 e2", // E5
  F: "a1 a2 [a2,e3] a1 [a2,e3]!2 a1 [a2,e3] d2 [a2,d3]!4 [a2,d3]@2 [a2,d3]", // A5 D5
  G: "e2 [b2,e3]!2 e2 [b2,e3] e2 [b2,e3]!6 e2 [b2,e3] e2 [b2,e3]", // E5
  H: "a1 a2 [a2,e3] a1 [a2,e3]!4 e2 [b2,e3] ~ [b2,e3] e2 [b2,e3] e2 [a2,d3]", // A5 E5 D5
  I: "e2 [b2,e3] e2 [b2,e3] ~ [b2,e3]!3 e2 b2 e2 [b2,e3] e2 ~@2 [b2,e3], ~@4 e2@2 ~@7 [b2,e3]@2 ~, ~@7 e2", // E5
  J: "a1 e3 [a2,e3] a1 [a2,e3] a1 [a2,e3]!2 d2 [a2,e3] d2 ~ d2 ~ d2 e3, ~@13 [c3,e3]@3", // A5 C
})).s("gm_electric_guitar_clean").gain(0.2)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@3 A@6 B@2 C@4 D@4 A@6 B@2 C@4 D@4 A@6 B@2 E@2 F G H@2 I J ~@4 A@2 B@2 A@6 B@2 A@6 K@2
>`.pickRestart({
  A: "[b3@2 ~ d4, e4@3 ~, ~ a3]/2", B: "[b3 a3, e4@3 ~]/2", C: "[e4@7 d4]/4",
  D: "[e4@56 [e2,e3,b3,e4] ~ [e2,e3,b3,e4] [e2,d3,e3,b3,e4] ~ [e2,e3,b3,e4]@2 [d2,d3,a3,d4]]/4", // E5 E7 E5 D5
  E: "[c4@7 d4@16 g4@7 a4 b4]/2", F: "c5", G: "b4@14 f#4 b3", H: "[c4@7 d4@14 e4 f#4 g4@7 a4 g4]/2", I: "f4",
  J: "[e4,b4]@8 [b3,d#4,f#4,b4] ~@2 [b3,d#4,f#4,b4] ~@2 [b3,d#4,f#4]@2, ~@14 b4 ~", K: "[e4@3 ~, b3 ~]/2",
})).s("gm_string_ensemble_1").gain(0.3).pan(0.2)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A B C D E F G H I J K L M N O P Q R C D E F G H I J ~@2 M N O P Q R C D E F G H I J S@2 T U V W X Y ~@4 G H I J ~@2
  E F G H I J ~@2 E F G H I ~
>`.pickRestart({
  A: "e2 ~@3 e3 e2 ~ e2!2 ~@3 e3 e2 ~ e2", B: "e2 ~ e2 ~ e2 ~ e2 ~", C: "e2 ~ e2 ~ e3 e2 ~ e2!2 ~@3 e3 e2 e3 e2",
  D: "a2 ~ a2 ~ e2 a2 ~ a2 d3 ~ d3@2 e2 d3 e2 d3", E: "e3 ~ e2@2 e3 e2 ~ e2 e2@2 ~ e2 e3 ~ e2 g#2, ~@13 g#2@2 ~",
  F: "a2 ~ a2 ~ e2 a2 e2 a2 d3@2 ~@2 e2 a2 d3 e3, ~@11 d3@2 ~@3", G: "e2@2 e2 ~ e3 e2 ~ e2!2 ~@2 e2 e3 e2 e3 e2",
  H: "a2 ~ a2 ~@2 a2 ~ a2 d3 a2 d3 ~@2 d3 ~ d3", I: "e3 ~ e2@2 e3 e2 ~ e2!2 ~ e2 e3 e2 g#2@2 e2",
  J: "a2 ~ a2 ~@2 a2 ~ a2 e2 ~ e2!2 ~ e2 ~ d2",
  K: "[e1,e2] ~ [e1,e2] ~ e3 [e1,e2] ~ e3 [e1,e2] ~ e1 [e1,e2] e3 c#3@2 e2", // E
  L: "d3 a2 e2 a1 ~ a2 a1!2 d2 ~@2 [a2,d3] d2 ~ d2 b1, ~@13 [a2,d3]@2 ~", // D5
  M: "[e1,e2] ~ [e1,e2] ~ [b2,e3] [e1,e2] ~ e3 [e1,e2] ~ e1 e3 e2 c#3@2 e2", // E E5 E
  N: "d3 ~ a2 a1 ~ a1 a2 a1 d2 d3 a2 d2 d1 [a2,d3]@2 d2", // D5
  O: "[e1,e2] ~ [e1,e2] ~ e3 [e1,e2] ~ e3 [e1,e2] ~ e1 e3 [e1,e2] c#3@2 e2", // E
  P: "d3 ~ a1 ~ a1 [e2,a2] ~ a1 d2 d3 a2 d2 d1 [a2,d3]@2 d2", // A5 D5
  Q: "[e1,e2] ~ e2@2 e3 [e1,e2] ~ e3 e2@2 ~ e3 e2 c#3@2 e2, ~@2 e1 ~@5 e1 ~@7", // E
  R: "d3 a1 a2 ~ a1 a2 ~ a1 [e1,d2,e2] e2 [e1,e2,e3]!2 ~ [e1,e3]@2 [d1,b1,d2,d3], ~@13 e2 ~@2", // E7 E G
  S: "[[c2,c3]@7 [d2,d3] ~ d3 d3@9 d3@2 a2 d3 [g2,g3]@7 d3 g3, ~@10 d2 ~@21]/2", T: "f2@7 c3 f2@6 f3 c3, f3@7 ~",
  U: "b2@7 b2@2 b2 b2@3 b2@2 g2", V: "[c2,c3]@7 d3 ~ d3 d3@6",
  W: "~ a2 ~ d3@2 a2 d3 g2@6 d3 [g2,a2] g3, ~@2 d2@3 ~@2 g3@8 ~", X: "f2@6 ~ c2 f1@7 c3, f3@15 ~, ~@6 f2@9 ~",
  Y: "e3@4 e3@4 b2 ~@2 b2 ~@2 b2 ~, e2 ~",
})).s("gm_electric_bass_finger").gain(0.35).pan(0.6)

// bass · synth bass 2 · "Bass 2"
const bass_2 = note(`<
  ~ A B C D E F G H I J K L M N O P Q R C D E F G H I J ~@2 M N O P Q R C D E F G H I J S@2 T U V W X Y Z AA AB AC G H I
  J Z AA E F G H I J Z AA E F G H I ~
>`.pickRestart({
  A: "e2 ~@3 e3 e2 ~ e2!2 ~@3 e3 e2 ~ e2", B: "e2 ~ e2 ~ e2 ~ e2 ~", C: "e1 ~ e1 ~ e2 e1 ~ e1!2 ~@3 e2 e1 e2 e1",
  D: "a1 ~ a1 ~ e1 a1 ~ a1 d2 ~ d2@2 e1 d2 e1 d2", E: "e2 ~ e1@2 e2 e1 ~ e1 e1@2 ~ e1 e2 ~ e1 g#1, ~@13 g#1@2 ~",
  F: "a1 ~ a1 ~ e1 a1 e1 a1 d2@2 ~@2 e1 a1 d2 e2, ~@11 d2@2 ~@3", G: "e1@2 e1 ~ e2 e1 ~ e1!2 ~@2 e1 e2 e1 e2 e1",
  H: "a1 ~ a1 ~@2 a1 ~ a1 d2 f1 d2 ~@2 d2 ~ d2", I: "e2 ~ e1@2 e2 e1 ~ e1!2 ~ e1 e2 e1 g#1@2 e1",
  J: "a1 ~ a1 ~@2 a1 ~ a1 e1 ~ e1!2 ~ e1 ~ d1",
  K: "[e1,e2] ~ [e1,e2] ~ e3 [e1,e2] ~ e3 [e1,e2] ~ e1 [e1,e2] e3 c#3@2 e2", // E
  L: "d3 a2 e2 a1 ~ a2 a1!2 d2 ~@2 [a2,d3] d2 ~ d2 b1, ~@13 [a2,d3]@2 ~", // D5
  M: "[e1,e2] ~ [e1,e2] ~ [b2,e3] [e1,e2] ~ e3 [e1,e2] ~ e1 e3 e2 c#3@2 e2", // E E5 E
  N: "d3 ~ a2 a1 ~ a1 a2 a1 d2 d3 a2 d2 d1 [a2,d3]@2 d2", // D5
  O: "[e1,e2] ~ [e1,e2] ~ e3 [e1,e2] ~ e3 [e1,e2] ~ e1 e3 [e1,e2] c#3@2 e2", // E
  P: "d3 ~ a1 ~ a1 [e2,a2] ~ a1 d2 d3 a2 d2 d1 [a2,d3]@2 d2", // A5 D5
  Q: "[e1,e2] ~ e2@2 e3 [e1,e2] ~ e3 e2@2 ~ e3 e2 c#3@2 e2, ~@2 e1 ~@5 e1 ~@7", // E
  R: "d3 a1 a2 ~ a1 a2 ~ a1 [e1,d2,e2] e2 [e1,e2,e3]!2 ~ [e1,e3]@2 [d1,b1,d2,d3], ~@13 e2 ~@2", // E7 E G
  S: "[[c1,c2]@7 [d1,d2] ~ d2 d2@9 d2@2 a1 d2 [g1,g2]@7 d2 g2, ~@10 d1 ~@21]/2", T: "f1@7 c2 f1@6 f2 c2, f2@7 ~",
  U: "b1@7 b1@2 b1 b1@3 b1@2 g1", V: "[c1,c2]@7 d2 ~ d2 d2@6",
  W: "~ a1 ~ d2@2 a1 d2 g1@6 d2 [g1,a1] g2, ~@2 d1@3 ~@2 g2@8 ~", X: "f2@6 ~ c2 f1@7 c2, f1 ~, ~@6 f2@9 ~",
  Y: "e2@4 e2@4 b1 ~@2 b1 ~@2 b1 ~, e1 ~", Z: "e2 ~ e2 ~ e3 e2 ~ e2!2 ~@3 e3 e2 e3 e2",
  AA: "a2 ~ a2 ~ e2 a2 ~ a2 d3 ~ d3@2 e2 d3 e2 d3", AB: "e3 ~ e2@2 e3 e2 ~ e2 e2@2 ~ e2 e3 ~ e2 g#2, ~@13 g#2@2 ~",
  AC: "a2 ~ a2 ~ e2 a2 e2 a2 d3@2 ~@2 e2 a2 d3 e3, ~@11 d3@2 ~@3",
})).s("gm_synth_bass_2").gain(0.35).pan(0.4)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~ A B C ~@3 C ~@3 C ~@3 C ~@2 D C ~@3 C ~@7 C ~@2 D C ~@3 C ~@10 E C ~@3 C ~@3 C ~@3 C ~@3 C ~@3 C ~@3
>`.pickRestart({
  A: "~@5 x ~ x ~@5 x ~ x", B: "~ x ~ x ~ x ~ x", C: "~@7 x ~@8", D: "~@5 x ~@2", E: "~@13 x ~@2",
})).gain(0.25)

// drums · rim
const rim = s("rim").struct("<~@3 A@24 ~@2 A@14 ~@8 A B A C A@4 ~@2 A@6 ~@2 A@5 ~>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@2 x ~@4 x ~@3", C: "~@4 x ~@7 x ~@2 x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~ A B A@24 ~@2 A@14 ~@4 A@3 C ~@4 A@4 ~@2 A@6 ~@2 A@5 ~>".pickRestart({
  A: "~ x ~ x", B: "~ x!3", C: "~@8 x ~@2 x ~@4",
})).gain(0.5)

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

// drums · open hat
const open_hat = s("oh").struct("<~ A@2 ~@15 B ~@8 C@2 ~@5 B ~@40>".pickRestart({
  A: "~ x ~@3 x ~@2", B: "~@11 x ~ x ~ x", C: "~ x ~ x ~@4",
})).gain(0.25)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@27 [~@5 x ~ x]!2 ~@46>").gain(0.15)

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

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

// drums · triangle
const triangle = s("triangles:35").struct(`<
  ~@3 A B C D A B C D A B C D A B C D A B C D A B C D ~@2 C D A B C D A B C D A B C D ~@12 A B C D ~@2 C D A B C D ~@2 C
  D A B C ~
>`.pickRestart({
  A: "~@10 x ~@2 x ~ x", B: "~@9 x!2 ~@4 x", C: "~@10 x!2 ~ x ~ x", D: "~@9 x ~@3 x ~ x",
})).gain(2.16)

// drums · shaker
const shaker = s("sh").struct("<~@3 A@40 ~@12 A@4 ~@2 A@6 ~@2 A@5 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.3)

stack(
  piano, electric_guitar_clean, string_ensemble_1, bass, bass_2, kick, kick_soft, rim, snare, hihat, open_hat,
  open_hat_soft, crash, cabasa, triangle, shaker
)

More by Monica