Strudelify

The Day We Find Love

911

KeyD majorTempo82 bpm
0:00/0:00
// The Day We Find Love — 911
// 82 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(82/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.

// other · pad bowed · "DENGUNG"
const pad_bowed = note("<~ A@3 ~ A@3 ~@55 B@3 ~@9 C D@4 E@4 F@2>".pickRestart({
  A: "[~@4 c#4 d4 a4 c#4@2 d4@3 c#4 d4 a4 a3@2 b3@6 ~]/3", B: "[~@4 d#4 e4 b4 d#4@2 e4@3 d#4 e4 b4 b3@2 c#4@6 ~]/3",
  C: "~@5 g#5 f#5!2", D: "[e5@4 d#5 e5 b5 d#5@2 e5@2 ~ d#5 e5 b5 b4@2 c#5@2 ~@2 c#5 e5 a5@2 g#5 e5 a5@2 g#5 f#5!2]/4",
  E: "[e5@4 ~@2 b4@2 d#5@2 e5@2 b5@2 d#5@4 e5@6 d#5@2 e5@2 b5@2 b4@4 c#5@10 e5@2 e5@4 c#5@2 e5@2 ~ g#5@4 f#5@5]/4",
  F: "[e5@2 f#5 e5@18 ~@11]/2",
})).s("gm_pad_bowed").gain(0.35)

// chords · epiano2 · "CHORD"
const epiano2 = note(`<
  ~ A B C@2 A B C@2 D E F G H I J K L M@2 N O P Q R S T U V@3 W X@3 Y D E F G H I J K L M@2 N O P Q R S T U V@3 W X@3 Y
  Z AA AB@2 AC AD@2 AE AF AG AH AI AJ AK AL AM AN AK AL AM AO@3
>`.pickRestart({
  A: "e4!2, [a3,d4,f#4]", B: "[b3,d4,f#4]", C: "[[b3,d4]@4 ~ b3 d4 g4@2 f#4@2 d4@2 b3@2 a3, g3 ~]/2",
  D: "[f#3,a3,d4]@3 [a3,c#4]@3 [a3,d4]@2, ~@3 f#3@5", E: "[f#3,b3,d4]@3 ~@3 d4@2, ~@3 [f#3,b3]@5",
  F: "[g3,b3,d4]@3 [b3,e4]@3 [b3,d4]@2, ~@3 g3@5", G: "[g3,b3,d4]@3 d4@3 [a3,d4] ~, ~@3 g3@4 ~, ~@3 b3@2 ~ c#4@2",
  H: "[f#3,a3,d4]@3 [f#3,a3,d4]@3 [f#3,a3]@2", I: "[f#3,b3]@3 [f#3,e4]@3 d4@2, d4@2 ~ b3@5, ~@6 f#3 ~",
  J: "b3 b3@2 [g3,b3,d4]@3 [b3,d4]@2, [g3,d4]@3 ~@3 g3 ~", K: "[g3,b3,d4]@3 [g3,b3,d4]@3 [b3,d4]@2, ~@6 g3 ~",
  L: "[a3,c#4]@3 [f#3,a3,e4]@3 [f#3,a3,c#4]@2, f#3 ~@3, e4 ~@7", // A F#m7 F#m
  M: "[[b3,d4]@3 b3@3 [b3,d4]@2 c#4@3 [f#3,a3,e4]@3 [f#3,a3,c#4]@2, f#3@3 f#3@2 ~@3, ~@4 a3 ~@3]/2", // Bm F#m7 F#m
  N: "[f#3,b3]@3 [f#3,b3]@3 [b3,d4]@2, d4@2 ~@4 f#3 ~", O: "[g3,b3,d4]@3 [g3,b3,d4]@3 [g3,d4]@2, ~@6 b3 ~",
  P: "[f#3,a3,c#4]@3 [f#3,b3,d4]@3 f#3@2, ~@6 b3 ~", Q: "[e3,g3,b3,d4]@3 [e3,g3,b3]@3 [e3,g3,b3,d4]@2",
  R: "[a3,d4]@3 d4 d4@2 [e3,a3,d4]@2, e3@2 ~ e3@2 ~@3, [g3,b3] ~@2 a3@3 ~@2", S: "[e3,a3,c#4] ~",
  T: "d4@3 [a3,d4]@2 [a3,c#4]@2 [f#3,d4], f#3@3 ~, a3 ~@3", U: "[f#3,d4]@3 [f#3,b3,c#4]@3 [f#3,a3] ~, b3 ~@3",
  V: "[[d3,g3,b3]@3 [g3,b3]@3 [g3,b3]@2 [g3,b3,d4]@3 [e3,c#4]@3 [e3,c#4]@2 [f#3,d4]@3 [f#3,a3,c#4]@3 [f#3,d4]@2, ~@3 d3@8 a3@2 ~ a3@5 ~@3 a3 ~]/3", // G C#m D F#m D
  W: "[f#3,b3,d4]@3 [f#3,b3,c#4]@2 c#4 ~ c#4, ~@5 [f#3,a3]@3", // Bm F#sus4 F#m
  X: "[[d3,g3,b3]@3 [d3,g3,b3]@3 [g3,b3]@2 g3@3 [a3,c#4]@3 c#4 ~ [f#3,d4]@3 [f#3,a3,d4] [f#3,a3,d4]@4, ~@6 d3@5 e3@4 ~@9, ~@8 b3@2 ~ a#3 ~@2 a3@5 ~@5]/3", // G A D
  Y: "[f#3,a3,d4] ~@7", Z: "f#4!2, [b3,e4,g#4]", AA: "[c#4,e4,g#4]",
  AB: "[[c#4,e4]@4 ~ c#4 e4 [e4,a4]@2 [e4,g#4]@2 [c#4,e4]@2 [a3,c#4] a3 [g#3,b3], a3@4 ~@3 [c#4,e4]]/2", // C#m A5 E C#m A G#m C#m
  AC: "[b3,f#4]@3 [g#3,b3]@3 [g#3,b3,d#4]@2, d#4@3 ~, g#3@2 ~ f#4@5", // B5 G#m
  AD: "[[c#4,e4]@3 c#4@3 [c#4,e4]@2 d#4@3 [g#3,b3,f#4]@3 [g#3,b3,d#4]@2, g#3@3 g#3@2 ~@3, ~@4 b3 ~@3]/2", // C#m G#m7 G#m
  AE: "[g#3,c#4]@3 [g#3,c#4]@3 [c#4,e4]@2, e4@2 ~@4 g#3 ~", AF: "[a3,c#4,e4]@3 [a3,c#4,e4]@3 [a3,e4]@2, ~@6 c#4 ~",
  AG: "[g#3,b3,d#4]@3 [g#3,c#4,e4]@3 g#3@2, ~@6 c#4 ~", AH: "[f#3,a3,c#4,e4]@3 [f#3,a3,c#4]@3 [f#3,a3,c#4,e4]@2",
  AI: "[b3,e4]@3 e4 e4@2 [f#3,b3,e4]@2, f#3@2 ~ f#3@2 ~@3, [a3,c#4] ~@2 b3@3 ~@2", AJ: "[f#3,b3,d#4] ~",
  AK: "~@3 b3 b4@4 ~@2 b4@2 ~@2 b3@2, e3, e4@3 e4", AL: "~ g#3 ~ e4 ~ e4 ~ g#3, c#3, c#4 c#4@2 c#4",
  AM: "~ e3 ~ b3 c#4@2 ~@2, a2, a3 a3@3", AN: "b2@3 b2@3 [b2,d#4]@2, b3, ~@3 e4@2 ~@3",
  AO: "[b2@7 b2@7 [b2,d#4]@5 [e2,e3,g#3,e4]@25 ~@4, b3@19 ~@29, ~@7 e4@5 ~@36]/3", // B E
})).s("gm_epiano2").gain(0.26)

