Strudelify

I Think I'm in Love With You

Jessica Simpson

KeyA majorTempo106 bpm
0:00/0:00
// I Think I'm in Love With You — Jessica Simpson
// 106 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 synth brass 1 (copy of ch 5 brass section)
// note: Full arrangement: all 87 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(106/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 · electric bass finger
const bass = note(`<
  ~@2 A B C D E F C G A H C I A J C K L M N O A B C D E F C G A H C I A J C K L P Q R A B C D E F C G E F C G S ~ S T U
  ~ V W A B C D E F C G A B C D E F C G A B C D E F C G ~
>`.pickRestart({
  A: "a1@14 e2 g2", B: "a2@5 e2@2 a1", C: "d2@2 ~@12 a1 b1", D: "d2@2 ~@9 a1@4 ~", E: "a1@14 e2 a2", F: "a1@5 a2 e2 a1",
  G: "d2 ~@9 d2@5 ~", H: "a2@14 a1 b1", I: "d2 ~@15", J: "a2", K: "d2 ~@10 a1@4 ~", L: "b1@13 ~ b1@2",
  M: "c#2@13 ~ c#2@2", N: "d2@6 ~ d2", O: "e2@9 ~@2 e2@4 ~", P: "c#2@12 ~ b1 c#2 e2", Q: "d2@10 ~ d2 ~ b1 d2 f#2",
  R: "e2@10 ~ e2@4 ~", S: "b1@3 c#2 ~@4", T: "~@11 c#2@4 ~", U: "b1@6 c#2 ~@9", V: "b1@3 c#2 ~@2 f#1@2",
  W: "e1@10 e1@5 ~",
})).s("gm_electric_bass_finger").gain(0.57)

// bass · slap bass 1
const bass_2 = note(`<
  ~@4 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@6 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@6 A@2 ~@2 A@2 ~@2 A@2 ~@10 A@2 ~@2 A@2 ~@2 A@2 ~@2
  A@2 ~@2 A@2 ~@2 A@2 ~
>`.pickRestart({
  A: "~@6 d3!2 ~@8",
})).s("gm_slap_bass_1").gain(0.59)

// bass · slap bass 2
const bass_3 = note(`<
  ~@4 A B ~@2 A B ~ A C B ~@2 A B ~@6 A B ~@2 A D ~ A E D ~@2 A D ~@6 A B ~@2 A B ~@2 A B F ~ G ~ F ~ F ~@3 A B ~@2 A D
  ~@2 A D ~@2 A B ~@2 A D ~@2 A B ~
>`.pickRestart({
  A: "~@14 a1 b1", B: "d2 ~@15", C: "d2 ~@13 a1 b1", D: "d2 ~@7", E: "d2@2 ~@12 a1 b1", F: "b1@6 c#2 ~@9",
  G: "b1@3 c#2 ~@4",
})).s("gm_slap_bass_2").gain(0.48)

// chords · brass section
const brass_section = note(`<
  ~@3 A B C D E F ~@13 G H I J K L M N ~@12 G H I J K L M N K L M N ~@8 G H I J K L M N G H I J K L M N G H I J K L M N
  ~
>`.pickRestart({
  A: "e4@3 a4@7 b4@3 c#5@2 ~", B: "c#5@3 b4@3 ~@10", C: "~@12 e4@2 a4 ~", D: "a4@2 g#4 f#4 e4@5 ~@7",
  E: "~@5 [e4,a4] [a4,c#5] [b4,d5]", F: "[a4,c#5]@2 [f#4,b4]@2 [e4,a4]@3 ~@9",
  G: "~@4 [a4,c#5] ~ [a4,c#5]@2 [f#4,b4] ~ [e4,a4]@2 [c#4,f#4] ~ [e4,a4] ~", // A B5 A5 F#5 A5
  H: "[f#4,b4]@2 ~ [e4,a4]@3 [c#4,f#4] ~@5 [e4,a4] ~ [f#4,b4] ~", // B5 A5 F#5 A5 B5
  I: "[a4,c#5]@2 [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5]@3 ~ [f#4,b4] ~ [e4,a4] ~", // A B5 A5
  J: "[f#4,b4]@2 ~ [e4,a4]@2 ~ [d4,f#4] ~@9", K: "~@4 [a4,c#5]@2 [c#5,e5] ~ [a4,c#5] ~ [f#4,b4] ~ [f#4,b4]@2 [e4,a4] ~",
  L: "[f#4,b4]@2 ~ [e4,a4]@2 ~ [c#4,f#4] ~@5 [e4,a4] ~ [f#4,b4] ~", // B5 A5 F#5 A5 B5
  M: "[a4,c#5] ~ [a4,c#5] [a4,c#5]@2 ~ [a4,c#5] ~ [a4,c#5]@3 ~ [f#4,b4]@2 [e4,a4] ~", // A B5 A5
  N: "[f#4,b4]@2 ~ [e4,a4]@3 [d4,f#4] ~@9", // B5 A5 D
})).s("gm_brass_section").gain(0.44).pan(0)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@2 A@2 ~@2 A@2 ~@14 A@2 ~@2 A@2 ~@14 A@2 ~@2 A@2 ~@2 A@2 ~ B C ~@15 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@3
>`.pickRestart({
  A: "a6/2", B: "~ [b3,b4] [c#4,c#5] [f#4,f#5]", C: "[e4,e5]@3 ~@5",
})).s("gm_string_ensemble_1").gain(0.19)

// chords · synth strings 1
const synth_strings_1 = note(`<
  A@3 B C D E B C F ~@3 D G ~@3 H I H J K L M D K L M F ~@3 D G ~@3 H I H J K L M D K L M F K L M N O ~@7 K L M D K L M
  F K L M D K L M F K L M D K L M F ~
