Strudelify
Baby Baby cover art

Heart In Motion

Baby Baby

Amy Grant

KeyF majorTempo105 bpm
0:00/0:00
// Baby Baby — Amy Grant
// 105 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(105/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 · "kbd 1"
const piano = note(`<
  A B A B C D E F C D G H I@2 A B A B C D E F C D G H I@2 J K L M N O P Q P Q R S T U R S V U W@2 P X Y Z AA AB ~@30
>`.pickRestart({
  A: "[a3,c4,f4] ~ [a3,c4,f4] ~@3 [a3,c4,f4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~@3 [a3,c4,f4] ~", // F Gm F
  B: "[c4,f4,a4] ~ [c4,f4,a4] ~@3 [a3,c4,f4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~", // F Gm F
  C: "[a3,c4,f4] ~ [a3,c4,f4] ~ a3 ~ [f3,a3,c4] ~ [g3,bb3,d4] ~ [g3,d4,f4] ~@3 f3 ~", // F Gm G7
  D: "[f3,a3] ~ [f3,a3,c4] ~ d4 ~ [a3,c4,f4] ~ [g3,bb3,d4] ~ [g3,bb3] ~ [f3,a3,c4] ~ [f3,a3] ~", // F Gm F
  E: "[a3,c4,f4] ~ [a3,c4,f4] ~@3 [a3,c4] ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~ a4 ~ g4 ~", // F Am Gm
  F: "[a3,c4,d4] ~ [a3,c4,d4] ~ f4 ~ [a3,c4,d4] ~ [bb3,d4,g4] ~ [bb3,d4] ~ [a3,c4,f4] ~ [a3,c4] ~", // D7 Gm Bb F Am
  G: "[a3,c4,f4] ~ [a3,c4,f4] ~@3 [a3,c4] ~ [d4,g4] ~ [d4,g4] ~ a4 ~ g4 ~, ~@4 bb4 ~@3", // F Am G5
  H: "[a3,c4,d4] ~ [a3,c4,d4] ~ f4 ~ [a3,c4,d4] ~ [bb3,d4] ~ [bb3,d4] ~ [a3,c4] ~ [a3,c4] ~, ~@4 g4 ~ f4 ~", // D7 Bb Am
  I: "[[bb3,d4]@4 f4 ~@2 f4 eb4 f4 ~@4 [bb3,d4,g4]@4 d4 ~ f4 ~ d4 ~ [bb3,eb4,g4]@3 ~ [bb3,eb4]@2 f4 ~, g4 ~@27 f4 ~@3]/2", // Bb Gm Eb Eb5
  J: "[a3,c4,f4]!2 ~ [a3,c4,f4] [bb3,d4,g4]!2 ~ [a3,c4,f4]", K: "[c4,f4,a4]!2 ~ [a3,c4,f4] [bb3,d4,g4]!2 [c4,f4,a4] c4",
  L: "[c4,e4,a4]!3 [c4,e4,g4]!2 [c4,e4] [d4,f4,a4] [d4,f4]", // Am C Dm
  M: "[bb3,d4,g4] [bb3,d4,f4]!2 [bb3,d4] [bb3,d4,g4] [bb3,d4] [bb3,d4,f4] [bb3,d4]", // Gm Bb Gm Bb
  N: "[c4,e4,a4]@2 [c4,e4,a4]@2 [c4,e4,a4]@2 [c4,e4,g4]@2 [c4,e4,g4]@2 d4@2 f4@3 ~", O: "[d4,f4,bb4]!4 g4 f4 f4@2",
  P: "[b3,d4,g4]!2 ~ [b3,d4,g4] [c4,e4,a4]!2 ~ [b3,d4,g4]", Q: "[d4,g4,b4]!2 ~ [b3,d4,g4] [c4,e4,a4]!2 [d4,g4,b4]!2",
  R: "[b3,d4,g4]!2 b3 [g3,b3,d4] [a3,c4,e4] [a3,e4,g4] ~ g3", // G Am A7
  S: "[g3,b3] [g3,b3,d4] e4 [b3,d4,g4] [a3,c4]!2 [g3,b3]!2, ~@2 e4 d4", // G Am G
  T: "[b3,d4,g4]!2 ~ [b3,d4] [e4,a4]!2 b4 a4, ~@2 c5 ~", U: "[b3,d4,e4]!2 g4 [b3,d4,e4] [c4,e4]!2 [b3,d4]!2, ~@2 a4 g4",
  V: "[b3,d4,g4]!2 ~ [b3,d4] [e4,a4,c5]!2 b4 a4", // G Bm Am
  W: "[a4@2 ~@2 g4@2 ~ g4 f4 g4 ~@4 [c4,e4,a4]@4 e4@2 g4@2 e4@2 ~@6 g4@2, [c4,e4]@2 ~@4 [d4,f4]!2, ~@13 a4@2 ~]/2", // Am C Dm
  X: "[d4,g4,b4]!2 ~ [b3,d4,g4] [c4,e4,a4]!2 [d4,g4,b4] d4", // G Am G
  Y: "[d4,gb4,b4]!3 [d4,gb4,a4] [d4,gb4]!2 [e4,g4]!2, ~@2 a4 b4", Z: "[c4,e4,a4] [c4,e4,g4]!2 [c4,e4]!5, ~@2 a4 g4",
  AA: "[d4,gb4,b4]@2 [d4,gb4,b4]@2 [d4,gb4,b4]@2 a4 g4 [d4,gb4]@2 [d4,gb4]@2 [d4,gb4]@2 [d4,gb4]@2, ~@2 a4 b4", // Bm D
  AB: "[e4,g4,c5]!4 a4 g4 g4@2", // C
})).s("gm_piano").gain(0.29)

