Strudelify

If You Only Let Me In

MN8

KeyE majorTempo101 bpm
0:00/0:00
// If You Only Let Me In — MN8
// 101 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 103 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(101/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.

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~@3 A@2 B C D C D E F C@4 D G C@6 D G C@2 H I J K H I L M N B C D C D O P Q ~ C@4 D G C@2 H I J K H I L M N B C D C D
  O P N B C D C D O P H I J K H I L M ~@6 O P N B C D C D O P ~
>`.pickRestart({
  A: "[~@6 d2@3 ~@3 g1@3 f#1@3 ~@3 e1@9 ~@3 c#2@3 ~@3 b1@4 ~@2 g#1@3]/2", B: "a1@7 ~@2 f#2@3 ~@3 e2@5 ~ c#2@3",
  C: "e1@2 ~ c#2 ~ b1 ~ g#1", D: "a1@7 ~@2 f#2@3 ~@3 e2@3 ~@3 c#2@3", E: "g1@7 ~@2 e2@3 ~@3 d2@3 ~@3 a1@3",
  F: "b1 ~@11", G: "g1@7 ~@2 g1@3 f#1@7 ~@2 f#1@3, e2 ~@23", H: "d2@7 ~@4 d2 d2@2 ~ d2@3 ~@2 d2 d2@3",
  I: "a1@7 ~@4 a1 a1@2 ~ a1@3 ~@2 a1 a1@3", J: "e1@8 ~ c#2@3 ~@3 b1@4 ~@2 g#1@3", K: "e1@8 ~ c#2@4 ~@2 b1@5 ~ g#1@3",
  L: "b1@7 ~@2 b1@4 ~@2 b1@4 ~ b1 b1@2 ~", M: "b1@5 ~@13 b1 a1 g#1 f#1@3", N: "e1@6 ~@3 c#2@3 ~@3 b1@4 ~@2 g#1@3",
  O: "g1@7 ~@2 e2@3 ~@3 d2@3 ~@3 g1@3", P: "a1@5 ~@4 a1@3 b1@6 ~@3 b1@3", Q: "e1 ~@3",
})).s("gm_synth_bass_2").gain(0.39)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A@10 B ~ C@4 D E C@6 D E C@2 F G C@2 F H I@2 A@6 B C ~ J C@4 D E C@2 F G C@2 F H I@2 A@6 B C A@6 B C F G K@2 F H I@2
  ~@4 L@2 M K L@6 M K ~
>`.pickRestart({
  A: "~@6 [b3,c4,c#4,d4,d#4,e4] ~@2 [c#4,e4] ~@2 [b3,c4,d4,d#4] ~@2 [b3,d4]@4 ~@5, ~@12 [c#4,e4]@3 [c4,d#4] ~@8", // C#m Bm C#m Cm
  B: "~@6 [a3,a#3,b3,c4,c#4,d4] ~@2 [b3,d4] ~@2 [a3,a#3,c4,c#4] ~@2 [c#4,e4]@4 ~@5, ~@12 [b3,d4]@3 [c4,d#4] ~@8", // Bm C#m Bm Cm
  C: "~@6 [b3,c4,c#4,d4,d#4,e4] ~@2 [c#4,e4] ~@2 [b3,c4,d4,d#4] ~@2 [b3,d4]@6 ~@3, ~@12 [c#4,e4]@3 [c4,d#4] ~@8", // C#m Bm C#m Cm
  D: "~@6 [a3,a#3,b3,c4,c#4,d4] ~@2 [b3,d4] ~@2 [a3,a#3,c4,c#4] ~@2 [c#4,e4]@6 ~@3, ~@12 [b3,d4]@3 [c4,d#4] ~@8", // Bm C#m Bm Cm
  E: "~@6 [a3,a#3,b3,c4,c#4,d4] ~@2 [b3,d4] ~@2 [b3,c4,d4,d#4] ~@2 [b3,d4]@6 ~@3, ~@12 [c#4,e4]@3 [c4,d#4] ~@8", // Bm C#m Cm
  F: "~@6 [f#3,a3,d4]@5 [f#3,a3,d4] e3@2 f3 d4@9, ~ a3, ~@7 f#3@5", // D
  G: "~@2 a3 a3@2 ~ [e4,a4]@4 ~ a4 ~@6 [c#4,e4,a4]@3 [b3,e4,g#4] ~@2, ~@6 c#4 ~@17", // A5 A E
  H: "~@2 a3 a3@2 ~ [e4,a4]@4 ~ a4 ~@6 [c#4,e4,a4]@5 ~, ~@6 c#4 ~@17", // A5 A
  I: "[~@3 [b3,f#4,b4]@3 [f#4,b4] ~@11 [f#3,g3,g#3] ~@2 [f#3,b3]@25 ~@2, ~@2 b3 ~@13]/2", // B5
  J: "~@15 [b3,e4,b4,e5] [e4,b4,e5] [b3,e4,b4,e5] [b4,e5]@2 ~@4", // E5
  K: "~@6 [b3,c4,c#4,d4,d#4,e4] ~ [c#4,e4] ~@3 [b3,c4,d4,d#4] ~@2 [b3,d4]@6 ~@3, ~@12 [c#4,e4]@3 [c4,d#4] ~@8", // C#m Bm C#m Cm
  L: "~@6 [b3,c4,c#4,d4,d#4,e4] ~ [c#4,e4] ~@3 [b3,c4,d4,d#4] ~@2 [b3,d4]@4 ~@5, ~@12 [c#4,e4]@3 [c4,d#4] ~@8", // C#m Bm C#m Cm
  M: "~@6 [a3,a#3,b3,c4,c#4,d4] ~ [b3,d4] ~@3 [a3,a#3,c4,c#4] ~@2 [c#4,e4]@4 ~@5, ~@12 [b3,d4]@3 [c4,d#4] ~@8", // Bm C#m Bm Cm
})).s("gm_electric_guitar_clean").gain(0.1).pan(0.3)

