Strudelify
Baby I Love You cover art

Baby I Love You

Baby I Love You

Andy Kim

KeyA majorTempo120 bpm
0:00/0:00
// Baby I Love You — Andy Kim
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 81 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · fretless bass · "FRETLESS"
const bass = note(`<
  ~ A@6 B C D E D F G D@2 H I@2 J K L M N O N O N O N P B C D E D F G D@2 H I@2 J K L M N O N O N O N P N P D H I@2 J K
  L M N O N O N O N P N O N O N O N Q
>`.pickRestart({
  A: "a1!4", B: "a1@3 g1 a1@3 ~ a1@3 ~ a1@2 ~ a1", C: "d2@3 ~ d2@4 e2@3 ~ e2@4", D: "a1@3 ~ a1@3 ~ a1@3 ~ a1@2 ~ a1",
  E: "d2@3 ~ d2@4 e2@3 ~ e2@3 ~", F: "d2@3 ~ d2@2 ~ d2 e2@3 ~ e2@3 ~", G: "a1@3 ~ a1@4 a1@3 ~ a1@2 ~ a1",
  H: "a1@3 ~ a1@3 ~ a1@2 c#2@2 e2@2 c#2@2", I: "d2@3 ~ d2@2 ~ d2 d2@3 ~ d2@3 ~", J: "a1@3 ~ a1@2 ~ a1 a1@3 ~ a1@3 ~",
  K: "a1@3 ~ a1@2 ~ a1 a1@2 e2@2 c#2@4", L: "b1@3 ~ b1@2 ~ b1 b1@3 ~ b1@3 ~", M: "e2@3 ~ e2@2 ~ e2 e2@2 ~@2 e2@3 ~",
  N: "a1!8", O: "d2!4 e2!4", P: "a1@2 a1@2 a1@2 a1@2 a1@2 a1@2 a1@2 a1 ~", Q: "a1!7 ~",
})).s("gm_fretless_bass").gain(0.34)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B C B D E F G H I F J D H K L M N O@2 P Q R S R S R T R U F G H I F J D H K L M N O@2 P Q R S R S R T V@2 W X K L
  M N O@2 P Q R S R S R T V@2 R S R S R T V Y
>`.pickRestart({
  A: "[e4,c#5]@8 [e4,a4,d5]@7 ~, a4@3 ~@5", B: "[e4,a4,c#5]@3 ~", C: "[e4,a4,c#5]@7 ~ [e4,a4,d5]@7 ~",
  D: "[e4,a4,c#5]@7 ~ [e4,a4,d5]@6 ~@2", E: "[e4,a4,c#5]@5 ~@3", F: "[e4,a4,c#5]@13 ~@3",
  G: "[d4,f#4,a4]@7 ~ [e4,g#4,b4]@5 ~@3", H: "[e4,a4,c#5]@7 ~", I: "[d4,f#4,a4]@7 ~ [e4,g#4,b4]@6 ~@2",
  J: "[d4,f#4,a4]@6 ~@2 [e4,g#4,b4]@5 ~@3", K: "[e4,a4,c#5]@3 ~ [e4,a4,c#5]@3 ~ [e4,a4,c#5]@3 ~ [e4,a4,c#5]@3 ~",
  L: "[e4,g4,c#5]@3 ~ [e4,g4,c#5]@3 ~ [e4,g4,c#5]@3 ~ [e4,g4,c#5]@3 ~", // C#dim
  M: "[d4,f#4,a4]@3 ~ [d4,f#4,a4]@3 ~ [d4,f#4,a4]@3 ~ [d4,f#4,a4]@3 ~", // D
  N: "[d4,f4,a4]@3 ~ [d4,f4,a4]@3 ~ [d4,f4,a4]@3 ~ [d4,f4,a4]@3 ~", // Dm
  O: "[c#4,e4,a4]@3 ~ [c#4,e4,a4]@3 ~ [c#4,e4,a4]@3 ~ [c#4,e4,a4]@3 ~", // A
  P: "[d4,f#4,b4]@3 ~ [d4,f#4,b4]@3 ~ [d4,f#4,b4]@3 ~ [d4,f#4,b4]@3 ~", // Bm
  Q: "[e4,g#4,b4]@3 ~ [e4,g#4,b4]@3 ~ [e4,g#4,b4]@3 ~ [e4,g#4,b4]@2 ~@2", // E
  R: "[c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~", // A
  S: "[d4,f#4,a4]@3 ~ [d4,f#4,a4]@2 ~@2 [e4,g#4,b4]@2 ~@2 [e4,g#4,b4]@2 ~@2", // D E
  T: "[d4,f#4,a4]@3 ~ [d4,f#4,a4]@2 ~@2 [e4,g#4,b4]@2 ~@2 [e4,g#4,b4] ~@3", // D E
  U: "[c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [e4,a4] ~, ~@12 c#4 ~@3", V: "[c#4,e4,a4,c#5]@3 ~ [d4,a4,d5]@3 ~",
  W: "[c#4,e4,a4,c#5]@5 ~@3 [d4,a4,d5]@5 ~@3", // A D5
  X: "[c#4,e4,a4,c#5]@5 ~@3 [d4,a4,d5]@2 ~ [b1,c2,d2] [e2,f2,g2] [a2,b2,c3,d3] [e3,f3,g3,a3] [b3,c4,d4]", // A D5 Bm Em D7 Fmaj7 Bm
  Y: "[c#4,e4,a4,c#5]@3 ~ [d4,a4,d5]@2 ~@2", // A D5
})).s("gm_piano").gain(0.21).pan(0.3)

// other · flute
const flute = note(`<
  ~@7 A B C@2 D E F ~ G H I J K@2 L M N O P Q R S T ~ A B C@2 D E F ~ G H I J K@2 L M N O P Q R S T U T ~@5 K@2 L M N O
  P Q R S T ~ N O P Q R S T ~