// bass · electric bass finger · "BASS"
const bass = note(`<
  ~ A B C D A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD@2 E F G H I J K L M N O P Q R S T U AE W X Y
  Z AA AB AC AD@2 AF AG AH AI AJ AK AL AM AN AO AP B AQ ~@10
>`.pickRestart({
  A: "d2@3 d2@3 d2 a1", B: "b1@5 ~ b1@4 b1@4 f#1@2", C: "g1@5 ~ g1 ~ g1@8", D: "g1@5 ~ g1 ~ g1@4 a1@2 b1@2",
  E: "d2@3 d2@3 d2@2", F: "b1@4 ~ b1@4 f#1 b1@4 f#1@2", G: "g1@5 d1 g1@3 d1 g1@5 ~", H: "g1@5 ~@2 g1 a1 ~ a1@3 ~ a1@2",
  I: "d2@5 ~ d2 d2@2 d2@5 d2@2", J: "b1@5 ~ b1 b1@3 f#1 b1@3 f#1@2", K: "g1@6 ~@2 g1 d1 g1@5 ~",
  L: "g1@5 ~ g1@4 ~@2 a1@2 g1@2", M: "f#1@5 ~ f#1@3 ~ f#1@4 a1@2, e1 ~@15", N: "b1@5 ~ b1@4 d2@4 b1@2",
  O: "f#1@3 f#1@2 f#1@2 a1", P: "b1@2 f#1 b1@2 f#1@2 b1", Q: "g1@3 g1@2 d1 g1@2", R: "f#1@3 ~ f#1@2 b1@4 b1@3 ~ b1@2",
  S: "e1@5 ~ e1@4 f#1@2 g1@2 b1@2", T: "a1@5 ~ a1@4 a1@4 e1@2", U: "a1@3 a1 a1@4, b1 ~@15",
  V: "d2@5 ~ d2@3 ~ d2@3 ~ d2@2", W: "b1@4 f#1@2 b1@3 ~ b1@4 f#1@2", X: "g1@4 g1 ~ g1@4 d1@2 g1@4",
  Y: "g1@3 ~ g1@2 a1@3 ~ a1@4 b1 c#2", Z: "d2@4 a1@2 d2@4 d2@3 ~ d2 c#2", AA: "b1@3 ~ b1 f#1 b1@3 ~ b1@4 f#1@2",
  AB: "g1@6 ~ g1 g1@2 g1@4 ~ g1", AC: "g1 ~ g1@3 ~ a1@4 a1@4 ~ a1",
  AD: "[d2@6 ~ d2!2 ~ d2@8 a1@2 a1@3 ~ a1 ~ a1@3 ~@3]/2", AE: "~@6 d2@3 ~ d2@3 ~ d2@2", AF: "e2@3 e2@3 e2 b1",
  AG: "c#2@5 ~ c#2@4 c#2@4 g#1@2", AH: "a1@5 ~ a1 ~ a1@8", AI: "a1@5 ~ a1 ~ a1@4 b1@2 a1@2",
  AJ: "g#1@5 ~ g#1@3 ~ g#1@4 b1@2, f#1 ~@15", AK: "c#2@5 ~ c#2@4 e2@4 c#2@2", AL: "g#1@3 g#1@2 g#1@2 b1",
  AM: "c#2@2 g#1 c#2@2 g#1@2 c#2", AN: "a1@3 a1@2 e1 a1@2", AO: "g#1@3 ~ g#1@2 c#2@4 c#2@3 ~ c#2@2",
  AP: "f#1@5 ~ f#1@4 g#1@2 a1@2 c#2@2", AQ: "b1 ~, c#2 ~@15",
})).s("gm_electric_bass_finger").gain(0.5)