// chords · electric guitar clean · "CLEAN GTR" · soft notes
const electric_guitar_clean_2 = note(`<
  A@10 B ~ C@4 D C@7 D C@3 ~ E C@2 ~ F ~@2 A@6 B C ~ G H C@3 D C@3 ~ E C@2 ~ F ~@2 A@6 B C A@6 B C ~ E C@2 ~ F ~@6 A@2 B
  C A@6 B C ~
>`.pickRestart({
  A: "~@19 [a#3,c#4] [f3,f#3,g3,g#3,a3,a#3,b3,c4] ~@3", B: "~@19 [c4,d#4] [g3,g#3,a3,a#3,b3,c4,c#4,d4] ~@3",
  C: "~@21 [g#3,a3,a#3,b3,c4,c#4] [f3,f#3,g3,g#3,a3,a#3] ~", D: "~@21 [a#3,b3,c4,c#4,d4,d#4] [g3,g#3,a3,a#3,b3,c4] ~",
  E: "~@11 [c#4,e4] ~@2 a4 ~@3 [e3,a3]@3 ~@3", F: "~@11 [c#4,e4] ~@2 a4 ~@3 [e3,a3]@5 ~",
  G: "~@16 b3 ~@3 [g4,g#4,a4,a#4,c5,c#5,d5,d#5] [c#4,d4,d#4,e4,f4,f#4,g4,g#4,a4,a#4,b4] [g3,g#3,a3,a#3,b3,c4,c#4,d4,d#4,e4,f4] [c#3,d3,d#3,e3,f3,f#3,g3,g#3,a3,a#3,b3]",
  H: "[c3,f3] ~@20 [g#3,a3,a#3,b3,c4,c#4] [f3,f#3,g3,g#3,a3,a#3] ~", // F5
})).s("gm_electric_guitar_clean").gain(0.03).pan(0.3)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  ~@3 A@2 ~@2 B@2 ~@26 C ~@3 B@2 ~@2 D ~@17 C ~@3 B@2 ~@2 D ~@3 B@2 ~@2 D ~@7 C ~@3 B@2 ~@2 D ~@3 B@2 ~@2 D ~
>`.pickRestart({
  A: "[~@12 [g3,g4,g5]@3 [f#3,f#4,f#5]@2 ~@4 [e3,e4,e5]@9 [e3,e4,e5] ~@17]/2", // G F# E
  B: "[~@15 [e3,e4,e5]@2 ~@4 [e3,e4,e5]@9 [e3,e4,e5] ~@17]/2", // E
  C: "~@3 [e3,e4,e5]@3 [e3,e4,e5] ~@5 [e3,e4,e5]@3 [e3,e4,e5] ~@5 [e4,e5] ~@2, ~@21 e3@2 ~", // E
  D: "~@12 [g4,g5]@3 [f#4,f#5]@3 [e4,e5]@2 ~@4", // G F# E
})).s("gm_brass_section").gain(0.42).pan(0.4)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  A@4 B C B C B C D@2 E F G H@3 I J E F G H@3 I K L M@3 L N@3 B C B C B C O@2 P Q E F G H@3 I K L M@3 L N@3 B C B C B C
  O@2 R C B C B C O@2 L M@3 L N@3 ~@6 O@2 R C B C B C O@2 ~
>`.pickRestart({
  A: "[~@21 a#5 b5@14 [a5,e6]@2 a#5 a5 g5 ~ a5@3 g5@8 ~ d5 e5@2 [d5,g5] ~@2 a4 a#4 ~ g4 ~@2 a4@3 g4@20 [c5,c#5,d5,f5,g5] [a5,b5,c6,d6] [g5,a5,b5] [b4,c5,d5,e5,f5] [e4,f4,g4,a4] ~@2, ~@21 e6@14 ~@7 e6@12 b4@3 ~@5 a4@2 ~@32, ~@55 d#5 ~@4 e5@3 ~@3 e5@24 ~@6]/4", // A5 G5 Csus4 D7 G Bdim Fmaj7
  B: "[b4,e5,g#5]", C: "[c#5,e5,g5,a5]", D: "[[b4,d5,g5]@21 [a4,b4,d#5,f#5]@5 ~@22]/2", E: "[b4,e5,g#5] ~@6 [b4,d5,g5]",
  F: "[b4,e5,g#5]@2 ~@16 [b4,d5,e5,a5]@3 [b4,e5,g#5]@3", G: "~@7 [b4,d5,e5,g5]",
  H: "[[b4,e5,g#5]@3 ~@18 [b4,e5,g5]@5 ~@7 [b5,e6]@2 ~@10 [b4,d5,g5]@5 ~@10 [b4,d5,e5,a5]@4 ~@5 [b4,d5,g5]@3, ~@33 a#5 ~@38]/3", // E Em E5 G Bm7 G
  I: "[b4,e5,g#5]@3 ~@6 [a#5,e6]@2 ~@7 [d5,e5,a5]@3 [b4,e5,g#5]@3, ~@9 a5 ~@14", // E A#dim Dsus2 E
  J: "~@9 [a#5,e6]@2 ~@10 [b4,d5,g5]@3, ~@9 a5 ~@14", // A#dim G
  K: "~@9 [a#5,e6]@2 ~@7 [g7,g#7,a7,a#7,b7,c8] [g#6,a6,a#6,b6,c7,c#7,d7,d#7,e7,f7,f#7] [a5,a#5,b5,c6,c#6,d6,d#6,e6,f6,f#6,g6] [f5,f#5,g5,g#5] ~@2, ~@9 a5 ~@14", // A#dim
  L: "[d5,f#5,a5]", M: "[[c#5,e5,a5]@7 [b4,e5,g#5]@13 [b4,e5,g#5]@4]/3",
  N: "[[c#5,e5,a5]@21 [b4,d#5,f#5]@24 d#5@6 ~ a4 g4 ~@18, ~@45 [b4,f#5,a5]@8 ~@19, ~@17 d#5@2 ~@5]/3", // A B B7
  O: "[[b4,d5,g5]@21 [a4,b4,d#5,f#5]@5 ~ [e4,b4,e5]@21]/2", P: "[b4,e5]@7 [b4,d5,g5], g#5 ~@7", Q: "[b4,e5,g#5] ~@11",
  R: "[b4,e5]@7 ~, g#5", // E5
})).s("gm_rock_organ").gain(0.14).pan(0.6)