// chords · marimba · "kbd 1"
const marimba = note("<~@54 A B A C A D E F ~@22>".pickRestart({
  A: "[f5,a5,d6]@2 c6@2 a5@2 f5@2 [g5,ab5] g5 f5@2 d5@2 c5@2", // Dm Abmaj7
  B: "d5 f5 f5@2 f5@2 ~ f5 g5 d5 f5@6, [ab4,c5] bb4, ~@3 d5 ~@4", // Ab
  C: "d5 f5 f5@2 [g5,ab5] g5 f5@2 d6@2 c6@6, [ab4,c5] [g5,bb5]", // Abmaj7 Ab Gm
  D: "d5 f5!2 ~ f5 ~ d5 f5 g5 [g5,ab5] [f5,g5] ~ f5@3 ~, [ab4,c5]@5 ~@3 bb4@5 ~@3", // Abmaj7 Fsus2 Ab
  E: "[f5,a5,d6] ~ c6 ~ f6 ~ d6 ~ c6 [c6,d6] g5@2 f5 ~ d5 g5, ~@10 a5 ~@5", // Dm Csus2
  F: "g5 [g5,bb5] f5 ~ [e5,a5]@2 c6 ~ [bb5,d6]@2 f6 ~@5, [c5,eb5]@3 ~ d6 ~@3 a6 ~@7", // Gm A5 Bb Cm
})).s("gm_marimba").gain(0.8)