// chords · synth strings 1 · "NGINGGGG"
const synth_strings_1 = note(`<
  ~@5 A@2 B@3 ~@7 C ~ C ~ D E ~@3 F@7 ~@11 G ~ H ~ D E I ~@2 J ~ K@3 ~ L ~@7 M ~ N ~ O P Q ~ R S@4 T@4 U@2
>`.pickRestart({
  A: "[a5@7 d6]/2", B: "[a5@6 ~ g6@2 f#6@2 d6@2 b5@2 a5@2 ~@7]/3", C: "~@2 [f#4,c#5,e5]@2 [f#4,c#5,e5]!2 ~@2",
  D: "[g4,b4]@7 ~, f#5", E: "[f#4,e5]@3 [b4,d5]@4 ~, c#5@2 ~ f#4@5",
  F: "[~@4 c#5 d5 a5 c#5@2 d5@2 ~ c#5 d5 ~@3 b4@4 ~@14 a4 c#5 d5 a5 c#5@2 d5@3 c#5 d5 ~@3 b4@5 ~@2, a5@6 d6@2 ~@7 a4@2 ~@30 a4@2 ~@7, ~@16 a5@22 ~@10 a5@7 ~]/7",
  G: "~@4 [f#4,c#5,e5]@4 [f#4,c#5,e5] ~ [f#4,c#5,e5] ~@5", // F#7
  H: "~@4 [f#4,c#5,e5]@4 [f#4,c#5,e5] ~ [c#5,e5] ~@5, ~@5 f#4 ~@2", I: "[e4,g4,b4,d5]", J: "a5@3 d6", K: "[a5@11 ~]/3",
  L: "a5@7 ~", M: "~@4 [g#4,d#5,f#5]@4 [g#4,d#5,f#5] ~ [g#4,d#5,f#5] ~@5",
  N: "~@4 [g#4,d#5,f#5]@4 [g#4,d#5,f#5] ~ [d#5,f#5] ~@5, ~@5 g#4 ~@2", O: "[a4,c#5]@7 ~, g#5",
  P: "[g#4,f#5]@3 [c#5,e5]@4 ~, d#5@2 ~ g#4@5", Q: "[f#4,a4,c#5,e5]", R: "~@5 g#5 f#5!2",
  S: "[e5@4 d#5 e5 b5 d#5@2 e5@2 ~ d#5 e5 b5 b4@2 c#5@2 ~@2 c#5 e5 a5@2 g#5 e5 a5@2 g#5 f#5!2]/4",
  T: "[e5@4 ~@2 b4@2 d#5@2 e5@2 b5@2 d#5@4 e5@6 d#5@2 e5@2 b5@2 b4@4 c#5@10 e5@2 e5@4 c#5@2 e5@2 ~ g#5@4 f#5@5]/4",
  U: "[e5@2 f#5 e5@18 ~@11]/2",
})).s("gm_synth_strings_1").gain(0.17)