// chords · rock organ · "ORGAN 3" · soft notes
const rock_organ_soft = note("<~@3 A ~@23 B C ~@6 D ~@17 B C ~@6 D ~@23 E ~@17>".pickRestart({
  A: "~@22 [g3,a3,b3,c4,d4] [e3,f3]", // G Fmaj7
  B: "~@21 [c5,c#5,d5,d#5,e5] [c#4,d4,d#4,e4,f4,f#4,g4,g#4,a4,a#4,b4] [d3,d#3,e3,f3,f#3,g3,g#3,a3,a#3,b3,c4]",
  C: "[b2,c3,c#3] ~@23", D: "~@3 c#5 ~ [d4,e4,f4] [a3,b3,c4] [d3,e3,f3,g3] ~@16",
  E: "~@3 c#5 ~ [d4,e4,f4] [g3,a3,b3,c4] [d3,e3,f3] ~@16", // Dm Cmaj7 Dm
})).s("gm_rock_organ").gain(0.05).pan(0.6)

// other · brass section · "BRASS 1"
const brass_section_2 = note(`<
  ~@11 A@2 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@7 C ~@7 A@2 B ~ B ~ B ~ B ~ B ~@7 C ~@7 D@2 ~@6 D@2 ~@6 C ~@7 D@2 ~@6 D@2
>`.pickRestart({
  A: "[~@7 b4@3 ~@6]/2", B: "~@9 [e5,e6]@2 ~@13", C: "~@7 e4", D: "[~@7 e4@3 ~@6]/2",
})).s("gm_brass_section").gain(0.35).pan(0.4)