>`.pickRestart({
  A: "[~ [b3,e4]@7 c#4@4, ~ a3@11]/3", B: "[e3,b3]@2 [a3,c#4] [e3,b3]", C: "[f#3,a3] ~@15", D: "~ d4 c#4 b3, ~ e4@3",
  E: "[a3,c#4]", F: "~ d5 c#5 b4, ~ e5@3", G: "c#4", H: "[d4,f#4,a4]", I: "[c#4,e4,a4]", J: "[b3,e4,a4]",
  K: "[a3,c#4,a4]", L: "[e3,b3,g#4]@2 [a3,c#4,a4] [e3,b3,g#4]", M: "[f#3,a3,f#4] ~@15",
  N: "~ [b3,b4] [c#4,c#5] [f#4,f#5]", O: "[e4,e5]@3 ~@5",
})).s("gm_synth_strings_1").gain(0.25)

// chords · pad sweep
const pad_sweep = note("<A@4 ~@16 B@4 ~@16 B@4 ~@16 B@4 ~@4 B@4 ~@4 B@4 ~@7>".pickRestart({
  A: "[~ [e4,a4,e5]@15, ~ b4@7 ~@8]/4", B: "[[e4,a4,e5]@7 ~, b4 ~]/4",
})).s("gm_pad_sweep").gain(0.14)

// chords · piano
const piano = note(`<
  ~@2 A B C ~ A B C D E ~ F ~@3 F ~ G H I J A B C ~ A B C D K ~ F ~ A B C ~ G H I J A B C ~ A B C D A B C ~ L ~ L M N ~
  O P A B C ~ A B C Q A B C ~ A B C R A B C ~ A B C ~@2
>`.pickRestart({
  A: "[e4,a4,c#5]", B: "[e4,g#4,b4]@7 ~ [a4,c#5]@4 [g#4,b4]@4, ~ e4", C: "[d4,f#4,a4] ~@7",
  D: "~@8 d5@2 c#5 b4 d5 c#5 b4@2", E: "[c#4,e4,a4]", F: "[d4,f#4] ~@15", G: "[d3,f#3,b3]", H: "[e3,a3,c#4]@15 ~",
  I: "[f#3,a3,d4]@15 ~", J: "~@12 d5 c#5 b4@2, [a3,b3,e4]", K: "[e4,a4,c#5]@7 ~", L: "[b3,d4,f#4]@6 [c#4,e4,g#4] ~@9",
  M: "~@10 [c#4,f#4,a4]@5 ~", N: "[b3,d4,f#4]@6 [e4,g#4] ~@9, ~@3 c#4 ~@4",
  O: "[b3,d4,f#4]@6 [c#4,e4,g#4]@2 ~@4 [c#4,f#4,a4]@3 ~", P: "[b3,e4,a4]@15 ~", Q: "~@12 d5 c#5 b4@2",
  R: "~@12 d5 c#5 b4 ~",
})).s("gm_piano").gain(0.4).pan(0.7)

// chords · piano
const piano_2 = note(`<
  ~@2 A B C ~ A B C D E ~@7 F G H I A B C ~ A B C D J ~@3 A B C ~ F G H I A B C ~ A B C D A B C ~ K ~ K L M ~ N O A B C
  ~ A B C P A B C ~ A B C Q A B C ~ A B C ~@2