// chords · piano · "kbd 1"
const piano_2 = note("<~@61 A B C D E F G H I J K L M N ~@9>".pickRestart({
  A: "~@7 c4", B: "[c4,e4,a4]!3 [c4,e4,g4] [c4,e4]!2 [d4,f4]!2, ~@2 g4 a4",
  C: "[bb3,d4,g4] [bb3,d4,f4]!2 [bb3,d4] [bb3,d4,g4] [bb3,d4,f4] [bb3,d4]!2, ~@3 f4", // Gm Bb Gm Bb
  D: "[c4,e4,a4]@2 [c4,e4,c5]@2 [c4,e4,a4]@2 [c4,e4,g4] f4 [c4,e4,g4]@2 d4@2 f4@4", E: "[d4,f4,bb4]!4 g4 f4 c5@2",
  F: "[b3,d4,g4]!2 ~ [b3,d4,g4] [c4,e4,a4]!2 ~ [b3,d4,g4], d5@15 ~", // G Am G
  G: "[d4,g4,b4]!2 ~ [b3,d4,g4] [c4,e4,a4]!2 [d4,g4,b4]!2", H: "[b3,d4,g4]!2 ~ [b3,d4,g4] [c4,e4,a4]!2 ~ [b3,d4,g4]",
  I: "[d4,g4,b4]!2 ~ [b3,d4,g4] [a3,c4,f4] [g3,bb3,eb4] [f3,a3,d4] [eb3,g3,c4]", // G F Eb Dm Cm
  J: "[d3,g3,b3]!2 b3 [g3,b3,d4] [a3,c4,e4] [a3,e4,g4] ~ [a3,c4,e4]", // G Am A7 Am
  K: "[bb3,d4,a4]@2 [bb3,d4,f4] g4@2 a4 [d4,f4,bb4]@2 [c4,e4]@2 [c4,e4]@2 ~@2 [c4,e4,g4]@2, ~@4 a4@3 ~", // Bbmaj7 Bb C
  L: "[b3,d4,g4]!2 ~ [b3,d4,g4] [c4,e4,a4]!2 ~ [a3,c4,e4]", // G Am
  M: "[g3,bb3,d4,f4]@2 [g3,bb3,d4,f4] [g3,bb3,d4,f4]@3 [g3,bb3,d4,f4]@2 [g3,a3,c4,e4]@2 [g3,a3,c4,e4]@2 ~@4", // Gm7 Am7
  N: "[b3,d4,g4] [b3,d4,gb4] e4 [g3,b3,e4] ~@4", // G Bm Em
})).s("gm_piano").gain(0.54)

// bass · fretless bass · "Bass"
const bass = note(`<
  A B C D E D F G H G I G J K H L M N E D F G H G I G J K E D O P Q R S T U V W X Y X W X Y X Z AA AB T AC AD AE AF AG
  AH A AI A AJ@6 AK@5 ~@14
>`.pickRestart({
  A: "f2 ~ f2 ~@3 f2 ~ bb1 ~ bb1 ~@3 bb1 ~", B: "f2 ~ f2 ~ d2 ~ c2 ~ bb1 ~@2 bb1 c2@3 ~",
  C: "f2 ~ f2 f2@3 c2@2 c2@2 c2@2 ~@4", D: "f2!2 d2 c2 bb1@2 c2@2", E: "f2!2 ~ f2 bb1!2 ~@2",
  F: "f2@2 f2 d2@2 ~ c2 ~ bb1 ~ bb1 ~@5", G: "f2 ~ f2 ~ d2 ~ c2 ~ bb1@3 ~ c2@3 ~", H: "f2 ~ f2 ~@3 f2 ~ bb1 ~ bb1 ~@5",
  I: "f2 ~ f2 d2@2 ~ c2 ~ bb1 ~ bb1 ~@5", J: "[eb3,g3]@5 ~@3 c2!2 d2 eb2 ~@4", K: "~@2 d3 ~ c3 ~ bb2 ~ c2@3 ~ c2@3 ~",
  L: "f2@2 f2@2 d2@2 c2@2 bb1@2 bb1@2 c2@3 ~", M: "f2@2 f2 d2@3 c2@2 bb1@2 bb1@2 ~@4",
  N: "f2!2 ~@2 f2@2 d2 c2 bb1@2 bb1@2 c2@4", O: "c2!6 bb1!2", P: "bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1 c2",
  Q: "c2 c3 c2@2 c2@2 c2@2 c2@2 c2@2 c2 c2@3", R: "eb2@2 eb2@2 eb2@2 eb2@2 eb2 g2 bb2 g2 c3@4", S: "g2!2 ~ e2 c2!2 ~@2",
  T: "g2@2 g2@2 e2@2 d2@2 c2@2 c2@2 d2@3 ~", U: "g2@2 g2 e2 ~@2 d2@2 c2@2 c2@2 ~@4",
  V: "g2@2 g2@2 e2@2 d2@2 c2@3 d2 e2 g2 a2 b2", W: "g2!2 ~ g2 c2!2 ~@2", X: "g2@2 g2@2 e2@2 d2@2 c2@3 ~ d2@3 ~",
  Y: "g2@2 g2 e2@3 d2@2 c2@2 c2@2 ~@4", Z: "[f3,a3]@7 ~ d2!2 e2 f2 ~@2 f2@2", AA: "~@2 a2 c3 d3@2 c3 a2 d2@3 ~ d2@3 ~",
  AB: "g2!2 ~ g2 e2!2 ~@2", AC: "d2!6 c2!2", AD: "c2!8", AE: "d2@2 d2@2 d2@2 d2@2 d2@2 d2@2 d2 c2 d2@2",
  AF: "f2@2 f2@2 f2@2 f2@2 a2 c3 d3 c3 f3@3 ~", AG: "f2 ~ f2 ~@3 f2 ~ bb1 ~ bb1 ~@3 bb1 c2",
  AH: "db2 ~ db2 ~@3 db2 ~ c2 ~ c2 ~@3 c2 d2", AI: "eb2 f2 ab2 c3 eb3 ~ c3 ~ c2 ~ c2 ~ eb2 ~ e2 ~",
  AJ: "[db2 ~ f2 ~ bb2 ~@3 f2 eb2!2 ~ eb2@2 ~@2 f2@2 f2@2 ~@2 f2@2 bb1@2 bb1@2 ~@2 bb1@2 db2!2 f2 db2 ab2@2 ab2!2 ~ eb2 eb2@4 ~@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1 c2 c2 c3 c2@2 c2@2 c2 c3 c2@2 c2@2 c2 c2@2 c2, ~@14 eb2@27 ~@5 eb2@50]/6",
  AK: "[~ c2 ~ f2 g2@4 ~@57 b3 a3 e4 c4 b3 a3 f3 e3@2 d3@2 c3@2 b2@2, ~ eb2@39]/5",
})).s("gm_fretless_bass").gain(0.66)

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