// other · lead 8 bass lead · "BASS&LEAD"
const lead_8_bass_lead = note(`<
  ~@4 A B A B A B A ~@9 C D E D E D E D F ~@7 A B A B A B A ~@3 C D E D E D E D F ~@7 A B A B A B A ~ A B A B A B A ~@13
  A B A ~ A B A B A B A ~@2
>`.pickRestart({
  A: "~@3 e5 ~@2 e5@2 ~@16", B: "~ e5@2 ~ e5@8 ~@12, d5@2 ~ g5@2 ~@19", C: "d5@3 e5 ~@2 e5 ~@17",
  D: "d5@2 ~ e5 ~@2 e5 ~@2 e5 ~@14", E: "d5 ~@2 e5 ~@2 e5 ~@17", F: "d5 ~@23",
})).s("gm_lead_8_bass_lead").gain(0.17).pan(0.7)

// other · orchestra hit · "ORCH.HIT"
const orchestra_hit = note("<~@13 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~@49>".pickRestart({
  A: "~@9 [e4,e5]@2 ~@13", // E
})).s("gm_orchestra_hit").gain(0.3).pan(0.3)

// drums · kick
const kick = s("bd").struct("<A@11 B A@23 C A@25 C A@23 C A@16 ~>".pickRestart({
  A: "x ~@2 x ~ x ~@6 x ~@2 x ~ x ~@6", B: "x ~@22 x", C: "x ~@2 x ~ x ~@6 x ~@2 x ~@7 x",
})).gain(0.36)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<A@11 ~ A@23 B A@9 B A@15 B A@23 B A@16 ~>".pickRestart({
  A: "~@2 x ~@8 x ~@2 x ~@8 x", B: "~@2 x ~@8 x ~@2 x ~@9",
})).gain(0.14)

// drums · snare
const snare = s("sd").struct("<A@11 B A@19 C A@3 D A@9 C A@15 D A@19 C A@3 D A@3 E A@12 ~>".pickRestart({
  A: "~ x ~ x", B: "~@17 x!2 ~ x!2 ~ x", C: "~@6 x ~@11 x ~@4 x", D: "~@6 x ~@10 x!2 ~ x!2 ~ x", E: "~@3 x",
})).gain(0.5)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!11 ~ [~ x ~ x]!77 ~ [~ x ~ x]!12 ~>").gain(0.43)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!11 x [x!8]!33 [x!7 ~] [x!8]!56 ~>").gain(0.5)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  [~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x]!11
  ~
  [~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x]!33
  [~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@6]
  [~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x]!43
  ~
  [~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x]!12
  ~
>`).gain(0.14)

// drums · open hat
const open_hat = s("oh").struct(`<
  [~@14 x!2 ~@8]!11
  ~
  [~@14 x!2 ~@8]!4
  [x ~@13 x!2 ~@8]
  [~@14 x!2 ~@8]!72
  ~
  [~@14 x!2 ~@8]!12
  ~
>`).gain(0.57)

// drums · crash
const crash = s("cr").struct(`<
  A ~@3 A ~@3 A ~@18 B A ~@3 A ~@2 B A ~@3 A ~@9 A ~@2 B A ~@3 A ~@2 B A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2 C A ~@3 A ~@3
  A ~@3 A ~@4
>`.pickRestart({
  A: "x", B: "~@5 x ~@2", C: "~@15 x ~@7 x",
})).gain(0.57)

// drums · crash · soft notes
const crash_soft = s("cr").struct(`<
  A ~@3 A ~@3 A ~@27 A ~@3 A ~@21 A ~@3 A ~@3 A ~@3 A ~@18 B A ~@3 A ~@4
>`.pickRestart({
  A: "x", B: "~@2 x",
})).gain(0.36)

// drums · tambourine
const tambourine = s("tb").struct("<[x!8]!11 x [x!8]!33 [x!7 ~] [x!8]!43 ~ [x!8]!12 ~>").gain(0.29)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x]!11
  ~
  [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x]!33
  [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@6]
  [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x]!43
  ~
  [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x]!12
  ~
>`).gain(0.14)

// drums · cowbell
const cowbell = s("cb").struct("<[~ x ~@6]!11 ~ [~ x ~@6]!77 ~ [~ x ~@6]!12 ~>").gain(0.43)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<[~@5 x ~@18]!11 ~ [~@5 x ~@18]!77 ~ [~@5 x ~@18]!12 ~>").gain(1.82)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct("<[~@8 x ~@2 x ~@12]!11 ~ [~@8 x ~@2 x ~@12]!77 ~ [~@8 x ~@2 x ~@12]!12 ~>")
  .gain(1.82)

// drums · shaker
const shaker = s("sh").struct(`<
  [x ~@2 x ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~ x]!11
// … 34 more lines