>`.pickRestart({
  A: "~@8 a4 ~ a4@4 ~@2", B: "a4@3 ~ g#4@2 f#4@3 ~ g#4@3 ~@3",
  C: "[~@6 c#5 ~ c#5 ~ c#5 ~ c#5 ~ d5@7 ~ d5@2 c#5@3 ~ b4@3 ~]/2", D: "~@6 a4 ~ a4@2 a4@3 ~ a4@2",
  E: "~@2 g#4@4 ~@5 f#4@2 g#4@2 ~", F: "a4 ~", G: "~@6 c#5 ~ c#5 ~ c#5@4 ~@2", H: "d5@3 ~ c#5 ~ b4@3 ~ c#5@3 ~@3",
  I: "~@6 d5 ~ d5 ~ d5@4 ~@2", J: "e5@3 ~ d5 ~ a4@3 ~ b4@3 ~@3",
  K: "[~@6 c#5 ~ c#5 ~ c#5@2 ~@2 d5@5 ~@3 c#5 ~ b4 ~ a4@2 ~@2 c#5 a4]/2", L: "b4@4 ~@4 b4 ~ b4@2 ~@2 c#5@2",
  M: "~@2 c#5 ~ b4 ~ b4 ~ a4 ~ a4 ~ b4@2 ~@2", N: "~@4 c#5@5 ~ c#5 ~ b4@3 ~", O: "a4@5 ~ b4@4 ~@6",
  P: "~@6 c#5@3 ~ c#5@3 ~ c#5@2", Q: "d5@5 ~ c#5 a4 b4@5 ~@3", R: "~@6 c#5@3 ~ c#5 ~ b4@3 ~",
  S: "a4@5 ~ b4@5 ~@2 g4!2 ~", T: "g4 ~ g4!4 ~ g4 ~ g4 g4@5 ~", U: "~@13 g4!2 ~",
})).s("gm_flute").gain(0.52)

// other · rock organ · "ORGAN 3" · Cmaj7 Dm G Dm7 Cmaj7 Em7 Asus2
const rock_organ = note(`<
  ~@56
  [~@9 [b3,c4] [d4,e4,f4] [g4,a4,b4] [c5,d5,e5,f5] [g5,a5,b5,c6] [d6,e6,f6,g6] [a6,b6]]
  [c#7@6 c#7@3 ~ c#7@4 ~@2]
  [d7@4 c#7@2 b6@4 c#7@3 ~@3]
  [~@6 d7@9 ~]
  [e7@4 d7@2 a6@3 ~ b6@3 ~@3]
  ~@20
>`).s("gm_rock_organ").gain(0.12).pan(0.6)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@7 A@2 B C B C D@4 E F G H I J K C K C K C L@2 A@2 B C B C D@4 E F G H I J K C K C K C L@4 ~ M E F G H I J K C K C K
  C L@2 K C K C K C N@2
>`.pickRestart({
  A: "[[c#4,e4]@2 [d4,f#4] [e4,g#4,b4], a4@23 ~@9]/2", B: "[c#4,e4]@7 ~, a4", C: "[a3,d4,f#4] [b3,e4,g#4]",
  D: "[c#4 d4 ~@4 g4@2, e4@31 ~, a4@47 ~ a3@14 ~@2, ~@8 c#4@23 ~]/4", E: "[a3,d4,f#4]", F: "[a3,d4,f4]",
  G: "[a3,c#4,e4]", H: "[c#4,e4,a4]", I: "[b3,d4,f#4]", J: "[b3,e4,g#4]", K: "[a3,c#4,e4,a4]", L: "[a3,c#4,e4,a4]/2",
  M: "g4, a3@7 ~", N: "[[a3,c#4,e4,a4]@29 ~@3]/2",
})).s("gm_synth_strings_1").gain(0.15).pan(0.4)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~ A B A C A C D E F G D E H B I J K L I@2 M N I G I G I G I@2 D E F G D E H B I J K L I@2 M N I G I G I G I@5 J K L
  I@2 M N I G I G I G I@2 O G I G I G I P
>`.pickRestart({
  A: "[a3,c#4,e4]!2 [e3,a3,c#4] [a3,c#4,e4] [e3,a3,c#4,e4] ~@2 [e3,a3,c#4] [a3,d4,e4]!2 [e3,a3,d4] [a3,d4,e4] [e3,a3,d4,e4] ~@2 [e3,a3,d4], [a2,c#3]!2, e3@2 ~@3 [e3,a3,c#4]@2 ~ e3@2 ~@3 [e3,a3,d4]@2 ~, ~@3 [c#4,e4] ~@3 [d4,e4]", // A Asus4 Dsus2 Asus4 Dsus2 A Dsus2 C#m …
  B: "[a3,c#4,e4]!2 [e3,a3,c#4] [a3,c#4,e4] [e3,a3,c#4,e4] ~@2 [e3,a3,c#4] [a3,c#4,e4]!2 [e3,a3,c#4] [a3,c#4,e4] [e3,a3,c#4,e4] ~@2 [e3,a3,c#4], [a2,c#3]!2, e3@2 ~@3 [e3,a3,c#4]@2 ~ e3@2 ~@3 [e3,a3,c#4]@2 ~, ~@3 [c#4,e4] ~@3 [c#4,e4]", // A C#m
  C: "[a3,c#4,e4]!2 [e3,a3,c#4] [a3,c#4,e4] [e3,a3,c#4,e4] ~@2 [e3,a3,c#4] [a3,c#4,e4]!2 [e3,a3,c#4] [a3,c#4,e4] [e3,a3,c#4,e4] ~@2 [a3,c#4], [a2,c#3]!2, e3@2 ~@3 [e3,a3,c#4]@2 ~ e3@2 ~@3 [e3,a3,c#4]@2 ~, ~@3 [c#4,e4] ~@3 [c#4,e4]", // A C#m
  D: "[e3,a3,c#4,e4]!16, [a2,c#3]!2", E: "[d3,a3,d4,f#4]!8 [e3,g#3,b3,e4]!8, a2 b2", F: "[e3,a3,c#4,e4]!16, [a2,c#3]!4",
  G: "[d3,a3,d4,f#4]!8 [e3,g#3,b3,e4]!8, a2!2 b2!2", // D E
  H: "[e3,a3,c#4,e4] [a3,c#4,e4] [e3,a3,c#4] [a3,c#4,e4] [e3,a3,c#4,e4] ~@2 [e3,a3,c#4] [a3,d4,e4]!2 [e3,a3,d4] [a3,d4,e4] [e3,a3,d4,e4] ~@2 [e3,a3,d4], [a2,c#3]!2, ~@5 [e3,a3,c#4]@2 ~ e3@2 ~@3 [e3,a3,d4]@2 ~, ~@3 [c#4,e4] ~@3 [d4,e4]", // A Asus4 Dsus2 Asus4 Dsus2 A Dsus2 C#m …
  I: "[e3,a3,c#4,a4]!16, [a2,c#3]!4", J: "[e3,g3,c#4,a4]!16, [a2,c#3]!4", K: "[d3,a3,d4,f#4]!16, a2!4",
  L: "[d3,a3,d4,f4]!16, a2!4", M: "[f#3,b3,d4,f#4]!16, [f#2,b2]!4", N: "[e3,g#3,b3,e4]!16, [e2,b2]!4",
  O: "[e3,a3,c#4,a4]!15 [e3,a3,c#4], [a2,c#3]!4", // A
  P: "[e3,a3,c#4,a4]!12 [a2,c#3,e3,a3,c#4,a4] [e3,a3,c#4,a4] ~@2, [a2,c#3]!3 ~", // A
})).s("gm_acoustic_guitar_steel").gain(0.12).pan(0.4)

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

// drums · snare
const snare = s("sd").struct("<A ~ B ~ B ~ C D@7 E D@7 F D@7 E D@7 E D@7 G D@7 H D I D@7 G D@7 F D@7 G>".pickRestart({
  A: "~@3 x", B: "~@2 x!2", C: "~@8 x ~@2 x ~@4", D: "~ x ~ x", E: "~@2 x ~@3 x!2", F: "~@4 x ~@6 x!3 ~@2",
  G: "~@4 x ~@6 x!2 ~@3", H: "~@4 x ~@6 x!2 ~ x ~", I: "~ x ~@2",
})).gain(0.49)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@7 A B@2 C A B@2 D A B@3 A B@2 D A B@2 C A B E D A B@2 C A B@2 D A B@2 C A B@2 D A B@2 C A B E D E F A B@2 C A B@2 D
  A B@2 C A B E D A B@2 C A B E D
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", D: "x!6 ~@2", E: "x!6 ~ x", F: "x!4 ~@4",
})).gain(0.31)

// drums · low tom
const low_tom = s("lt").struct("<A ~ B ~ B ~ C ~@15 D ~@49 E ~@8>".pickRestart({
  A: "~@3 x", B: "~@2 x!2", C: "~@4 x ~@2 x", D: "~@7 x", E: "~@14 x!2",
})).gain(0.37)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~ B ~ B ~ C ~@22 A D ~@22 A E A F ~@14 A ~@7 A ~>".pickRestart({
  A: "~@3 x", B: "~@2 x!2", C: "~@8 x ~@3 x!2 ~@2", D: "~@6 x!2", E: "~@7 x", F: "~@12 x!4",
})).gain(0.37)

// drums · crash
const crash = s("cr").struct(`<
  ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ B C A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ B ~ D ~ A ~@3 A ~@3 A ~@3 A ~ B ~ A ~@3 A
  ~ B ~
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~@6 x!2", D: "x ~@2 x",
})).gain(0.24)

// drums · high tom
const high_tom = s("ht").struct("<A ~ B ~ B ~ C ~@49 D ~@24>".pickRestart({
  A: "~@3 x", B: "~@2 x!2", C: "~ x", D: "~@8 x!4 ~@4",
})).gain(0.43)

// drums · tambourine
const tambourine = s("tb").struct("<~@15 A@8 B C@7 ~@8 A@8 B C@6 D C E A@8 B C@6 D B C@6 D>".pickRestart({
  A: "~ x ~ x", B: "~ x!3", C: "x!4", D: "x!3 ~", E: "x!2 ~@2",
})).gain(0.43)

// drums · rim
const rim = s("rim").struct("<~@31 [x!16]!25 [x!8 ~@8] [x!16]!15 [x!15 ~] ~@8>").gain(0.37)

stack(
  bass, piano, flute, rock_organ, synth_strings_1, acoustic_guitar_steel, kick, snare, hihat, low_tom, mid_tom, crash,
  high_tom, tambourine, rim
)

More by Andy Kim