// drums · snare
const snare = s("sd").struct(`<
  A@3 B@2 C B@2 D E F B ~@3 C B@2 F C B C B@4 ~@2 C B@3 C B C B@4 C B C B@2 C B ~@2 C B C B@2 C B@5 C B G B C B C B@18
>`.pickRestart({
  A: "x!2 ~ x", B: "~ x ~ x", C: "~@2 x ~@4 x", D: "~@4 x ~@7 x!2 ~@2", E: "~@4 x ~@9 x!2", F: "~@4 x ~@7 x ~@2 x",
  G: "~ x ~@2",
})).gain(0.52)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@5 A ~@3 A ~@5 A ~@3 A ~ A ~@6 A ~@3 A ~ A ~@4 A ~ A ~@2 A ~@3 A ~ A ~@2 A ~@5 A ~ B ~ A ~ A ~@18
>`.pickRestart({
  A: "~@12 x!2 ~@2", B: "~@13 x!3",
})).gain(0.66)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@5 A ~@3 A ~@5 A ~@3 A ~ A ~@6 A ~@3 A ~ A ~@4 A ~ A ~@2 A ~@3 A ~ A ~@2 A ~@5 A ~ B ~ A ~ A ~@18
>`.pickRestart({
  A: "~@10 x!2 ~@4", B: "~@10 x!3 ~@3",
})).gain(0.66)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@5 ~ A@3 ~ A@2 ~@4 A@3 ~ A ~ A@4 ~@3 A@3 ~ A ~ A@4 ~ A ~ A@2 ~ A ~@3 A ~ A@2 ~ A@5 ~ A ~ A ~ A ~ A@18
>`.pickRestart({
  A: "~ x ~@3 x ~@2",
})).gain(0.66)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@5 A ~@3 A ~@5 A ~@3 A ~ A ~@6 A ~@3 A ~ A ~@4 A ~ A ~@2 A ~@3 A ~ A ~@2 A ~@5 A ~ B ~ A ~ A ~@18
>`.pickRestart({
  A: "~@8 x!2 ~@6", B: "~@7 x!3 ~@6",
})).gain(0.66)

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

// drums · ride
const ride = s("rd").struct("<~ [~@11 x ~ x ~@2]!2 [~@15 x] ~@20 [~@11 x ~ x ~@2] ~@59>").gain(0.66)

stack(piano, marimba, piano_2, bass, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride)

More by Amy Grant