// chords · synth strings 1 · "NGINGGGG" · soft notes
const synth_strings_1_soft = note("<~@27 A ~@2 B@2 C@3 ~@19 A ~@2 B@2 C@3 ~@24>".pickRestart({
  A: "a5@3 d6, ~@6 a5 ~", B: "[~@12 d6@3 a5@12 ~ d6@4, ~@14 a5 ~]/2", C: "[~@7 g6@2 f#6@2 d6@2 b5@2 a5@8 ~]/3",
})).s("gm_synth_strings_1").gain(0.1)

// other · tenor sax · "SAXOPHONE"
const tenor_sax = note(`<
  ~@62
  [~@12 g#5 f#5 e5 d#5]
  [e5@10 f#5@4 e5 c#5]
  [e5@7 c#5 e5@7 ~]
  [~@3 a5 g#5 f#5 e5 f#5 c#5 b4 c#5 b4 a4 g#4 f#4 e4]
  [g#5@4 f#5@2 e5 c#5 e5@8]
  ~@19
>`).s("gm_tenor_sax").gain(0.46)

// other · tubular bells · "BELLS"
const tubular_bells = note("<~@75 A ~@8 B@2>".pickRestart({
  A: "~ e8@2 [c#8,d#8] b7 [g#7,a7] [e7,f#7] [c#7,d#7] [a6,b6] [f#6,g#6] [d#6,e6] c#6 [a5,b5] [e5,f#5,g#5] [c#5,d#5] [b4,c#5]", // C#sus2 Amaj7 Esus2 C#sus2 Asus2 F#sus2 Emaj7 Asus2 …
  B: "[~@7 d#8 ~@3 g#7@2 ~ e7 ~ [b6,c#7] a6 g#6 f#6 [d#6,e6] c#6 ~ a5 [f#5,g#5] [d#5,e5] c#5 [a4,b4] ~@4, ~@6 e8@2 c#8@2 a7@2 ~ f#7@2 d#7@2 ~@5 b5@2 ~@8, ~@9 b7@2 ~@21]/2", // Bsus2 Emaj7 F#sus2 Emaj7 Asus2
})).s("gm_tubular_bells").gain(0.14)

// drums · snare
const snare = s("sd").struct("<~ [~ x ~ x]!74 ~@11>").gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<~ [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!74 [x!4]!4 ~@7>").gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@33 [~@7 x] ~@26 [~@7 x] ~@25>").gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@3 A ~@3 A ~@7 A ~@3 A ~@8 A ~@3 B ~@9 A ~@3 A ~@8 A ~@3 B ~@25>".pickRestart({
  A: "~@6 x!2", B: "~@3 x",
})).gain(0.32)

// drums · high tom
const high_tom = s("ht").struct("<A ~@3 B ~@3 B ~@7 C ~@3 B ~@8 B ~@3 B ~@9 C ~@3 B ~@8 B ~@3 B ~@25>".pickRestart({
  A: "~@11 x ~@4", B: "~@5 x ~@2", C: "~@10 x!2 ~@4",
})).gain(0.32)

// drums · ride
const ride = s("rd").struct("<~@17 x ~@26 x ~@33 [~@4 x!4] [x!15 ~] ~@6>").gain(0.28)

// drums · china
const china = s("cr").struct("<~@76 x ~@9>").gain(0.32)

// drums · bongos
const bongos = s("bongo:4").struct("<~@79 x ~@6>").gain(0.74)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@79 x ~@6>").gain(0.74)

// drums · shaker
const shaker = s("sh").struct("<~@12 [~@5 x!2 ~] ~@26 [~@5 x!2 ~] ~@46>").gain(0.32)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@16 [~@11 x ~@4] ~@26 [~@11 x ~@4] ~@42>").gain(0.47)

// drums · triangle
const triangle = s("triangles:35").struct("<[~@4 x!4] [~@3 x]!74 ~@11>").gain(2.8)

stack(
  pad_bowed, epiano2, bass, synth_strings_1, synth_strings_1_soft, tenor_sax, tubular_bells, snare, hihat, low_tom,
  mid_tom, high_tom, ride, china, bongos, bongos_2, shaker, woodblocks, triangle
)