>`.pickRestart({
  A: "[e4,a4,c#5]", B: "[e4,g#4,b4]@7 ~ [a4,c#5]@4 [g#4,b4]@4, ~ e4", C: "[d4,f#4,a4] ~@7",
  D: "~@8 d5@2 c#5 b4 d5 c#5 b4@2", E: "[c#4,e4,a4]", F: "[d3,f#3,b3]", G: "[e3,a3,c#4]@15 ~", H: "[f#3,a3,d4]@15 ~",
  I: "~@12 d5 c#5 b4@2, [a3,b3,e4]", J: "[e4,a4,c#5]@7 ~", K: "[b2,d3,f#3]@6 [c#3,e3,g#3] ~@9",
  L: "~@10 [c#3,f#3,a3]@5 ~", M: "[b2,d3,f#3]@6 [e3,g#3] ~@9, ~@3 c#3 ~@4",
  N: "[b2,d3,f#3]@6 [c#3,e3,g#3]@2 ~@4 [c#3,f#3,a3]@3 ~", O: "[b2,e3,a3]@15 ~", P: "~@12 d5 c#5 b4@2",
  Q: "~@12 d5 c#5 b4 ~",
})).s("gm_piano").gain(0.32).pan(0.3)

// other · lead 7 fifths
const lead_7_fifths = note("<~@18 A@4 ~@16 A@4 ~@12 A@6 B C ~@8 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@3>".pickRestart({
  A: "a5 ~@3 a5 ~@3 a5 ~@3 a5 ~@3", B: "a5 ~@3 a5 ~@3 a5 ~@3 f#5 ~@3", C: "e5",
})).s("gm_lead_7_fifths").gain(0.4).pan(0.6)

// other · electric guitar clean
const electric_guitar_clean = note(`<
  ~@2 A B C ~ A B C ~ A B C ~ A B C ~@5 A B C ~ A B C ~ A B C ~ A B C ~@5 A B C ~ A B C ~ A B C D ~@8 A B C ~ A B C D A
  B C ~ A B C D A B C ~ A B C ~@2
>`.pickRestart({
  A: "~@3 a4@3 ~@10", B: "~@3 g#4@3 ~@5 a4@3 ~@2", C: "f#4 ~@15",
  D: "e3 a3 b3 c#4 b3 c#4 e4 a4 b4 e4 a4 b4 c#5 b4 c#5 e5",
})).s("gm_electric_guitar_clean").gain(0.22)

// other · pad new age
const pad_new_age = note(`<
  ~@53
  [e4 a4 b4 c#5 b4 c#5 e5 a5 b5 e5 a5 b5 c#6 b5 c#6 e6]
  ~@15
  [e4 a4 b4 c#5 b4 c#5 e5 a5 b5 e5 a5 b5 c#6 b5 c#6 e6]
  ~@7
  [e4 a4 b4 c#5 b4 c#5 e5 a5 b5 e5 a5 b5 c#6 b5 c#6 e6]
  ~@9
>`).s("gm_pad_new_age").gain(0.2)

// chords · brass section
const brass_section_2 = note("<~@54 A ~ A B A ~ C D ~@25>".pickRestart({
  A: "[f#4,b4,d5,f#5]@6 [g#4,c#5,e5,g#5] ~@9", B: "~@5 [a4,c#5,f#5,a5]@2 ~",
  C: "[f#4,b4,d5,f#5]@6 [g#4,c#5,e5,g#5] ~@5 [a4,c#5,f#5,a5]@2 ~@2", D: "[a4,b4,e5,a5]@15 ~",
})).s("gm_brass_section").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@6 C B@4 A B@3 A B@3 A B@3 A B@3 A B@3
  A B@3 ~
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~@7 x ~", B: "x ~@2 x ~@2 x ~@9", C: "x ~@2 x ~@2 x ~@3 x ~@5",
})).gain(0.71)

// drums · clap
const clap = s("cp").struct("<~@2 [~ x ~ x]!84 ~>").gain(0.71)

// drums · snare
const snare = s("sd").struct("<~@2 [~ x ~ x]!84 ~>").gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@21 A ~@19 A ~@7 B ~@3 C ~@7 D ~@7 B ~@7 B ~@7 B ~>".pickRestart({
  A: "~@11 x ~@2 x ~", B: "~@3 x", C: "~@2 x ~@2 x ~@2 x ~@3 x ~@3", D: "~@2 x ~@2 x ~@2 x ~@3 x ~ x ~",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@21 A ~@19 A ~@7 B ~@3 B ~@7 B ~@7 B ~@7 B ~@7 B ~>".pickRestart({
  A: "~@3 x", B: "~@11 x ~@4",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@53 [~ x ~@6] ~@7 [~ x ~@6] ~@25>").gain(0.64)

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

// drums · cowbell
const cowbell = s("cb").struct("<~@2 [x!4]!84 ~>").gain(0.64)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct(`<
  ~@2 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~@2 x ~ x!2 ~@2", B: "~@2 x!2 ~@2 x ~",
})).gain(2.28)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct(`<
  ~@2 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~@2 x ~@6 x ~ x ~@4", B: "~@2 x ~@4 x ~@6 x ~",
})).gain(2.28)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@2 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A@2 B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A ~
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x!5 ~ x ~ x ~",
})).gain(0.5)

// drums · bell tree
const bell_tree = s("marktrees:0").struct(`<
  ~ A ~@7 A ~@7 A ~@3 A ~@7 A ~@7 A ~@3 A ~@7 A ~@3 A ~@7 A ~@7 A ~@7 A ~@9
>`.pickRestart({
  A: "~@15 x",
// … 7 more lines

More by Jessica Simpson